C2DM
或旧的GCM API的,该API使用GCMRegistrar而不是GoogleCloudMessaging API。之前的两种方法已经过时。
我将尝试逐步解决我的困惑/问题:
1) 在 启用GCM 标题下,第二点中提到:
谷歌可能会定期刷新注册ID,因此您应该在设计 Android 应用程序时理解 com.google.android.c2dm.intent.REGISTRATION 意图可能被调用多次。您的 Android 应用程序需要能够相应地响应。
注册 ID 将持续到 Android 应用明确注销自己,或者直到谷歌刷新您的 Android 应用的注册 ID 为止。每当应用程序收到一个带有 registration_id 额外信息的 com.google.android.c2dm.intent.REGISTRATION 意图时,它应该保存该 ID 以供将来使用,将其传递给第三方服务器以完成注册,并跟踪服务器是否已完成注册。如果服务器未能完成注册,则应重试或从 GCM 注销。
2) 如果是这种情况,那么我应该在BroadcastReceiver中处理意图并再次发送register()请求以获取新的注册ID。但问题在于在同一个页面下的ERROR_MAIN_THREAD标题下,它说:
GCM方法是阻塞的。您不应该在主线程或广播接收器中运行它们。
3) 我还了解到当注册ID更改时有其他两种情况(如在保持注册状态同步标题下的高级主题中提到):应用程序更新和备份与恢复。我已经在打开应用程序时处理它们了。
4) 在GCMRegistrar API中,GCMBaseIntentService内部曾经有一个回调onRegistered()方法,当设备注册时会调用它。我曾在这里持久化注册ID并发送给第三方服务器。
但是,现在我应该如何处理注册ID的更新或续订,以及如何持久化并发送到第三方服务器呢?
可能是我读错了还是漏掉了什么。非常感谢您的帮助。
更新
即使在Handling registration ID changes in Google Cloud Messaging on Android线程中,也没有提到如何处理Google定期刷新ID的问题?