公司app集成了极光推送,前前后后在这上面费了不少时间了,总结下自己的理解和遇到的问题。 只用过极光推送,所以下面都以极光推送为例。(后面新增小米和华为)
1.、都有什么品牌的推送服务? 集成什么品牌比较好?
主流第三方推送有 极光,友盟,个推,百度云,基本服务都是免费的。另外还有小米推送,华为推送,这两个在自己的android平台上权限更高,在app进程被杀死的情况下也能推送。
个人推荐: 个推>友盟=极光=百度云 ,原因如下。 另外大些的应用还会同时集成小米推送和华为推送,来提高在小米和华为手机上的推送到达率。
① 市场占有率是个很重要的指标,在android应用下,app进程被杀死的话,可以通过共有使用了同家服务商的其他app推送通道,来提高到达率。
② 其他方面,比如推送稳定性,耗电量,耗流量,功能全面度等来说,主流的推送服务商差距感觉也不太多,就不怎么考虑了。另外,应该只有极光支持winphone推送= =。
可参考:http://www.jianshu.com/p/db3c478d9191
2、 ios和android的推送机制?
了解也不深,就不多说了,个人大致总结下就是,ios使用的是苹果官方的推送服务器APNs通道转发,android也有官方的推送服务器GCM,但好像在国内因为墙的关系不太能用,所以第三方都采用直接与应用建立长连接的方式推送,导致权限不高,到达率也低,并且耗电量还高。
关于推送机制可参考:https://www.zhihu.com/question/20667886
关于为什么不用GCM可参考:http://www.52im.net/thread-117-1-1.html
关于android保活的方式可参考:http://www.52im.net/thread-438-1-1.html
3.、定时推送怎么实现?
极光推送是有定时推送的api的,但我使用的是java的定时任务框架quartz实现的,这样更灵活一些。
4、推送和自定义消息的区别?
推送是指应用外,往通知栏推送内容。
自定义消息是往app内推送数据,这个很灵活,可以借此实现一些无法用http请求实现的功能。比如常见的的app内表示未读消息的即时刷新的红点或角标。
5、ios和android 推送到达率的问题? 为什么android的推送到达率普遍低很多?
在极光推送中,ios的推送成功数代表极光服务器成功发送到苹果APNS服务器的数据,基本与表目标数相差无几,目标数与成功数之差为失败数,失败的原因一般是Apple 判断 token 失效了,App 已经卸载了等。苹果端的实际到达用户数统计需要另外设置,我没有做。ios由于在app进程被杀死的情况也可以收到通知,所以实际到达数排除手机没电,没网等情况后,应该也还是较多的。 怎么配置可以看极光的说明文档:https://docs.jiguang.cn/jpush/client/iOS/ios_guide_new/#_9。
在android端,成功数即代表了实际到达用户的数量,等于在线到达数+离线到达数。当app处于打开状态时,计入在线到达数,未打开状态下app推送会由极光的离线推送机制,等用户激活app时推送。当用户在离线时间内(极光免费用户为5天)未激活app的话,也就永远收不到了。 所以我们一般需要采用一些手段,使推送能尽量到自己的未激活app,提高到达率。
android怎么提高到达率?
①让自己的app成为白名单。
方式有两种,一种是用户手动设置,一种是像QQ,微信等一样,被手机厂商默认设置为白名单。
②使自己的app处于打开或是后台打开的状态。这个就属于运营范畴了。
③集成小米推送,华为推送等手机厂商的推送服务,这些推送的权限更高,有系统的推送进程。小米推送可以使小米手机上进程被杀死状态也能推送。华为同理。
④被其他app唤醒进程:
当使用了极光推送服务的其他app被唤醒时,自己app可以使用其他APP的推送通道收到推送,其它推送服务商同理。所以推送服务商的市场占有率越高,自己app收到推送的概率也就越高。极光需要另外配置该功能:https://community.jiguang.cn/t/jpush/2815。
关于android保活的方式可参考:http://www.52im.net/thread-438-1-1.html
后续集成小米推送和华为推送
1.小米推的送
小米的文档写的挺明白了,各项功能也还算完整,api逻辑跟极光差不多。最重要的是在小米MIUI系统上是系统级推送,可以在应用被杀死的情况下收到推送。另外小米还支持ios推送,也可以透传消息,所以完全替代极光是应该是行得通的。
2.华为推送
其实也不难,在服务器端就两个接口,①是从华为服务器获取 通行令牌,②是根据通行令牌调用华为接口推送就好了。但华为吐槽点不少。
集成实际上其实挺简单,但文档复杂,写了一堆细节和原理上的东西,格式也不够友好,不利于快速上手。只能推送android。
功能比较简单,只能使用token(RegistrationID)推送,一次最多还只能是1000条。 统计页面上数据也比较少。
- 新版推送跟旧版推送不兼容,旧版推送貌似已经放弃维护,所以我集成的是新版,而且新版推送只在华为5.1以上才收的到(被这个问题耽误了半天时间)
相比较极光,小米,推送管理平台页面也挺简陋,各方面细节上都不够友好。
推荐快速集成方案:直接下载demo(华为没有提供对接口封装后的jar包),对应文档把一些参数改改就好了。然后拿到移动端给的token就可以推送了。
3.极光+小米+华为推送整合:
应该主要就是解决一个问题,三个平台都推送的情况下,移动端怎么只显示一条资讯?
我这采用的方法是:
①通知栏推送服务端三个推送平台一起推,不用做什么特别处理。应用内推送(透传消息)就用极光推。
②移动端上(听同事说的),小米手机只初始化极光和小米,之后再把极光通知栏推送这一块关掉。(因为需要用到极光的应用内消息推送,所以极光还是需要初始化)
华为手机只初始化极光和华为,之后再把极光通知栏推送这块关掉。
其他手机就只初始化极光推送就好了。