无法使用 API 级别 16 注册 Android 令牌
Posted
技术标签:
【中文标题】无法使用 API 级别 16 注册 Android 令牌【英文标题】:Unable to register Android token with API level 16 【发布时间】:2015-08-21 19:21:58 【问题描述】:我有一个使用 Lollipop 且运行良好的 android 应用。我想添加对以前版本的 Android 的支持。我使用 API 级别 16 设置了一个设备,但由于某种原因,我在以下命令中不断收到 NullPointerException:
String token = gcm.register(Config.GOOGLE_PROJECT_ID);
“gcm”当然不为空。
是不是我做错了什么?
编辑:
我做了一些更改并将 API 级别提高到 17。代码现在看起来像这样:
InstanceID instanceID = InstanceID.getInstance(getApplicationContext());
String token = instanceID.getToken(Config.GOOGLE_PROJECT_ID,
GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);
仍然没有通过命令:
instanceID.getToken
谁能告诉我我做错了什么?
【问题讨论】:
您是否尝试过根据这个问题设置 gcm? ***.com/questions/20820079/… 我建议您切换到使用 InstanceID,它现在是 Android 客户端注册的推荐方式。检查此文档中的第 5 步:developers.google.com/cloud-messaging/android/start 谢谢,我确实切换到了 InstanceID。现在我的应用程序没有崩溃,但它也没有运行以下行之后的任何代码:InstanceID instanceID = InstanceID.getInstance(context)。我也尝试切换到 API 级别 17。我做错了什么?在 API 22 上似乎一切正常。 抱歉,运行此命令失败:String token = instanceID.getToken(Config.GOOGLE_PROJECT_ID, GoogleCloudMessaging.INSTANCE_ID_SCOPE, null); 【参考方案1】:经过进一步调查,我注意到了异常:
java.io.IOException: MISSING_INSTANCEID_SERVICE
我了解到问题与我的模拟器上未安装 Google Play 有关。我不知道为什么 Google 不决定将它自动包含在旧版模拟器中。
我通过以下方式解决了问题:
切换到更快的 Genymotion 模拟器。 在 Genymotion 模拟器上安装 Google Play: 下载可以在网上找到的适当的 Google Play zip 文件(有一个 eacj api 级别的版本)。 在 Genymotion 模拟器上拖放文件。 按照安装步骤重新启动。采取这些措施后,我不再收到此异常。
【讨论】:
以上是关于无法使用 API 级别 16 注册 Android 令牌的主要内容,如果未能解决你的问题,请参考以下文章
Android API 级别 16 及更高级别的 Torch 应用程序