[英]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配置不正確。 花點時間檢查以下幾點;
在做好准備工作,特別是開啟推送服務和設置指紋的前提下,你可以得到一個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.