android整合小米、个推、jpush推送

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/yuanfen934/article/details/49796087

android系统由google提供的推送的服务在国内并不能很好的运作,因此不能像ios能提供统一管理的推送服务。为了节约开发成本,目前主流的提供第三方推送服务的有:极光推送、个推、友盟、小米推送、百度推送。本文将整合小米、个推、jpush推送,从而提高app推送的到达率。实践发现,由于android系统的差异性,在android单独使用某一个推送并不能很好的完成推送服务。原因就是因为某些厂商的android系统安全性比较高,当完全杀死进程后,将无法收到推送服务。(例如小米、魅族)需要用户手动操作的详细列表如下:(来源:极光推送android常见问题:http://docs.jpush.cn/pages/viewpage.action?pageId=7864765)

         小米【MIUI】
       自启动管理:需要把应用加到【自启动管理】列表,否则杀进程或重新开机后进程无法开启
       通知栏设置:应用默认都是显示通知栏通知,如果关闭,则收到通知也不会提示华为
      【Emotion】
       自启动管理:需要把应用加到【自启动管理】列表,否则杀进程或重新开机后进程不会开启,只能手动开启应用
       后台应用保护:需要手动把应用加到此列表,否则设备进入睡眠后会自动杀掉应用进程,只有手动开启应用才能恢复运行
       通知管理:应用状态有三种:提示、允许、禁止。禁止应用则通知栏不会有任何提醒
       魅族【Flyme】
       自启动管理:需要把应用加到【自启动管理】列表,否则杀进程或重新开机后进程发开启
       通知栏推送:关闭应用通知则收到消息不会有任何展示
       VIVO【Funtouch OS】
       自启动管理:需要将应用加入“i管家”中的【自启动管理】列表,否则重启手机后进程不会自启。但强制手动杀进程,即使加了这个列表中,后续进程也无法自启动。
       内存一键清理:需要将应用加入【白名单】列表,否则系统自带的“一键加速”,会杀掉进程
       OPPO【ColorOS】
      冻结应用管理:需要将应用加入纯净后台,否则锁屏状态下无法及时收到消息
       自启动管理:将应用加入【自启动管理】列表的同时,还需要到设置-应用程序-正在运行里锁定应用进程,否则杀进程或者开机后进程不会开启,只能手动开启应用
   
       为什么需要自启动权限:因为当手机进程被杀死后,所有推送服务被关闭,同时以上厂商的手机系统禁止自动启动。第三方推送服务都会在自己的进程被杀死后企图自动打开,进而可以实现当APP被完全关闭后(关进程)仍可以接收推送。但当自启动没有打开(以上手机安装时自启动权限默认是关闭的),推送是无法到达用户的。若推送的消息仍然没有超过后台设置的保留时长(一般保留24小时),当在次打开app时将会收到延时推送。

      为了解决自启动的问题,部分厂商提供了守护进程的服务。
      
      什么是守护进程:既然我不能自启动,那第三方推送就提供一个方式,当别的APP也使用了同样的推送服务时,可以通过别的app将自己的app推送唤醒。即时自己的app被进程杀死了,同样可以收到后台推送。这时候作为开发者,就必须考虑哪个推送平台提供推送服务并且占有一定的市场比例。然而在android推送市场上,并没有一家独大的局面。因此选用某一种推送并不能确保大部分用户收到推送。

     为什么选择整合小米、个推、jpush:
      通过查阅资料:友盟、百度推送使用并不广泛。自己在实践过程中,通过查看后台进程也发现app一般使用个推、jpush的较多。
     小米的优势:从自启动列表中可以看出小米是默认禁止自启动的,并且第三方推送想通过守护进程来接收推送,实践证明:
     1:个推推送:个推在版本SDK 2.6.1.0上,在小米手机上守护进程能启动,但是启动后依然收不到推送。
     2:极光推送:极光推送从1.8.0以后也提供了守护进程(在极光文档上称为拉取进程),在小米手机上能启动,并且推送有效。然而1.8.0更新是在2015-07-27才出来,在2015年11月通过查看后台进程会发现使用极光推送的大概只有百分之十的app开启了守护进程。
     综合考虑以上因素,当自身的app小米手机用户占到所有手机用户一定比例时,就必须使用小米推送来确保小米用户能够收到推送。小米推送可以确保不管app是否被进程杀死,都能及时收到推送服务。
      个推优势:具有一定的用户群体并且提供守护进程,占用内存少。
    极光优势:1.8.0后提供守护进程,这里有一个时序的优势:就是当后台先推送消息,自身app并没有打开,打开其他有极光推送守护进程的app,也会收到推送。而个推的情况是:当后台先推送消息,自身app并没有打开,打开其他个推推送守护进程的app,收不到推送。当先打开其他守护进程的推送app,后台在进行推送消息,则极光、个推都可以收到自身app的推送消息。守护进程的对比表格如下:(测试手机是小米note和魅蓝)

  守护进程 先推送后打开守护app 先打开守护app后推送 推送服务名称 守护名称
jpush 1.8.0提供 收到 收到 PushService DaemonService(配置才守护)
个推 收不到 收到 NotificationCenter(默认守护)
小米 没有 没有守护进程 没有守护进程 XMpushService

     查看守护进程:
     小米手机:设置-其他应用管理-运行中
     魅族手机:设置-应用管理-正在运行
     需要测试守护进程可下载宝贝玩啥app,宝贝玩啥已经整合jpush、个推的守护进程。

    由以上分析可以看出,同时整合小米、个推、jpush三个推送服务,目的是确保小米手机用户是在联网的情况下一定收的到推送,同时希望使用个推和jpush提高app在进程杀死的情况下提高收到推送的成功率。

     整合方案:
    整合了三个第三方推送,目的就是消息推送只能显示一条,因为后台无法判断哪个推送可以收到的消息,因而后台会把一条消息同时使用小米、个推、jpsh进行推送。所以android端要控制的就是收到三条推送,如何只显示一条,不能重复显示。
    
     解决思路:每个第三方推送都提供推送通知和透传的方式,推送通知就是一旦android端接收到推送,就会显示出来,而透传的方式是由android端来决定收到透传消息之后的操作,因此在第三方推送初始化前,先判断是否小米手机,如果是小米手机,初始化小米推送,个推、极光不初始化,因为对于小米手机,小米推送可以确保能收到。后台选择的是推送通知的方式,通知栏的显示由后台来决定;如果不是小米手机,选择初始化极光推送和个推,提高推送的成功率。此时极光推送和个推无法确保谁的推送谁先到达,因此选择透传的方式,通过本地显示通知。当极光推送收到通知后,记录该消息的id并且显示出来,当个推收到同样id的消息时,不予显示。
    
    
    总结:在早前单独使用个推时(还没有守护进程),推送的成功率只有百分之十左右,因为我也是刚在新的项目整合了三个推送,成功率的数据将在统计之后公布。欢迎留言交流。
     
    ps:最近新公司又使用友盟推送,因此把友盟v3.0.1版本做了对比

   

展开阅读全文

没有更多推荐了,返回首页