0

每次我登录我的android应用程序时,我做的第一件事就是注册到GCM,这有什么问题吗?我知道没有必要这样做,但是为了检查注册 id 是否刷新为新的或者它仍然相同,我打算重新注册。

final String regId = GCMRegistrar.getRegistrationId(this);
if (regId.equals("")) {
  GCMRegistrar.register(this, SENDER_ID);
} else {
  Log.v(TAG, "Already registered");
}

我还想知道通过重新注册 GCM 是否会以某种方式强制注册 ID 过期。

谢谢!!!

4

1 回答 1

2

第1部分:

为了检查注册id是刷新到新的还是还是一样,我打算重新注册。

现在,如果您在架构概述页面上看到标题启用 GCM 下的第二点,它会显示:

Note that Google may periodically refresh the registration ID, so you should design your Android application with the understanding that the com.google.android.c2dm.intent.REGISTRATION intent may be called multiple times. Your Android application needs to be able to respond accordingly.

因此,Google 在更新 ID 时会自动向您发送此广播。您可能不一定要发送检查 ID 的空缺。当谷歌更改ID时,它也不会为空,对吧?因此,如果您想处理 ID 的更新/刷新,那么您可以执行以下操作:

你应该有一个Broadcast Listener可以处理com.google.android.c2dm.intent.REGISTRATION意图的东西,当谷歌必须刷新注册 ID 时,它会发送给应用程序。广播接收器将具有onReceive带有 Intent 的方法。从意图中,您可以Bundle使用它从 Google 中提取新的注册 ID。您可以保存它并将其发送到第三部分服务器,以替换您之前为该用户注册的 ID。

您也可能会在 GoogleCloudMessaging API 中的问题中看到答案,如何处理注册 ID 的续订或到期?.

第 2 部分: 回答您的第二部分问题:

您可能想在此处阅读取消注册。文档说If you unregister and then re-register, GCM may return the same ID or a different ID—there's no guarantee either way.

我认为每当 ID 即将过期/续订时,Google 都会向您发送新 ID。然后来自 Google 的响应将包含一个规范注册 ID(这是新的注册 ID)。此响应表明您的服务器应删除旧的注册 ID 并仅使用新的注册 ID。(来源:在取消注册和重新注册 GCM 消息时的回答导致两个 regId 有效。这是预期的吗? @Eran 的问题)

希望这可以帮助您了解如何处理它。

于 2013-08-23T08:59:03.580 回答