【FAQ】获取 Push Token 失败,如何进行排查?
一、 获取 Push Token 的方式
获取 Push Token 有两种方式:一种是调用 getToken 方法向 Push 服务端请求 Token,当 getToken 方法返回为空时,Token 可通过 onNewToken 方法返回,因此需要实现 onNewToken 方法;另一种是自动初始化,Token 通过 onNewToken 方法返回。这两种方法的详细说明可看获取和注销 Token 文档:获取和注销Token。
二、 获取 Push Token 失败的现象
获取 Push Token 失败大致有两种现象:一种是获取 Token 的接口执行失败,错误会在日志中显示,有相应的错误码打印;另一种是获取 Token 的接口执行成功,没有报错,但是 getToken 方法返回为空,onNewToken 方法也没有被调用。
三、 分现象进行排查
如果有报错,需要找到报错描述和错误码,参考常见错误码说明文档:常见错误码,根据报错描述和常见错误码说明文档中对应错误码的解决方法进行排查,大部分问题都可以得到解决。
比较典型的案例:开发者按照对应错误码的解决方法进行排查,无法解决问题,后来和开发者要了手机端抓取的日志,从日志中看到申请 Token 使用的 appid 不是应用对应的 appid。所以一定要保证使用的 agconnect-services.json 文件是对应应用最新的文件,可以从 AGC 控制台上新下载一份;并且保证应用中所有使用到的 appid 都是对的,可以用全局搜索进行查找。有些开发者的应用可能是多个人共同开发的,变量命名可能不一致,无法搜索所有用到的 appid,这种情况下可以通过手机端日志确认使用的 appid 是否正确。
日志抓取方法:zaaxz
adb shell setprop log.tag.hwpush VERBOSEadb logcat -v threadtime 1> D:\hwpush.log
2、尝试复现遇到的问题场景。
3、按快捷键“Ctrl+C”完成日志抓取。
查找关键日志:
搜索 api_name:push.gettoken 关键字,找到如上图所示的这行日志,error_code 是申请 Token 失败时返回的错误码,app_id 是用来申请 Token 的 appid,pkg_name 是应用的包名,检查 app_id 值是否为对应应用的 appid,如果不是,可以使用这个 app_id 在应用的工程中进行全局搜索,排查在哪个地方使用了这个值,并进行修改。
如果获取 token 的接口执行成功,没有报错,onNewToken 方法也没有被调用,请检查代码中继承了 HmsMessageService 的自定义类,看下自定义的类中除了重写了配置Manifest文件文档中说明的用于接收透传消息、获取 Token 的方法外,是否已经重写其他方法,如果有请去掉,其他方法不需要重写,而且重写可能会导致类中的方法不会被调用。如果继承 HmsMessageService 的类实现没有问题,请排查工程中定义了几个继承 HmsMessageService 的类,如果定义了多个继承 HmsMessageService 的类,也会导致实现的方法不会被调用,继承 HmsMessageService 的类只能有一个。
典型案例:
开发者使用三方推送,三方推送的 SDK 中已经定义了一个继承 HmsMessageService 的类,这种情况就不需要再定义继承 HmsMessageService 的类,需要开发者去咨询三方推送的技术支持要怎么使用他们定义的这个类。可以通过反编译查看 Android 声明文件,确定三方推送的 SDK 中是否定义了继承 HmsMessageService 的类。可以通过查看手机端日志确定有几个继承 HmsMessageService 的类,日志抓取方法同上,下面说一下怎么看关键日志。
查找关键日志:
搜索 HmsMessageService num is 关键字,找到如上图所示的日志,结合日志上下文中的 packageName 确定对应应用的日志,HmsMessageService num is 后面的数值就是继承 HmsMessageService 的类的数量,如果不为 1,请排查工程代码,并删除多余的类。
了解更多详情>>
获取开发指导文档
关注我们,第一时间了解 HMS Core 最新技术资讯~
评论