【问题标题】:Google Cloud Messaging (GCM) and registration_id expiry, how will I know?Google Cloud Messaging (GCM) 和 registration_id 到期,我怎么知道?
【发布时间】:2012-10-10 17:24:29
【问题描述】:

我已经组装了一个框架客户端/服务器 GCM 应用程序,该应用程序在我的 Android 手机上接受并显示来自我粗糙且现成的服务器的消息。我说“骨架”和“粗略准备”是因为我的应用程序的 registration_id 被硬编码到服务器端,作为我在启动示例 Android 应用程序并在 GCM 服务器上注册应用程序/设备组合时在调试器中捕获的值。我正要着手提供一种读写机制,让双方可以访问服务器上的一个简单数据库来存储 reg_id/device 组合,这时我开始思考:

我知道这个 reg_id 可以随时过期,因为 Google 说它可以。从文档中可以清楚地看到如何检查 id 是否仍然正常 IF,而且这是一个很大的 IF,我再次启动应用程序。但是,我或任何其他用户为什么要重新启动它?在清单中注册的 GCMIntentService 会根据需要在那里接收消息,并且无需出于任何原因再次运行该应用程序。因此,当 id 过期时,我将停止接收消息 - 服务器可能会从返回代码中知道,但无法通知我的应用程序 - 除非我再次运行应用程序并通过它的 onCreate() 并推测,否则无法恢复registerClient() 方法。

那么当 id 过期时会发生什么?我看不到 IntentService 中的任何 on.. 方法都会执行。谷歌自己会发送一条正常的消息说它即将过期吗?是不是需要写一个报警任务每天运行并查看id?

【问题讨论】:

  • @Arpit Garg:它没有回答我的问题。我知道如何检查,但我为什么要检查?我不会打开电子邮件应用程序来检查消息或它是否具有过期的“id”,它只是坐在那里并告诉我何时到达。 GCM 的行为方式应该相同。

标签: android google-cloud-messaging


【解决方案1】:

根据GCM

现有的注册 ID 可能在多个 场景,包括:

  • 如果应用程序通过发出 com.google.android.c2dm.intent.UNREGISTER 意图手动取消注册。
  • 如果应用程序被自动取消注册,如果用户卸载应用程序,这可能会发生(但不能保证)。如果注册ID过期。 Google 可能会决定刷新注册 ID。
  • 如果应用程序已更新但新版本未配置广播接收器以接收 com.google.android.c2dm.intent.RECEIVE Intent。

考虑注册相关的响应将触发“com.google.android.c2dm.intent.REGISTRATION”意图。因此,您应该注意从 GCM 发送的注册消息。

更新

GCM 文档说:

如果注册 ID 过期。谷歌可能决定刷新 注册 ID。对于所有这些情况,您应该删除这个 来自第三方服务器的注册 ID 并停止使用它发送 消息。当错误代码未注册时发生。

考虑到上述事实是事实,那么在你的服务器上你应该处理过期的 ID 并在你的数据库中设置一个标志,下次你的 android 客户端检查你的服务器时(最后你必须定期检查)或您在 GCMRegistrar 类上调用 isRegisteredOnServer 并得到 false 结果,您应该触发 REGISTRATION 意图以获取新 ID。

【讨论】:

  • 从客户端的角度来看,GCM 的全部意义在于它在消息到达之前对客户端是不可见的。这是由注册了接收器(如广播接收器)的意图服务触发的。该接收者不能做任何事情,除非它从发送消息的人那里收到意图。整个过程不需要用户交互。您是说用户需要记住运行应用程序以不时检查 reg_id 吗?接收者不会为用户做这件事。
  • @NickT,我编辑了我的答案。注册 REGISTRATION Intent 后,Register、Unregister、Expiration 等结果以及与您的 registration_id 相关的任何内容都将发送到此 Intent,您只需处理 REGISTRATION Intent 收到的消息。
  • 如果 Google 在 id 过期并且仍然有效(否则您不会收到消息)并且新 id 位于规范 id 字段中时确实向 REGISTRATION 意图发送了一些东西,那很好。即有一段宽限期,在此期间两个 ID 都有效。问题是你绝对知道他们是做什么的吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-11
  • 1970-01-01
  • 2013-03-12
相关资源
最近更新 更多