实施C2DM注册的最佳实践

时间:2011-05-03 02:52:29

标签: android web-services android-c2dm

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

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

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

  1. 客户端应用程序(即Android版)将有一个登录屏幕作为第一个屏幕,因此用户可以输入凭据。一旦凭证得到验证,我就打算调用C2DM注册,以便用户与注册ID令牌相关联。这个可以吗?在以后的应用程序执行中,我可能会存储凭据或某种令牌,因此用户无需再次输入凭据,我是否还应该在应用程序启动时触发C2DM注册?
  2. 我知道Google最终可能会更新注册ID。定期更新注册ID是一种好习惯吗?如果是的话,什么时候应该合适?注册ID令牌是否过期?
  3. 在极少数情况下,客户端和服务器之间的注册ID不同步会发生什么(例如,新的注册ID到达客户端,在旧的注册服务器上触发新事件id,然后注册ID到达服务器)?谷歌会处理这种情况吗?我的应用服务器应该处理这种情况吗?
  4. 如果从Google收到新的注册ID后无法访问服务器会怎样?我应该退回并安排警报再试一次吗?
  5. 你能想到其他任何陷阱吗?

2 个答案:

答案 0 :(得分:6)

1)我会尽快解雇C2DM注册。没有什么特别的,但由于请求是异步的,提前启动它将帮助我更快地获得reg ID。但是,每次应用程序启动时都无需触发注册。一次就足够了。

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

3& 4)您可能想要查看documentation。它强调的是,您需要确保将注册ID发送到服务器并继续尝试。我在此假设如果刷新了reg ID,并且您的服务器仍然具有旧ID,则它将无法向设备发送消息。它将收到200OK,错误代码为InvalidRegistration,这意味着(缺少或)错误的注册ID。

5)不能评论太多 - 会说它取决于你的应用程序的设计。但有一点值得注意的是,C2DM仍处于测试阶段,因此预计从长远来看,情况会有所不同。

答案 1 :(得分:0)

  1. 尝试通过选择手机上已有的Google帐户来提示用户。 http://code.google.com/p/chrometophone/source/checkout显示了这一点。查看SetupActivity.java以获取getGoogleAccounts()等。