文档开发者中心
我的

ToB 游戏客户端push消息定位和常见问题

作者:HW-LKZ


一:推送方式和原理:全量推送和单点推送

全量推送:通过主题订阅的方式,主题为{projectID}_Client_All_{language},
单点推送:通过fcm 返回的token进行定点推送,cms根据token和imei号的绑定关系来确定使用哪些token推送
相对于全量推送,全量推送问题较少,因为只需向google订阅主题,无需和store绑定交互。单点推送较为复杂,因为需要在客户端启动时,向store上报加密imei号和token的绑定关系。

二:问题举例

1:cms配置提示imei has no token 或 all failed

定位:在store对应的数据库中查询 select * from m_imei_devicetoken where iMei='xxx'; 其中xxx为加密后的imei号,需要一线提供有问题的手机对应的两个imei号。
查询结果1:imei号在store数据库表m_imei_devicetoken不存在。

那么原因可能是imei号有误,也可能是从未向store上报过token和imei的绑定关系 (这种情况可能性较低)

查询结果2:记录存在但表中的updatetime时间过久,原因是长时间未向store更新imei和token的绑定关系,即store表里的token已过期,需要分析具体原因


原因1)客户端版本较老,imei号获取失败 (动态授权过晚的bug,七月份之前的客户端版本存在,七月之后的为修复版本,现网仍存在不少7月之前的版本,需要确定版本是否过低)
解决方式:升级客户端版本

原因2)升级了7月修复版本,但上个版本的老的token 数据仍然存在在客户端的shareperference中,且未过期,客户端以为已经上报过这个token,则此时仍然不会向store上报注册请求,导致store表里的DEVICETOKEN还是过期的

解决方式:
11)需要等fcm token自然过期,过期时间不详,网上上是7天,没有验证过
22)手动清空数据,在重新推送

原因3)从fcm未获取到token,导致不会向store注册 (有可能是fcm服务器异常,2018.9.10号问题,2018.9.11号变正常了)
解决方式:无


2:cms配置提示token unregistered


由于客户端卸载之后立即进行推送引起,此时google还存在老token的映射关系,从网上找的解决方式之一是应用卸载时 FirebaseInstanceId.getInstance().deleteInstanceId();

但考虑到未经验证; 实际测试时可以等一段时间如半小时之后在重新推送测试。

3:如何判断m_imei_devicetoken 表的DEVICETOKEN有没有过期?


取客户端日志,目录为gameclient/logger/{packageName} (packageName)为对应的apk包名

搜索:
'MainActivity: subscribeGCMTopic | fcm ' 或 'Refreshed fcm'
看这个结果是否和store中的DEVICETOKEN的值相同,如果相同,且日志时间和表中updateTime对应,证明是通过这次启动上报的,说明表里的数据是最新上报的,是正常的;如果不一致,证明是客户端取到了最新的token,但是无法上报到store,这种情况会导致单点推送失败


4:客户端更新token的两个时机和依赖的两个服务

更新token的两个时机:
一个是在客户端启动时调用google接口获取,如果上次的未过期,则仍然返回上次的
日志里搜subscribeGCMTopic | fcm
另一个是在token过期或FirebaseInstanceId被卸载(常见于客户端被卸载时),google fcm通过MyFirebaseInstanceIDService服务里的onTokenRefresh()来主动通知 ,客户端日志里可以搜Refreshed fcm


依赖的两个服务:
MyFirebaseInstanceIDService主要是跟踪token是否被更新,客户端日志关键字Refreshed fcm
MyFirebaseMessagingService用来真正接收message,客户端日志关键字onMessageReceived,同一个id的消息,会被service接收,但不会显示。

5:为什么用老版本的客户端单点推送有时仍然成功,有时不成功?


每次重新安装老客户端之后,第一次因为动态授权过晚,向store·注册是异常的。在token还未过期的之前的这段时间,推送是有问题的。 但在过期之后重新启动,此时早已动态授权过,imei号获取正常,且会重新向store发送注册请求,就变成了正常的。


注意:以上问题仅针对单点imei推送,或全量推送时需要对指定imei号做测试, 不涉及正式全量推送

点赞
收藏
回复
分享
举报
浏览1056 发布于2019-10-17 06:25未知归属地
全部评论
最多点赞
最新发布
最早发布
暂无评论
暂无评论
写回答
新增插入模板功能
一键使用模板,快速填写内容,轻松发帖~
知道了
  • 为了保障您的信息安全,请勿上传您的敏感个人信息(如您的密码等信息)和您的敏感资产信息(如关键源代码、签名私钥、调试安装包、业务日志等信息),且您需自行承担由此产生的信息泄露等安全风险。
  • 如您发布的内容为转载内容,请注明内容来源。

我要发帖子

了解社区公约,与您携手共创和谐专业的开发者社区。