前言
大家做过安卓推送服务的都知道,如果安卓设备想要收到推送,就要与服务器建立一个长连接通道(莫非你想轮询??)。一旦app被杀掉,维持长连接通道的pushservice服务也会被干掉,所以设备就处于离线状态,也就收不到任何推送。
说到安卓,不得不提苹果,为什么苹果推送没有这个烦恼呢?原因是苹果推送走的是系统推送,由系统去维持长连接通道,所以app杀掉也能收到推送。由于国内能买到的手机都没安装谷歌服务框架,所以造成了如今国内手机无论使用哪种第三方平台推送服务,都无法实现百分百的安卓设备离线(杀掉app)收到推送。
既然国内手机没有使用谷歌原生系统,那我们可以通过国内手机厂商定制系统提供的推送服务,来实现跟苹果一样的系统级别推送。蛋疼的是,国内那么多定制系统,我们要一个一个的做接入。到目前为止,小米、华为和魅族提供了推送服务,而vivo和oppo还没有看到,特别是接入了小米和华为后,我们已经能把推送到达率提高很多很多了。
我们项目组使用了友盟推送,为了提高安卓设备送达率,我们打算接入系统推送通道。我跟着官方文档,参考官方Demo,一步一步做集成。在此过程中发现一些容易踩的坑,希望这篇文章能帮助到你们,快速接入系统推送通道。另外,官方Demo把推送、分享、统计等等功能都集于一身,但缺少了系统推送通道集成的必要代码,所以本文最后有完整的PushDemo项目代码供大家参考。
集成流程
建议先过一遍官方文档,本教程只对关键要点和注意事项进行说明。请先实现正常的友盟推送流程,本教程是基于正常推送流程之上做集成。建议友盟推送SDK使用最新版本,提高推送稳定性的同时也解决各种水土不服。
本教程的APP包名为com.soecode.lyf.pushdemo
配置参数
先到对应平台注册帐号,提交资料认证个人开发者。我上次三家同时申请,华为和魅族最快只要一天,小米花了三天时间。
创建应用,包名一定要填写正确,如果遇到包名被占用,请根据提示找回应用。
获取三大平台参数,配到友盟后台,这里没有什么难度。
注意:魅族开放平台包含了flyme推送平台和集成推送平台,前者才是我们想要的,不要搞混了,这是第一个坑。
添加依赖,导入SDK
//小米Push通道
compile 'com.umeng.sdk:push-xiaomi:1.0.0'
//华为Push通道
compile 'com.umeng.sdk:push-huawei:1.0.0'
//魅族Push通道
compile 'com.umeng.sdk:push-meizu:1.0.0'
客户端代码
在Application
类的onCreate
方法添加注册代码
小米和魅族的参数是刚才申请到的应用参数,华为不需要。
//小米通道
MiPu