【问题标题】:Why can't I get pushToken by using Huawei Push Kit?为什么使用华为推送服务无法获取pushToken?
【发布时间】:2020-08-06 16:08:26
【问题描述】:

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

【问题讨论】:

  • 请查看logcat。
  • 我也面临这个问题,并收到以下错误:I/HMSSDK_HmsClient: receive msg status_code:1, error_code907135000, api_name:push.gettoken, app_id:|, pkg_name:com.xxxx.android, session_id:*, transaction_id:000000000ttoken20200521161603156246407, resolution:null I/MainActivity: gettoken failed, com.huawei.hms.common.ApiException: 907135000: arguments invalid
  • @CacheMeOutside 您可以从日志消息中非常清楚地看到您的 app_id 在清单中未正确设置。

标签: android push-notification push huawei-mobile-services huawei-push-notification


【解决方案1】:

可能有点晚了,但仍然。

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

【讨论】:

  • 永远不会太晚。挽救了我的一天,codelab 仍然以某种方式提供 "client/app_id"
  • @dmitrii-leonov 我不知道我的解决方案一开始是如何帮助我的(当我调试它时它刚刚起作用),因为第二天我发现appId 仍然是@ 987654332@。我的问题是我们禁用了 agconnect gradle 插件并且 config.json 没有进入应用程序。我不知道那个额外的'/'对我有什么帮助,这可能是幸运的巧合。所以你应该意识到你的情况也可能是巧合。特别是因为,正如我发现的那样,AGConnectServicesConfig 中有代码,如果需要,它会在字符串的开头添加“/”。
  • @МаксимДрозд 哇,是的,那些 id getter 很烂,我们可能应该编辑您的答案以避免进一步的混淆。谢谢。
【解决方案2】:

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

多种口味文档:

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

【讨论】:

    【解决方案3】:

    类似问题,报错:

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

    解决方案:

    • AppGallery 连接
    • 项目
    • 推送工具包
    • 启用

    完成

    【讨论】:

    • Jarda,你有没有解决这个问题?我遇到了同样的错误。根据文档,此错误意味着在 App Gallery 管理控制台中未启用 Push Kit,但已为我的应用启用。
    • 我遇到了同样的错误,但是我的项目启用了推送工具包。
    • 我也收到此错误,推送通知已启用。我如何启用项目 Receipt 和 App Receipt 因为它需要名称、回调和 Http 证书,所以我可以从哪里获取这些参数值
    【解决方案4】:

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

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

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

    更多细节可以参考how to get pushToken的文档。

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

    【讨论】:

      【解决方案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),断开手机并重新连接互联网,然后重新启动应用。

      【讨论】:

        猜你喜欢
        • 2021-07-06
        • 2021-12-22
        • 1970-01-01
        • 1970-01-01
        • 2012-02-25
        • 2022-11-28
        • 2011-05-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多