为什么使用华为推送工具获取不到pushToken?

Ire*_* Li 8 android push push-notification huawei-mobile-services huawei-push-notification

我正在使用以下代码片段,但是我仍然无法获取 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();
}
Run Code Online (Sandbox Code Playgroud)

cap*_*ink 8

拥有日志就完美了,但如果日志中一切正常,没有异常,并且 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>
Run Code Online (Sandbox Code Playgroud)

然后创建以下类;

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);
      }
}
Run Code Online (Sandbox Code Playgroud)

最后但并非最不重要的一点是,请确保您的设备是华为:) HMS Core 的大部分功能都依赖于 EMUI。如果没有EMUI,目前无法保证功能的正常运行。

下面是查看 HMS Core - EMUI 关系的一个很好的参考。 https://developer.huawei.com/consumer/en/doc/development/HMS-Guides/emui_version_dependent_features

根据问题所有者的评论更新

返回码907135000表示您的SDK配置不正确。花点时间检查以下几点;

  1. 检查agconnect-services.json文件中的app_id和package_name参数是否正确。app_id 和包名称应与 AGC 上创建的应用程序匹配。另外,考虑重新下载对应的agconnect-service.json
  2. 检查build.gradle文件中是否配置了证书签名。
  3. 该故障可能是HMS Core(APK)缓存导致的。卸载并重新安装HMS Core(APK),断开并重新连接手机与互联网,然后重新启动应用程序。