一、 獲取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 最新技術資訊~