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

简介: Android系统由google提供的推送的服务在国内并不能很好的运作,因此不能像iOS能提供统一管理的推送服务。Android端推送目前常用的都是第三方推送服务,也可以自己搭建推送服务器来实现, 为了节约开发成本,目前主流的提供第三方推送服务的有:极光推送、个推、友盟、小米推送、百度推送等。Android端推送分为通知,透传两种,通知是有通知栏显示的,透传由用户自定义处
Android系统由google提供的推送的服务在国内并不能很好的运作,因此不能像iOS能提供统一管理的推送服务。Android端推送目前常用的都是第三方推送服务,也可以自己搭建推送服务器来实现,  为了节约开发成本,目前主流的提供第三方推送服务的有:极光推送、个推、友盟、小米推送、百度推送等。
Android端推送分为通知,透传两种,通知是有通知栏显示的,透传由用户自定义处理,可以做静默,也可以自定义通知栏显示,个性化程度较高,点击的逻辑处理也比较方便。
iOS端推送的话,应用程序在前台的时候,推送通知有程序处理,当应用程序在后台的时候,由系统统一处理推送消息,此时可以配置静默推送,来处理通知栏的显示与否,这一点和Android一样,但是由于是系统统一处理,所以到达率有保证,这一点android端就比较麻烦了。
本文将整合小米、个推、极光推送,从而提高app推送的到达率。实践发现,由于Android系统的差异性,在Android单独使用某一个推送并不能很好的完成推送服务。原因就是因为某些厂商的android系统安全性比较高,当完全杀死进程后,将无法收到推送服务(例如小米、魅族)。需要用户手动操作的详细列表如下:(来源:极光推送android常见问题:http://docs.jiguang.cn/jpush/client/Android/android_faq/)

**由于第三方 ROM 的管理软件需要用户手动操作**
小米【MIUI】
    自启动管理:需要把应用加到【自启动管理】列表,否则杀进程或重新开机后进程无法开启
    通知栏设置:应用默认都是显示通知栏通知,如果关闭,则收到通知也不会提示
    网络助手:可以手动禁止已安装的第三方程序访问2G/3G和WIFI的网络和设置以后新安装程序是否允许访问2G/3G和WIFI的网络
    MIUI 7 神隐模式: 允许应用进行自定义配置模式,应用在后台保持联网可用,否则应用进入后台时,应用无法正常接收消息。【设置】下电量和性能中【神隐模式】

华为【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的消息时,不予显示。
相关文章
|
Android开发 开发者
安卓(Android) 刷机教程(任何机型、小米、华为等等)
安卓(Android) 刷机教程(任何机型、小米、华为等等)
2872 0
|
开发工具 Android开发
Android推送集成方案总结
刚做完推送集成方案,记录下坑。 这里记录的特性和使用时针对写blog时采用的sdk的,具体使用流程和限制还请参考官方给出的sdk. #### 1、推送规则 小米手机用小米推送; 华为手机用华为推送; 其他手机用友盟推送。
|
Java 开发工具 Android开发
Android 小米推送服务集成
Android 小米推送服务集成
410 0
Android 小米推送服务集成
|
API 开发工具 Android开发
Android推送全链路简析
Android推送全链路简析
591 0
Android推送全链路简析
|
Android开发 开发者
小米开源 Android 项目欲“阻止提取 APK 文件”,被谷歌以“软件有缺陷”为由驳回
小米开源 Android 项目欲“阻止提取 APK 文件”,被谷歌以“软件有缺陷”为由驳回
203 0
小米开源 Android 项目欲“阻止提取 APK 文件”,被谷歌以“软件有缺陷”为由驳回
|
缓存 移动开发 算法
2020年Android开发最新整理阿里巴巴、字节跳动、小米面经,你不看看吗?
前言 2020年是转折的一年,上半年疫情原因,很多学android开发的小伙伴失业了,虽找到了一份工作,但高不成低不就,下半年金九银十有想法更换一份工作,很多需要大厂面试经验和大厂面试真题的小伙伴,想提前准备刷下题。接下来分享一份我的字节跳动、阿里巴巴、百度、小米等大厂面试经验和总结。(文末附真题解析大全)
2020年Android开发最新整理阿里巴巴、字节跳动、小米面经,你不看看吗?
|
开发工具 Android开发
Android:消息推送增加推送成功率,集成厂商通道(下)
极光厂商通道功能: 极光新的SDK,已集成了小米,华为,魅族的厂商通道功能 针对VIP用户需要联系商务: VIP专享高速推送通道、子账户管理、更高的推送频率、用户分群推送 为了保证 SDK 的易用性,原本 JPush 的所有接口调用逻辑都不用修改,JPush 会对自身支持的功能做兼容 本文重点在于集成厂商通道(后台杀死进程依旧能接受到推送通知)
396 0
Android:消息推送增加推送成功率,集成厂商通道(下)
|
Android开发 开发者 iOS开发
Android 信鸽推送集成
Android 信鸽推送集成
203 0
|
XML 编解码 Java
Android 消息推送:个推
集成失败原因: 1、检查自己的APPID等信息 2、检查自己的.jar和.so文件 3、检查AndroidManifest.xml
580 0
|
存储 Java API
Android:消息推送增加推送成功率,集成厂商通道(上)
极光厂商通道功能: 极光新的SDK,已集成了小米,华为,魅族的厂商通道功能 针对VIP用户需要联系商务: VIP专享高速推送通道、子账户管理、更高的推送频率、用户分群推送 为了保证 SDK 的易用性,原本 JPush 的所有接口调用逻辑都不用修改,JPush 会对自身支持的功能做兼容 本文重点在于集成厂商通道(后台杀死进程依旧能接受到推送通知)
482 0