美文网首页技术分享
推送原理以及提高推送到达率的方案介绍

推送原理以及提高推送到达率的方案介绍

作者: 灰海舟 | 来源:发表于2018-12-29 16:17 被阅读0次

    何为推送?

    ​ 何为推送?去百度了一番,本想找个官方定义,奈何没有相中的。最后自己总结了一下:服务器将信息定向的发送到手机端,并通过通知栏(包括自定义)的形式,展示给用户的技术。不一定准,就是这个意思,大家都懂得。

    ​ 先推一波广告吧,自己搞的试水小程序,个税计数器,感兴趣的同学可以试试:

    img

    ​ 相信做app的同学,一定会涉及到过push的接入,无论iOS还是Android。今天就和大家聊聊推送的原理,以及我们在提高到达率上,做的那些内容。

    ​ 下面一张图,就是推送的大致流程:

    image

    推送有哪些?

    ​ iOS同学很幸福,由于苹果的政策,不需要考虑那么多,苹果已经提供了官方的推送服务:APNS。

    相对的,苦逼的安卓同学就没那么好运了。先看看安卓的推送服务:

    • Google: GCM、FCM

    • 国内手机厂商:华为、小米、魅族、oppo等

    • 国内推送厂商:个推、极光、信鸽、百度云推送、友盟等
      可以看到,安卓是百家争鸣,百花齐放的现象。

    推送原理

    ​ 虽然推送服务很多,但是原理还是比较简单相似的,我们已APNS为例,其原理大致如下:

    img
    • 应用注册通知服务 (操作系统向APNS请求device token);

    • 应用接收到device token ;

    • 把device token发送给服务器;

    • (服务器)事件发生时,把推送发给APNS;

    • APNS发送推送给App;

    安卓的推送原理与APNS并无本质的不同,都是通过长连接进行消息传递,所以这里不再重复讲解。虽然原理不同,但是差别还是很大的,具体差别如下:

    iOS Android
    推送服务商 苹果一家,三方sdk也是集成apns 百家争艳
    推送服务保持 系统保持 手机厂商自家的推送,是系统级别的服务,其他推送,生命周期和app生命周期一致
    推送到达率 手机厂商的推送到达高,其他的到达率低

    ​ 可以看到,iOS开发同学并不需要关注到达率问题,因为苹果官方帮你做了,但是Android,就必须关注了。如何处理app的push,直接影响你的到达率。

    如何提高到达率?

    ​ 如何提高到达率是大家最关心的问题。这里主要介绍的是安卓,并且只介绍一些方法,具体实现,还请自行百度或者code。

    1、守护进程

    ​ 何为守护进程?请看下图:

    img

    ​ 原理:双进程轮询检测对方状态,发现对方被回收,即重新启动对方进程,达到守护状态;

    ​ 如何设置守护进程?这里给大家提个思路;

    ​ 安卓的进程回收机制相信大家了解:

    ​ 1.前台进程

    ​ a.该进程有用户正在交互的activity,即调用过onResume()的Activity

    ​ b.该进程有绑定到正在交互的Activity的service。(service可以绑定到activity,待研究,可能类似于google play服务的支付界面)

    ​ c.该进程有前台service,及调用过startForeground()的service

    ​ d.该进程的service正在执行生命周期回调函数(onCreate(), onStart() ,onDestroy() )

    ​ e.该进程有BroadcastReceiver正执行onReceive()函数

    ​ 2.可见进程
    该进程没有任何前台组件,但是仍然可见。

    ​ a.该进程有pause状态的Activity,但是仍然可见。比如,被一个dialog风格的activity挡在前面,其他部分仍然可以被看见。

    ​ b.该进程有service绑定到可见的或前台Activity。

    ​ 3.服务进程

    ​ 该进程中有service正在运行,但不属于1和2的进程。

    ​ 4.后台进程

    ​ 该进程有不可见的activity(即调用过onStop())

    ​ 5.空进程

    ​ 该进程不含有任何App组件。该进程存活的目的仅仅是为了提高下一次启动的速度。

    ​ 所以我们可以启动一个前台service,来守护我们的主进程。具体如何启动就不再复述了。

    2、一像素页面

    ​ 一像素页面的原理,相信关注技术的同学都通过其大名,据说某讯的app就采用过此技术。其实也是守护进 程的一中,只不过启动的不是service,而是一个只有一像素的透明页面。原理如下:

    img

    ​ 其中心思想是将透明页面至于前台,使系统将自己优先级提高,减少被回收概率!这种方法现在在7.0以下的部分机型比较有效,针对vivo。oppo做过数据统计,能增加5%的到达率。

    3、APP相互守护

    ​ 这个可以看成升级版的守护进程。需要你有资源,能够联合其他APP,共同和你做此事,一般的,只有大厂,在自家旗下的多个app可能采用此种策略。

    4、推送通道共享

    ​ 顾名思义,就是多个APP,使用一个通道进行数据下发。这里的一个通道,一般是指一个厂商的推送,比如个推。当然,这种策略,厂商已经帮你做好了,只不过需要你付费开通罢了。其原理如下:

    img

    ​ 通道共享两个前置条件:

    • 用户同时安装了APP1 和APP2;

    • APP1启动,APP2未启动时,服务向APP2发送推送消息:

      满足以上两个条件,此时通道共享策略生效:

      推送通道会通过APP1的通道,尝试启动APP2的推送服务,如果启动成功,则向APP2发送消息,此时,APP2就会收到推送消息;

    安卓统一推送联盟

    ​ 相信看到以上方法,有些同学觉得流氓。这些进程都会悄悄的消耗用户的手机性能。的确,各大厂商也意识到这种问题了。所以,去年工信部旗下中国信息通信研究院泰尔终端实验室倡导成立了“安卓统一推送联盟”。倡议:

    • App限制交叉唤醒、链式启动。除用户的主动交互触发外,避免启动其它应用未处于运行中的进程。

    • App让设备CPU尽可能处于休眠状态,并避免在不必要的时间段(如夜间)继续调度周期性事件。

    • App避免不必要常驻后台的行为。

      看来,以上的手段,要玩完啊。但是我们还有办法。

    多通道推送

    ​ 多通道推送。被技术不耻,完全没有技术含量,就是把有效果的通道都接一遍。虽然技术含量低,但是产出绝对高。先上个原理图吧:

    img

    ​ 接入效果呢??

    ​ 小编的app,之前直接了小米和个推,在小米上的次日日活到达率能达到90%。其他手机表现较差,后来接入了华为通道,单单华为手机用户的到达率,飙涨100%,整体到达率提高了10个百分点。很有效果吧~~

    ​ 好了,今天小编对push的内容就这些,希望对你有所帮助~~

    相关文章

      网友评论

        本文标题:推送原理以及提高推送到达率的方案介绍

        本文链接:https://www.haomeiwen.com/subject/eohplqtx.html