簡體   English   中英

為什么使用華為Push Kit獲取不到pushToken?

[英]Why can't I get pushToken by using Huawei Push Kit?

我正在使用以下代碼片段,但我仍然無法獲得 pushToken。

private void obtainToken() {
    // get token
    new Thread() {
        @Override
        public void run() {
            try {
                String appId = AGConnectServicesConfig.fromContext(MainActivity.this).getString("client/app_id");
                pushtoken = HmsInstanceId.getInstance(MainActivity.this).getToken(appId, "HCM");
                if(!TextUtils.isEmpty(pushtoken)) {
                    Log.i(TAG, "get token:" + pushtoken);
                }
            } catch (Exception e) {
                Log.i(TAG,"getToken failed, " + e);

            }
       }
   }.start();
}

有一個日志是完美的,但如果日志中的一切都很好,沒有異常並且 HCM 的結果代碼是成功的,那么請驗證您設備的 EMUI 版本。

如果您設備的 EMUI 版本低於 10.0,您使用的代碼將返回空推送令牌。 在這種情況下,有必要實現一個擴展 HmsMessageService 的自定義服務。

在你的 AndroidManifest.xml 添加;

<service
   android:name=".CustomPushService"
   android:exported="false">
      <intent-filter>
         <action android:name="com.huawei.push.action.MESSAGING_EVENT" />
     </intent-filter>
</service>

然后創建如下class;

public class CustomPushService extends HmsMessageService {
     private static final String TAG = "PushTokenLog";

     @Override
     public void onNewToken(String token) {

       super.onNewToken(token);
       Log.i(TAG, "receive token:" + token);
      }
}

最后但同樣重要的是,確保你的設備是華為:) HMS Core 的大部分功能都依賴於 EMUI。 如果沒有 EMUI,功能的功能暫時無法保證。

下面是一個很好的參考,可以查看 HMS Core - EMUI 關系。 https://developer.huawei.com/consumer/zh/doc/development/HMS-Guides/emui_version_dependent_features

根據問題所有者的評論更新

返回碼907135000表示你的SDK配置不正確。 花點時間檢查以下幾點;

  1. 檢查agconnect-services.json文件中的app_id和package_name參數是否正確。 app_id 和 package 名稱應與在 AGC 上創建的應用匹配。 另外,考慮重新下載相應的agconnect-service.json
  2. 查看build.gradle文件中是否配置了證書簽名。
  3. 可能是HMS Core(APK)的緩存問題。 卸載並重新安裝HMS Core(APK),斷開並重新連接手機與互聯網,然后重新啟動應用程序。

在做好准備工作,特別是開啟推送服務和設置指紋的前提下,你可以得到一個pushToken。 詳情請參考以下鏈接: App開發

檢查后,您可以使用過濾器“hmssdk”查看 logcat。 如果出現異常,可以看到錯誤碼,然后可以參考文檔解決問題。 鏈接在這里:

盡可能顯示日志,以便我們一起解決問題。

更詳細的信息可以參考如何獲取 pushToken的文檔。

如果華為設備的EMUI版本為10.0及以上,則通過getToken方法返回一個token。 如果getToken方法調用失敗,HUAWEI Push Kit會自動緩存token請求並再次調用該方法。 然后將通過 onNewToken 方法返回一個令牌。 如果華為設備的EMUI版本低於10.0,getToken方法沒有返回token,則onNewToken方法返回token。

類似問題,報錯:

GET token failed, com.huawei.hms.common.ApiException: 907122036: no right

解決方案:

  • 應用市場連接
  • 項目
  • 推送套件
  • 使能夠

完畢

我得到了同樣的錯誤。 我解決了這個問題。 如果您使用多種媒體,請檢查風味文件。 確保它是正確的。

多種口味文件:

https://developer.huawei.com/consumer/zh/doc/development/AppGallery-connect-Guides/agc-config-flavor

也許有點晚了,但仍然如此。

getToken失敗,因為AGConnectServicesConfig.getString("client/app_id"); 返回null ,您將其傳遞給getToken方法。

在最近的華為服務版本中,要獲取 appId,您應該請求/client/app_id ,而不是像這樣的client/app_id字符串:

String appId = AGConnectServicesConfig.fromContext(MainActivity.this).getString("/client/app_id");

其他一切都保持不變。 但我建議編寫if語句來檢查appId是否為 null 並跟蹤它。 如果華為決定再次更改該值,那將節省您的時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM