8

我正在使用以下代码片段,但是我仍然无法获得 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();
}
4

5 回答 5

5

有一个日志是完美的,但如果日志中的一切都很好,没有异常并且来自 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>

然后创建以下类;

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/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),断开手机并重新连接互联网,然后重新启动应用程序。
于 2020-04-24T14:33:44.470 回答
0

我得到了同样的错误。我解决了这个问题。如果您在不止一种媒体中工作,请检查风味文件。确保它是正确的。

多种口味文件:

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

于 2020-12-16T09:09:34.803 回答
0

在做好准备工作的前提下,你可以得到一个pushToken,尤其是开启推送服务和设置指纹。详情请参考以下链接:App开发

检查后可以使用过滤器“hmssdk”查看logcat。如果出现异常,可以看到错误码,然后可以参考文档解决问题。链接在这里:

如果可能,请显示日志,以便我们一起解决问题。

更多详细信息,您可以参考有关如何获取 pushToken的文档。

如果华为设备上的EMUI版本为10.0或更高版本,则会通过getToken方法返回一个token。如果调用getToken方法失败,HUAWEI Push Kit会自动缓存token请求并再次调用该方法。然后将通过 onNewToken 方法返回一个令牌。如果华为设备的EMUI版本低于10.0,且getToken方法没有返回token,则使用onNewToken方法返回token。

于 2020-05-15T02:51:38.200 回答
0

也许有点晚了,但仍然。

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为空并跟踪它。如果华为决定再次更改该值,这将为您节省时间。

于 2021-05-07T15:21:27.100 回答
0

类似问题,报错:

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

解决方案:

  • AppGallery Connect
  • 项目
  • 推送套件
  • 使能够

完毕

于 2020-08-22T15:59:29.163 回答