Google 云消息传递实例 ID 是永久的还是临时的?
Posted
技术标签:
【中文标题】Google 云消息传递实例 ID 是永久的还是临时的?【英文标题】:Is Google cloud messaging instanceID permanent or temporarly? 【发布时间】:2015-07-16 03:21:39 【问题描述】:我正在使用谷歌云消息传递创建一个信使应用程序,我只是想使用 instanceID 中的令牌来识别用户,但由于某种未知原因,我从这个方法中获得了第一个令牌
InstanceID instanceID = InstanceID.getInstance(this);
String token = instanceID.getToken(getString(R.string.gcm_defaultSenderId),
GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);
与我使用“from”标签从服务器获取的令牌不同。
public void handleIncomingDataMessage(Map<String, Object> jsonObject)
String from = jsonObject.get("from").toString();
我只需要知道这是我的编码问题还是真的发生了变化,我不能再依赖令牌了。
【问题讨论】:
GCM 应用了很多规则,最好从developers.google.com/cloud-messaging获取更多信息 是的,我读到了,但我只需要知道我是否可以将此令牌用作唯一标识符?因为我在某个地方读到了它的独特之处,并且在您决定更改之前不会更改,但看起来谷歌经常更改它。 是的,从 GCM 返回的注册 ID 是唯一的,直到您取消注册设备或超过设备上限。 但正如我上面给出的例子,它似乎不时变化 【参考方案1】:实例 ID 确实应该是恒定的,如下所述: What is Instance ID?
但是,有两点需要注意:
确保不要在代码中的某处调用getID()
方法。它旨在获得一个新的令牌。
出于安全原因,Google 可以决定强制更新它。您必须处理这种情况:“您的应用必须实现一个侦听器以响应来自 Instance ID 服务的令牌刷新请求。”
【讨论】:
感谢您的评论,是的,正如您所提到的,在某些情况下它可能会被更改,因此它不是唯一识别用户的好标识符,所以我将摆脱它并将实现我自己的字符串来识别用户【参考方案2】:(我不懂英文) 再次调用此代码:
String token = instanceID.getToken(getString(R.string.gcm_defaultSenderId),
GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);
将生成新令牌,它不会等于您之前获取到服务器的旧令牌。
【讨论】:
我不想再调用这个方法了。我只需要澄清令牌是唯一的,并且不会因请求而异以上是关于Google 云消息传递实例 ID 是永久的还是临时的?的主要内容,如果未能解决你的问题,请参考以下文章
Firebase 与 Android Java 中的 Google 云消息传递
用于 Google 云消息传递客户端的 BroadcastReceiver 或 GCMBroadcastReceiver?