一、 獲取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,請排查工程代碼,并洗掉多余的類,
了解更多詳情>>
訪問華為開發者聯盟官網
獲取開發指導檔案
華為移動服務開源倉庫地址:GitHub、Gitee
關注我們,第一時間了解 HMS Core 最新技術資訊~
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/544911.html
標籤:Android
上一篇:uniapp解決未配置appkey成功運行并離線打包apk的詳細圖文
下一篇:修改安卓ID為硬體唯一ID
