|
|
/ Z) E; k" N4 B: M# o# v
4 E( n5 ? T5 a2 ]* }9 D% D/ z( E' ]
8 p/ \2 r. L' V! v: Y- ?0 e% Z+ d
成立于2017年底的统一推送联盟(Unified Push Alliance)是由国家工信部牵头,由中国信息通信研究院泰尔终端实验室倡导,联合了华为、OPPO、vivo、小米等多家国产智能手机品牌联合成立的“安卓统一推送联盟”。
0 p) z6 H. G& E7 c( A% K% a5 x" M8 ~1 t! ^6 q9 u
7 U3 I5 ?2 n5 J2 D4 k8 O
, b# w0 K4 \4 i& C. c; ~0 r% E0 ~9 H4 m, I% L) S$ K! D* R& K8 e
/ c0 N+ h( Q) M1 W' W这家机构成立的初衷就是为了解决你手机上的应用推送服务问题。在最近,统一推送联盟又传出新的进展:0 d0 E# k1 O; _+ u, o
6 k, ^ Q5 B- ?9 \- q
# o& P$ _2 U$ ]0 v4 @25日,统一推送联盟官方宣布,已收到华为技术有限公司、广东欧珀移动通信有限公司、深圳市万普拉斯科技有限公司、深圳市锐尔觅移动通信有限公司四家公司的的进度确认,均已经按照联盟标准《T-UPA0002-2019统一推送接口层规范》最新版本,完成了开发工作。这意味着,符合联盟标准的统一推送服务,将覆盖华为、荣耀、OPPO、realme、一加五个品牌的手机。' w& Z7 f# W3 y4 H" v+ B
% J G* f" `" a; }1 N; ]9 X
0 F2 q* _$ _8 m& {5 y4 ?
4 Y4 O% T. [8 a2 e m3 m
2 A& t8 z- g! m. w1 p+ N: q; h. d; s: w) l8 h, a Z' p
这样做的后续会对我们产生怎样的影响?; ^$ w0 F9 W+ y4 A9 o
) j2 O" o6 ~' _( ~! q8 s5 C
6 q& v8 P2 v' \1 ?' M0 p# C
( L5 L3 c( l3 l0 z% f2 `" K: f; b/ s; g+ T' k
7 ^- _: g% k; Z% _+ l7 `5 G% F9 F什么是推送?1 a1 Q& A, B8 r4 {3 G' F
6 Z- S6 p1 K$ m: N
& s4 ~- R5 ?$ J: o) K( |3 E; f
9 r+ H @4 [) i7 c* V5 q这是需要弄明白的第一个问题。
@ q, L6 I) f- V1 `# N6 M, |* _1 c/ Z; D& D$ f; i6 S
- z1 ~/ H5 \! g* t: E7 O8 J$ E
这个问题很简单,我们当前使用的智能手机随时随地都可能会收到来自应用的消息推送。比如大家日常最常用到的微信。当你收到朋友发过来的微信消息时,手机就会弹出消息通知,这条消息其实就是经过你手机相应的推送机制推送过来的信息。/ g* w- U. E- ^
( g: l9 \8 ], R* Z) ]4 _# i4 F6 M; r
& m6 B' p; g2 s& G6 ~1 y+ G

; o# {- h: H2 P. P7 X; V" U! G
- Q1 G5 ]* G& V- V1 x: }. Q! P5 {: `' @% w2 f, t; ~% B
需要注意的是,推送信息其实是在手机没有打开应用,甚至是应用都没有在后台常驻的情况下收到的。要做到这一点,其实背后就牵涉到手机的信息推送原理。
4 v q9 y+ [, }/ r8 t2 F如果你使用的是iPhone,这套信息推送机制名为APNs(Apple Push Notification service)中文翻译为:苹果推送通知服务。它的主要工作原理是:. h7 ~- t% X1 [& t/ o8 J5 v
, |0 C! X, U) e l/ S/ p" J
9 c" l: U. }0 `. r1 { V
$ d9 y! X. O# x1 C" R6 V
5 d' [; ] Y5 t/ ~0 g. `7 X% t7 |( W& o \9 e4 o! A. U2 Q; I; P& F
前期应用程序申请消息推送服务,你的设备会向APNs服务器发送注册请求;APNs服务器接受请求,并将deviceToken返给你设备上的应用程序 ;客户端应用程序将deviceToken发送给后台服务器程序,后台接收并储存;后台服务器向APNs服务器发送推送消息 ; APNs服务器将消息发给deviceToken对应设备上的应用程序。
5 |2 O; p9 j# l' @
; ~( E* V1 i9 j0 _
% k/ x9 \4 x0 s
{) W; n( r% \/ M
. F3 Z) Q+ q" X& r1 P4 J$ T2 T! F# y( V
看起来比较复杂,其实很好理解:用户发送信息给你,应用就会将这条信息的提醒内容推送到苹果的服务器端,再由苹果的服务器中转发送到微信目标用户。于是,你的手机上就会弹出信息通知。换句话说,Apple的服务器在其中扮演了一个中继站的角色。
$ O8 f7 @+ c1 \4 v' d% e
( B; X/ Q6 i: f# n1 l" g8 G1 G
' t7 u1 E- p: |0 m6 _ G$ H# @# `APNs的好处是能够使得应用在未唤醒的条件下,就能实现信息推送,避免了应用常驻后台带来的功耗,应用程序也不用随时保持网络连接,同时也不用安装额外的SDK。* a2 H1 B) I* ? b* L
8 k3 I; v, A- i z
0 q. {- L! w3 j7 k
; Y* q# P9 [% R5 A. \% p" I& _! L9 ]3 O$ g3 n: B' { A5 |, O" Z' V
3 o, ]) F& F. l( K安卓生态混乱的推送机制' m/ O$ y5 [: i4 K- L- a" F
) n4 }6 H! [$ G6 n! n那么安卓手机的推送机制是怎么样的呢?其实原理大致和苹果的APNs差不多,但却存在一系列的现实问题。
3 s) }: t6 t' g; u2 |
; o* K* P& }3 `8 |; N; Z) |2 U$ s k! J

' o1 L4 U3 ?) o ~3 Q2 G3 G+ w& L& }9 T g$ T
7 Z6 O7 V: e7 d, k目前安卓的推送服务名为GCM(Google Cloud Messaging),译为Google云端通讯。它能够让第三方应用的开发者把通知消息或信息从服务器发送到所有使用这个应用的安卓系统或Chrome浏览器的应用或拓展上。(需要说明的是,在2016年的I/O大会上,谷歌推出了全新服务Firebase,并启用了FCM(Firebase Cloud Messaging)推送服务。根据谷歌的计划,FCM服务将替代GCM,二者在核心工作原理上类似)。
5 @0 R6 s9 B! |4 V3 Q2 f5 E0 m% P. g( q3 F0 S0 b2 H2 q" u. Y
% e3 ` B7 c) Y, P但问题是,由于众所周知的原因,包括FCM在内的一系列谷歌服务在国内并不能正常使用,要想实现国产安卓手机的信息推送就不得不想其他的办法。具体来说,目前国内安卓生态的信息推送机制大概有三种。
7 f& y- p7 `7 F" y3 p# X X1 V/ A3 A7 I! y+ O3 C1 U
0 A1 n% F6 n3 N6 Y5 j* T
2 S. _8 k+ r; Z: z& G3 j
4 \2 P% ^) H4 ~! Q3 z8 B5 s
: z; L7 b7 l# B# f& Y; F6 a第一种就是应用自身单独建立推送服务。采用这种做法的是微信、QQ等这类具备自己搭建服务器,建立消息推送渠道能力的超级应用。由于这类即时通讯类应用对于信息及时推送的需求更加迫切,所以他们背后的厂商花了很大的代价去建立推送渠道。日常工作时,系统后台需要驻留一个推送服务,便可实现相应的实时的信息推送。而对于这类用户数量庞大的超级应用,大多数的系统都会放宽其常驻后台的权限,确保不会被系统清理掉进程。
: v$ j8 P- ]0 |7 }: \9 A' f8 `2 h2 k- c- h/ h" _
0 Z; K, |! u, K" K8 w ; U1 M/ h) K" e) B
, U F' h8 j* e4 i/ Z
/ j1 e( R6 \ R/ W第二类就是手机厂商搭建的消息推送服务。在国内目前出货量排名靠前的手机厂商都在自家的定制化UI上做了一套和FCM类似的信息推送机制,比如小米的MiPush,华为的HMS 等等。和 安卓的FCM 一样,它有专门的服务器将来自各个应用的信息中转到用户手机上,用户手机的后台只需要运行这一个推送服务,就能收到无数应用的推送消息。' U5 R2 s' d' q. M& ?- V
9 K- X# z6 a# r1 M1 T
# H7 Q5 y$ D; H7 K7 [, f B+ \0 r但问题是,对于开发者来说面对不同手机品牌建立的推送机制,开发者就需要在应用内加入不同的SDK。这样一来,就面临应用臃肿,后期升级维护麻烦等问题。尤其是对于一些小的开发者来说,针对不同的品牌做应用匹配并不现实。. `. R O( s0 F+ ?
6 q9 J* [; Q2 ]
5 g; i. Y* V+ V1 N. i- f

. {. O2 b* s& A3 e7 M# Y# X% y+ y
: C/ ^6 c6 \7 o z: O2 R2 T( o* c
* ~+ L% \2 a4 _" l4 ]9 r第三类是借助第三方的信息推送平台,比如国内的极光、友盟等等。有的个人开发者没有足够的精力给自己的应用做消息推送。于是他们接入一个具备分享、消息推送等功能SDK,就能实现信息推送功能。
6 E& L/ \* u: r$ h! a
% g1 Q8 z8 ^# N, W- y/ g
. F/ v7 w% E. v" m这样做虽然省事,但对用户并不是很友好。很多时候,这类应用会相互唤醒其他应用了同样SDK 的应用,导致大量的应用进程在后台被唤醒、驻留。另外这些第三方的SDK由于缺少手机厂商的支持,其停留在后台的服务很容易被系统被干掉,导致消息推送的不及时。
. j8 k. @5 V+ T' n+ v4 \8 B" @" S. \* ]; u% M9 Q% U$ c
8 e0 m \( X5 q3 e2 w2 ]: x- c4 c( m如此一来,对于国内安卓用户而言,我们手机上安装的应用可能会存在不用的信息推送机制。这些应用之间由于信息推送机制的不规范,往往存在交叉唤醒、链式启动的现象,于是我们的手机就变得更加耗电和卡顿。: ?% R5 t( w- G
3 S2 C* R% }& W7 l9 k
. L$ N+ l4 i, P$ H
/ V0 Y$ ~) x9 T' W7 u5 ~, ?1 ]/ |9 V( H0 `) k
! L! z: n+ y/ a. w- {
试想一下,如果你的手机装了BAT的APP,也装了其他第三方的APP。你的手机为了实现即时信息的推送,就需要保持和腾讯、阿里、百度服务器的连接,同时还要保持其他第三方服务器的连接。为了保证能把消息及时推送,很多APP就在后台保持活跃。8 S6 g. x" }* M) H+ N& s
4 m, w; }; w* D+ _+ I8 B) C3 r, [* B8 ~
在维持如此多长连接和APP活跃的情况下,要想实现手机不卡顿就只能加大手机的运存以及提升手机的硬件性能,比如电池容量以及处理器性能等等。
8 W" R8 I' h, C; z
# p- w" {- h( | x, D! h8 L& g9 g# t/ E E' m$ A
而在原生安卓以及iOS上,手机只需要保持和谷歌、苹果的服务器链接就可以了。
+ Y5 F( [ b0 c& \) U; p* T
9 p7 ?4 P, H6 n7 ^, t* n* m" {8 X" t& o( ~8 b" W& P
/ a9 d2 w+ Z- a: D- c' o- [联盟建立的作用
' ^3 {: D% J s- C: T" O
1 @, l" Q" p2 O. i这么看来,国产安卓生态其实一直都缺乏一个统一的信息推送平台。统一推送联盟(Unified Push Alliance)的建立其实就是为了建立一个这样的平台。
, T$ W. I& b, O& I9 O! T
. s; B( C* W- M; i4 i/ n5 G0 t# N2 o8 V, c7 `

R' t: J# S# S7 m, x/ P
# q6 T; g) n8 A" F- A2 H; I4 |
& o' d. j4 C' ]9 z" }" z1 @为了给手机用户提供更好的使用体验,统一推送联盟联合「Android 绿色应用公约」倡议互联网服务提供商和 APP 独立开发者未来采用统一推送的解决方案,并放弃非必要后台行为,包括: Q2 g+ H6 U: k3 {, [
8 `1 A& V2 Q {/ [3 X' N4 M- D, j0 a
7 d ~5 F. n) p- f$ U7 N- O
5 O- _1 \! A# ~+ O/ O. }) T1 |- S o/ x
- 不在启动应用时强制请求『读取手机状态和身份(READ_PHONE_STATE)』权限。
4 U7 T+ t8 L* [* i4 a3 F6 T - App限制交叉唤醒、链式启动。除用户的主动交互触发外,避免启动其它应用未处于运行中的进程。, d' u) H9 A0 @! C$ h: _& I
- App让设备CPU尽可能处于休眠状态,请求唤醒CPU的周期性任务时间间隔尽可能大于1小时,并避免在不必要的时间段(如夜间)继续调度周期性事件。' V: z, ^8 M3 T0 h6 g
- App避免不必要常驻后台的行为。在应用进入后台的短时间内须停止所有后台服务,且在除了收到广播和正常触发的后台行为期间不可以再启动新的后台服务。
4 [. h8 J- O# h& w
6 ]+ q7 d3 t8 O) z/ W7 H* N4 N2 z% q& a0 a5 L6 ?, ^( j) }8 S# x
在公布的《统一推送技术要求和测试方法》文件中,统一推送联盟提出了对各终端厂商制定推送基本技术指标和测试方法的要求。$ X8 s( C/ c/ {& n7 Q
8 D3 G6 U( o: L% a L2 q5 i
( f: Z* m; S5 L" M- _; L* M如空载流量应小于 300kB/日、空载功耗应小于 40mAh/日,前者是指终端接入数据网络(不包括 Wi-Fi)且推送通道待机状态下,无消息推送时,流量消耗大小;后者指终端在熄屏条件下,接入数据网络,无推送消息时,推送服务消耗的功耗。. n1 v+ z, a' \9 A2 p
; H/ H8 e+ M. K- j& u' h3 P; ~* ^% p; l$ Q6 [, Y1 V$ W- v
4 e8 {% G* p+ ~
9 c5 ^3 A C7 N6 O
8 a7 n# U, V" j/ w一个统一、规范的推送平台的建立,对于各方来说都是有利的。应用开发商、手机厂商省去了自建信息推送机制的建设和维护成本。个人开发者能够减少应用开发和维护的工作量,降低应用开发成本。而对于消费者而言,手机后台不用驻留那么多各式各样的服务和应用,也能有效避免一些流氓应用为了保持活跃度而频繁唤醒而造成的手机卡顿、耗电量激增等问题,改善了国内安卓用户的手机使用体验。# K9 @7 ?2 Y% J
2 g9 ^0 `! P! e1 N
: j: X* C" K" _/ E0 N

" t3 E0 P7 U8 g( p9 K4 F8 p
. M6 ~( V0 O2 g4 w" }
. a" {6 @* P9 r. A$ m: X4 C7 w需要注意的是,在统一推送联盟的官网会员单位中我们可以看到谷歌公司也位列其中。很明显,谷歌也参与到了这次推送联盟的组建之中来。在国内安卓生态的基础上建立统一平台这件事情上,谷歌的经验和技术值得借鉴和学习。此外,平台建立之后能一定程度上改善国内安卓系统的使用体验,谷歌自然也乐见其成。1 X' q$ Y$ ?2 U" Y2 N7 g* W
' \& X+ j' ]+ |5 ]6 e% ~# }8 a3 C1 L% `) X( R
那么什么时候能够正式用上采用统一推送标准的应用呢?
. C; w6 @6 {/ [; h
& X/ r5 g c9 E/ h; b S ^9 Q7 j: [& n
从联盟公布的时间表来看,2019 年 3 月 1 日将开始统一推送标准符合性测试,2019 年 12 月 31 日开始兼容现有各推送通道的统一推送标准。也就是说,明年我们国内的主流手机应用有望用上统一推送联盟的推送服务。& d" e6 Y) g5 y9 |; v
/ _, Q7 P8 ?5 e M/ t0 C/ ]- E" F
$ \4 i% p. t" f6 b! D) p前面我们提到,包括华为、OPPO、一加、Realme在内的国产手机厂商已经完成了前期开发工作。接下来,其他的手机厂商也必将持续跟进。联盟也表示,后续将持续跟踪并公布厂商统一推送服务上线情况及具体接入方案,并对统一推送的实网性能开展测试。
* z1 t; z/ @* ?3 z: Z+ |
- n& d5 g! a5 J& K7 r9 T
# o8 z8 B9 P/ e5 v从本质上看,安卓生态目前存在的一系列问题本质上还是因为其开源特性所天生具备的碎片化和不规范问题所导致。尤其是在国内完全不同的市场环境下,这样的问题越发明显。由国家相关部门牵头,联合各行业巨头共同建立起一套完整、统一的行业规范是很有必要的。或许未来我们还将看到更多类似平台或者准则的建立,很多目前存在的安卓生态问题将得到规范,安卓用户长期诟病的问题也将得到进一步缓解。6 L/ }% `, O/ } Y T
7 P- j9 q3 T2 t) T# d5 @0 N
7 C- b1 Q( M+ Q4 O; e% \( Y w2 W# c7 [* C
: M+ M3 ]% |" A: K   4 A8 m# v j1 p
来源:http://mp.weixin.qq.com/s?src=11×tamp=1569843004&ver=1884&signature=6K7lUrFMyA*vksfebD4GkrPhsm0So52JpRHpbcKPd-*lCQG1FIzo4sT0iSd9RKBZeK2*glnikF9WM6Y7GY5foclRf3XVQqER3gz2HkIWaIz4qg1YnxrRYD9qJG61jIgu&new=18 T0 r4 P; n3 \0 x& B. x4 g" ~
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|