为啥 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