一、 獲取Push Token的方式 獲取Push Token有兩種方式:一種是調用getToken方法向Push服務端請求Token,當getToken方法返回為空時,Token可通過onNewToken方法返回,因此需要實現onNewToken方法;另一種是自動初始化,Token通過onNewT ...
一、 獲取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 最新技術資訊~