浅谈推送原理
不管是否是程序员,App推送一定都不陌生。微信,QQ,淘宝的App,每天时不时发一些推送吸引用户点击进去。而这个常见的功能,可没有看到的这么简单。
从 Andorid 与 ios 的内存说起
大家一定有对苹果手机和安卓手机的内存很好奇,明明安卓手机的内存比苹果手机的要大,为什么运行体验就是不如苹果手机流畅?
其中一个原因是,Android以前的推送需要App后台常驻。大部分的推送逻辑是通过App保活程序与推送服务器建立连接,通过轮训或者ws的方式进行推送。
这个方案的优点是,推送由开发者自己掌控,有更多的灵活性。缺点也很明显,每一家的App都要求后台保活,用户手机的运存就越来越少,导致Android手机很卡的现象。
当然,Google也是在作出努力的,只有Android手机上有Google Play 服务,就能使用FCM推送。然而,国内手机厂商都把Google Play 服务从自己的定制ROM包中阉割了,而且Google在国内几乎没法服务。再者,国内厂商为了自己的手机流畅,几乎把后台管得死死的,没有点实力的App,想常驻后台,几乎是不可能的。
不过,对于普通的应用关闭之后不看它推送的消息也没有大的影响,但是对于即时通讯软件来说,没了推送,还何谈「即时」?而对于很多应用来说,没了推送通知,用户的打开概率也就更小了,这可是应用收入来源的基本盘,怎么可能就这样放弃。于是,也就催生了各种「毒瘤」应用,「保活」和「唤醒」在应用开发中的重要性也越来越高,为了防止系统「杀后台」,也做得越来越隐蔽了。
作者:爱范儿
链接:https://www.zhihu.com/question/439729608/answer/1940755112
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
国内的“统一”推送
国内的各大厂商,如小米,华为,魅族,OPPO等基本上都有自己的推送服务,让开发者能针对自己的手机用户单独适配推送功能。但是App又不仅仅是给单一手机厂商的用户使用,为了让开发者更容易接入各大厂商的推送渠道,友盟,个推,tpns,阿里云消息推送这类聚合推送的服务就有了用武之地。
拿tpns来说。开发者在tpns的控制台新建一个应用,将各大厂商的推送id和key放在tpns中,只有使用同一套tpns的token,就可以给指定的App发送推送信息。
看似解决了统一推送的问题,但是其中有很多坑。
聚合推送的坑
要说明聚合推送的坑,那就先讲清楚聚合推送是怎么工作的。
还是拿tpns来说,在手机厂商禁止后台常驻的情况下,App如果是在后台,则使用tpns自己的渠道,直接推送给App,由App自己处理通知效果和点击回调页。当App不在后台,tpns会使用厂商渠道给手机进行推送。坑就出现在这里。
当App在后台时,tpns的表现是那么的完美,能自定义播放App上的铃声,送达率还能接受。但是App一旦被杀死,走各大厂商的渠道时,表现就不统一了。每家手机厂商对推送的处理是不一样的,有些厂商甚至会“智能”判断通知为广告而不播放通知铃声和振动(说的就是小米)。甚至有些厂商自己没有推送渠道,而导致推送根本就没法送达(譬如用手做包,用脚做手机的一加)。
结束语
即使是ios的APNs也不可避免推送延迟的问题,相比国内的推送乱象,统一推送还是目前最好的解决方案。
参考
知乎–作者:爱范儿