8

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

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

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

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

2 回答 2

6

1) 我会尽快取消 C2DM 注册。没什么特别的,但是由于请求是异步的,所以尽早启动它会帮助我更快地获得 reg ID。但是,无需在应用程序每次启动时触发注册。一次就够了。

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

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

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

于 2011-05-03T05:07:49.117 回答
0
  1. 尝试提示用户选择手机上已有的谷歌帐户。http://code.google.com/p/chrometophone/source/checkout显示了这一点。查看 SetupActivity.java 中的 getGoogleAccounts() 等。
于 2011-09-16T02:04:57.853 回答