实施C2DM注册的最佳实践

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

目前我的应用程序有一个引导C2DM注册的button,当收到来自Google的注册ID令牌时,我在我的应用程序服务器中调用一个web服务来将设备与注册ID相关联。

我要在我的应用程序中实现身份validation,并且我有一些与C2DM注册处理相关的问题。

  1. 客户端应用程序(即Android应用程序)将有一个login屏幕作为第一个屏幕,以便用户可以input凭据。 一旦证书得到validation,我打算调用C2DM注册,以便用户与注册ID令牌关联。 这个可以吗? 在稍后的应用程序执行过程中,我可能会存储凭证或某种令牌,所以用户不需要再次input凭证,应用程序启动时是否也应该启动C2DM注册?
  2. 我知道Google最终可能会更新注册ID。 定期更新注册ID是不是一个好习惯? 如果是的话,什么时候应该适合? 注册ID令牌是否过期?
  3. 在客户端和服务器之间的注册ID不同步的罕见情况下会发生什么情况(例如,新的注册ID到达客户端,在这个新的注册ID的服务器上触发新的事件,然后注册ID到达服务器)? Google会处理这种情况吗? 我的应用服务器应该处理这种情况?
  4. 如果新的注册ID从Google到达时服务器无法访问会发生什么情况? 我是否应该退缩并安排闹钟重试?
  5. 你能想到其他的陷阱吗?

Solutions Collecting From Web of "实施C2DM注册的最佳实践"

1)我会尽快开始C2DM注册。 没有什么特别的,但由于请求是asynchronous的,提前启动它可以帮助我更快地获得注册ID。 但是,每次应用程序启动时都不需要启动注册。 一旦足够。

2)每当Google决定更新注册ID时,都会将其发送给设备,您需要按照第一次收到注册ID时所执行的相同步骤,即将其传送到服务器。

3和4)你可能想要通过这个文档 。 它强调,您需要确保将注册ID发送到服务器并继续尝试。 我在这里假设,如果注册ID被刷新,并且你的服务器仍然有旧的ID,它将不能发送消息到设备。 它将收到一个200OK错误代码的无效注册,这意味着(缺less或)不好的注册ID。

5)不能评论太多 – 会说这取决于你的应用程序的devise。 但值得一提的是,C2DM仍然处于testing阶段,因此长远来看,情况会有所不同。

  1. 尝试提示用户select已经在手机上的谷歌帐户。 http://code.google.com/p/chrometophone/source/checkout显示了这一点。 在SetupActivity.java中查看getGoogleAccounts()等。