极光推送调研
- 关于 极光推送 的调查和研究。
- 这是q2时做的。为Android客户端做推送。之前用的是腾讯的 信鸽 推送。但最后 极光 和 信鸽 都不满足需求,因为一旦游戏进程被杀,这个推送就没了。
- 但也记录一下。
Q2现在用的是 Android本地推送.md
1. 概述
- 客户端接入极光推送(JPush,一下简称 极光)sdk后
- 可以在极光的web控制台推送,也可以在服务端调用极光的的接口推送到客户端。
- 也可以在客户端本地推送,设定延时时间。
2. 客户端配置
每打一个包(不同的包名),就必须在控制台上注册一个应用,会有生成一个AppKey和Master Secret,appkey需要在AndroidManifest.xml中配置,服务端推送是这同时需要这AppKey和Master Secret。
每个客户端可以设置tag(上限100),alias别名来设置标记,服务端推送时就可以根据这些标记来推送不同对象。
alias别名只能一个客户端一个(后面设置的alias会覆盖前面),唯一,就像uuid,这样服务端可以就送到某一台机子。
3. 控制台推送
- Web端既可以单一应用推送,也可以多个应用同时推送(分组)。
- Web端支持分组管理,将多个应用丢在一个组里,统一推送。(问过官方得到的回答是web端分组是他们自己实现的,并没有集成到推送服务器上,所以服务端调用的api不支持分组,只能单个应用,分组逻辑必须自己去实现)
4. 服务端调用api推送
一次推送只能推一个应用(也就是一个包),参数参数中带有唯一AppKey和Master Secret,然后根据platform、tag、alias组合推送不同对象,tag可以用交集或并集过滤对象。
分组的逻辑必须自己实现。Api不支持。
5. 优点:
- 游戏中,无论是服务端、web控制台、还是本地推送,基本上即推即到,不像信鸽的本地推送延时有点小大。
6. 缺点:
- Web控制台支持分组,而服务端调用的接口中不支持组(问过官方得到的回答)。那就不理解了,为啥不集成到api中。
- 客户端进程被杀掉后,无法接收到任务推送(服务端推的和本地推的)。重进游戏,服务端会推过来,本地的就没了。
Web控制台截图
附上官网的Q and A
- Q: 应用的包名每个渠道都不一样,难道得在极光里为每个渠道建一个产品吗?
- A: 是的,建多个应用
- Q: 有一个app需要多渠道打包,包名不一样,导致“JPush提示:包名与appkey不一致”问题?请问如何解决这个问题。
- A: 一个包名对应一个appkey,你只能建多个应用,分组推送
- Q: 我们的应用安卓版按渠道定制,每个渠道都是独立包名,不知如何处理?
- A: 推送目前是和注册的包名一起的,所以需要分开发送。有一个简单点的办法是使用服务器端API调用,这样你就可以控制同时向三个应用发送推送消息
- Q: 一个app 游戏 发行多个渠道,生成不同的package id ,要创建N个极光推送应用不说,后台推送也挺麻烦的。不知道什么时候会优化这个功能。
- A: JPush 很早就支持了“分组推送”,即可以把你说的类似的多个App创建一个应用分组,然后针对这个 “分组”可以在控制台做推送,也可以基于分组查看统计数据。可以基本上满足你所说场景的需求了。
https://www.jpush.cn/qa/?qa=14470/%E4%BB%80%E4%B9%88%E6%97%B6%E5%80%99%E5%87%BA%E5%A4%9A%E5%8C%85%E4%B8%80%E8%B5%B7%E5%8F%91%E9%80%81%E6%B6%88%E6%81%AF%E7%9A%84%E5%8A%9F%E8%83%BD%E5%91%90
- A: JPush 很早就支持了“分组推送”,即可以把你说的类似的多个App创建一个应用分组,然后针对这个 “分组”可以在控制台做推送,也可以基于分组查看统计数据。可以基本上满足你所说场景的需求了。
- Q: 设置别名 推送 别名A 注册成功,后台推送成功,手机收到推送消息 。退出A ,立马用别名B登录, 别名B推送成功,手机可收到推送消息 。 但是现在推别名A的时候,极光后台显示 A 别名没有注册,理论上我已经先注册了A ,但是我退出A,再用B登录一下这个手机 A再极光后台就显示没用注册。请问一下这是什么原因?
- A: 单独推送到某一台机子
这是一台机器只能注册一个别名,所以你后面注册的B覆盖了A的设置,结果就是这样。
- A: 单独推送到某一台机子
- Q: JPush集成成功了,也打印出Login成功的Log了。可是在app退出时,进程和服务就会被杀死。不能接收到推送消息。
- A: 需要加入到自启动列表中才能自启