实施C2DM注册的最佳实践

8

我正在开发一个应用程序,使用C2DM接收推送通知。我已经实现了整个C2DM电路(客户端和服务器),并且一切正常。

目前,我的应用程序有一个按钮来引导C2DM注册,当从Google接收到注册ID令牌时,我调用应用服务器中的Web服务将设备与注册ID关联起来。

我将在我的应用程序中实现身份验证,并且我有几个与处理C2DM注册相关的问题。

  1. 客户端应用程序(即Android应用程序)将具有登录屏幕作为第一个屏幕,以便用户可以输入凭据。一旦凭证得到验证,我计划调用C2DM注册,以便用户与注册ID令牌关联。这样做可以吗?在以后的应用程序执行中,我可能会存储凭据或某种令牌,以便用户无需再次输入凭据,那我是否应该在应用程序启动时也触发C2DM注册?
  2. 我知道Google可能会更新注册ID。定期更新注册ID是否是一个好习惯?如果是,何时更新比较合适?注册ID令牌是否过期?
  3. 在客户端和服务器之间的注册ID出现不同步的情况下会发生什么(例如,在客户端到达新的注册ID,在服务器上使用旧的注册ID触发了新事件,然后注册ID到达服务器)?Google会处理这些情况吗?我的应用服务器应该处理这些情况吗?
  4. 如果当从Google接收到新的注册ID时,服务器无法连接会发生什么?我应该退避并安排一个警报以再次尝试吗?
  5. 你能想到其他任何问题吗?
2个回答

6

1) 我会尽快解除C2DM注册。没有特别原因,但由于请求是异步的,提前启动它将有助于我更快地获取注册ID。但是,每次应用程序启动时都不需要触发注册。一次足矣。

2) 每当Google决定更新注册ID时,它将向设备发送该ID,您需要执行与第一次接收注册ID时相同的步骤,即将其传达到服务器。

3&4)您可能希望阅读此文档。文档强调了一个事实,即您需要确保将注册ID发送到服务器并继续尝试。在此假设,如果刷新了注册ID,而您的服务器仍具有旧ID,则无法向设备发送消息。它将收到带有InvalidRegistration错误代码的200OK,这意味着一个(丢失或)错误的注册ID。

5) 不能多加评论-将会说这取决于您的应用程序设计。但值得注意的一件事情是,C2DM仍处于Beta测试阶段,因此长期来看可能会有所不同。


谢谢您的回答,所以您的意思是在登录时调用一次注册过程,然后只监听 Google 的更改。是这样吗? - aromero
是的,正如我所说的,当Google刷新注册ID时,您的应用程序应该接收到REGISTRATION意图。 - advantej
你是否曾经发现一种强制谷歌刷新 ID 的方法?我想测试并确认我的代码是否正常运作。 - Quentamia

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接