【FAQ】获取Push Token失败,如何进行排查?

faq,获取,push,token,失败,如何,进行,排查 · 浏览次数 : 207

小编点评

**获取推送 Token 的两种方法及其现象** **方法一:通过getToken方法请求 Token** * 当 `getToken` 方法返回为空时,Token 可通过 `onNewToken` 方法返回。 * 需实现 `onNewToken` 方法以处理获取到的 Token。 **方法二:自动初始化 Token** * Token 可通过 `onNewToken` 方法返回。 * 无需实现 `onNewToken` 方法,自动获取 Token。 **获取 Push Token 失败的现象** * 获取 Token 的接口执行失败,错误会在日志中显示。 * 获取 Token 的接口执行成功,但 `getToken` 方法返回为空,`onNewToken` 方法没有被调用,可能导致无法获取 Token。 **排查方法** * 当出现错误时,需找出报错描述和错误码,参考常见错误码说明文档。 * 常见错误码包含: * EACCET:申请 Token 失败,appid 不匹配。 * EILB:应用已停止,无法获取 Token。 **代码示例** ```java // 获取 Token 的方法 private String getToken() { // 尝试获取 Token String token = null; // 如果获取失败,从 onNewToken 方法中获取 return onNewToken(); } // 获取 Token 的 onNewToken 方法 private String onNewToken() { // 代码实现获取 Token 的逻辑 return null; } ``` **日志分析** * 查找关键日志中搜索 `api_name:push.gettoken`,找到类似的日志记录。 * 结合日志上下文中的 `packageName` 确定对应应用的日志。

正文

一、 获取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 VERBOSE
adb 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,请排查工程代码,并删除多余的类。

了解更多详情>>

访问华为开发者联盟官网
获取开发指导文档
华为移动服务开源仓库地址:GitHubGitee

关注我们,第一时间了解 HMS Core 最新技术资讯~

与【FAQ】获取Push Token失败,如何进行排查?相似的内容:

【FAQ】获取Push Token失败,如何进行排查?

一、 获取Push Token的方式 获取Push Token有两种方式:一种是调用getToken方法向Push服务端请求Token,当getToken方法返回为空时,Token可通过onNewToken方法返回,因此需要实现onNewToken方法;另一种是自动初始化,Token通过onNewT

【FAQ】关于获取运动健康数据的常见问题及解答

目录 一、Health Kit健康数据采样, 原子采样数据问题 二、Health Kit查询历史数据查询数据和返回数据不一致 三、Health Kit关于获取历史数据问题 四、调用Health Kit接口出现获取不到数据的情况 问题解答 Q1:Health Kit健康数据采样, 原子采样数据问题 【

【FAQ】申请Health Kit权限的常见问题及解答

华为运动健康服务(HUAWEI Health Kit)提供原子化数据开放,用户数据被授权获取后,应用可通过接口访问运动健康数据,对相关数据进行增、删、改、查等操作。这篇文章汇总了申请开通Health Kit测试权限的常见问题,并给出了详细解答,希望为开发者提供相关参考。 (1) 申请Health K

【FAQ】申请运动健康服务验证环节常见问题及解答

华为 HMS Core 运动健康服务(HUAWEI Health Kit)提供原子化数据开放。应用在获取用户数据授权后,可通过接口访问运动健康数据,对用户数据进行读写等操作,为用户提供运动健康类数据服务。 开发者应用在开发和测试阶段访问用户运动或健康数据时,会有100个用户的数量限制,需要通过“申请

【FAQ】关于无法判断和区分用户与地图交互手势类型的解决办法

### 一. 问题描述 当用户通过缩放手势、平移手势、倾斜手势和旋转手势与地图交互,控制地图移动改变其可见区域时,华为地图SDK没有提供直接获取用户手势类型的API。 ### 二. 解决方案 1. 华为地图SDK的地图相机有提供CameraPosition类,此类包括所有相机位置参数,如位置、方位、

【FAQ】关于华为地图服务定位存在偏差的原因及解决办法

一、 问题描述: 华为地图服务“我的位置”能力,在中国大陆地区,向用户展示他们在地图上的当前位置与用户的实际位置存在较大的偏差。 具体差别可以查看下方的图片: 二、 偏差较大的原因: 华为Map SDK在中国大陆使用的地理坐标系是GCJ02。 点击“我的位置”控件,获取的定位经纬度的地理坐标系是WG

Python常见面试题017: Python中是否可以获取类的所有实例

017. Python中是否可以获取类的所有实例 转载请注明出处,https://www.cnblogs.com/wuxianfeng023 出处 https://docs.python.org/zh-cn/3.9/faq/programming.html#faq-multidimensional-

【FAQ】在华为鸿蒙车机上集成华为帐号的常见问题总结

随着新一代信息技术与汽车产业的深度融合,智能网联汽车正逐渐成为汽车产业发展的战略制高点,无论是传统车企还是新势力都瞄准了“智能座舱”这种新一代人机交互方式。面对竞争如此激烈的车机市场,华为鸿蒙车机系统的出现,给消费者带来了不同凡响的便捷使用感受,这得益于华为在硬件、软件和场景优化上的技术优势,用户只

【FAQ】推送服务常见问题及解决方案

一、推送成功收不到消息,推送返回:{"message":"success","requestID":"1523868*****2842718","resultcode":0} 排查步骤: 1、网络不稳定,切换稳定网络进行测试; 2、检查手机是否为EMUI8.0.0系统,如果是早期的EMUI8.0,则

【FAQ】集成分析服务的常见问题及解决方案

常见问题一:如何验证Analytics是否上报/接入成功?以及关键日志含义是什么? 在初始化Analytics SDK前添加SDK日志开关如下: HiAnalyticsTools.enableLog (); 2.初始化SDK代码如下: HiAnalyticsInstance instance = H