为啥 InstanceID 总是返回一个令牌,尽管有错误的 senderId?

Posted

技术标签:

【中文标题】为啥 InstanceID 总是返回一个令牌,尽管有错误的 senderId?【英文标题】:Why InstanceID always returns a token despite of wrong senderId?为什么 InstanceID 总是返回一个令牌,尽管有错误的 senderId? 【发布时间】:2016-03-08 19:13:44 【问题描述】:

我正在使用 Google Cloud Messaging api 来实现 android 客户端。要获得令牌,我会这样做:

   InstanceID ex = InstanceID.getInstance(this.getApplicationContext());
   String regId = ex.getToken(senderId, "GCM", null);

尽管我使用了 senderId,但 regId 始终包含一个令牌。如果我将 senderId 设置为“123”,InstanceID 会返回一个令牌! (但是,我没有收到带有此令牌的通知)。为什么我总是得到一个令牌?我期待一个异常,或者一个空值可能......

【问题讨论】:

【参考方案1】:

您可能总是会获得一个令牌,但您将无法使用它来建立完整的 gcm 生命周期,因为 instanceId 与您的应用服务器的 senderId 绑定。

来自google documentation

使用getToken方法证明InstanceID的所有权和 允许服务器访问与应用程序关联的数据或服务。 该方法遵循 OAuth2 的模式,并且需要 授权实体和范围。授权实体可以是项目 ID 或另一个 InstanceID,它决定了哪些服务是 授权使用生成的令牌。范围决定了 令牌允许访问的特定服务或数据。

要了解更多生命周期,请参阅documentation

【讨论】:

以上是关于为啥 InstanceID 总是返回一个令牌,尽管有错误的 senderId?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 Auth0 令牌从 iOS 发送到 node.js 服务器时总是返回无效?

如何隐藏我的 Android 应用程序在加载时显示的“InstanceID 令牌:”框

ios设备上的Firebase InstanceID令牌刷新延迟

Android GCM InstanceId.getToken() -> java.io.IOException: TIMEOUT

为啥我总是得到一个不允许通配符 * 的 cors 错误,尽管我在服务器上指定了一个来源?

为啥我的 Office 365 OAuth2 刷新令牌总是这么快过期?