无法在 API 级别 17 上获取令牌

Posted

技术标签:

【中文标题】无法在 API 级别 17 上获取令牌【英文标题】:Unable to get token on API level 17 【发布时间】:2015-08-25 21:49:52 【问题描述】:

我正在运行这些命令以获取令牌:

  InstanceID instanceID = InstanceID.getInstance(getApplicationContext());
  String token = instanceID.getToken(Config.GOOGLE_PROJECT_ID,
                             GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);

但是得到这个异常:

java.io.IOException: MISSING_INSTANCEID_SERVICE
            at com.google.android.gms.iid.zzc.zza(Unknown Source)
            at com.google.android.gms.iid.zzc.zzb(Unknown Source)
            at com.google.android.gms.iid.zzc.zza(Unknown Source)
            at com.google.android.gms.iid.InstanceID.zzc(Unknown Source)
            at com.google.android.gms.iid.InstanceID.getToken(Unknown Source)
            at autofocus.com.autofocus.activity.ItemListActivity$4.doInBackground(ItemListActivity.java:408)
            at autofocus.com.autofocus.activity.ItemListActivity$4.doInBackground(ItemListActivity.java:398)

知道我做错了什么吗?

【问题讨论】:

【参考方案1】:

根据官方文档:

https://developers.google.com/android/reference/com/google/android/gms/iid/InstanceID#ERROR_MISSING_INSTANCEID_SERVICE

您收到此错误是因为

无法生成令牌。仅支持带有 Google Play 的设备。

在没有启用/安装 Google Play 服务的情况下在模拟器上进行测试?

【讨论】:

谢谢。我认为这是问题所在,问题是:如何在没有 Google Play 安装的情况下在我的模拟器设备上安装 Google Play? :) 有一个众所周知的黑客攻击。这是 xamarin android player university.xamarin.com/resources/…google 的链接,用于 genymotion 的类似解决方案。如果使用谷歌官方模拟器,那么,停止使用并切换到genymotion或xap 谢谢,效果很好。我仍然不明白为什么 Google 没有将 Google Play 内置在较旧的模拟器上。它可以节省我大约 2 个小时的生命:)【参考方案2】:

你需要在你的模拟器中安装gapps版本的android,如果使用genymotion你需要在gapps di之前安装Genymotion-ARM-Translation_v1.1 之后,可能会起作用

【讨论】:

以上是关于无法在 API 级别 17 上获取令牌的主要内容,如果未能解决你的问题,请参考以下文章

无法获取 lyft api 的访问令牌

为啥在 API 级别 30 上使用范围存储无法访问某些音频文件?

从 Facebook Graph API 获取访问令牌

无法从 Spotify API 获取访问令牌

(JAVA) Google API 分析 - 无法使用“刷新令牌”获取新的“访问令牌”

Spotify API php - 无法请求数据并获取访问令牌