2011-05-26 118 views
3

我正在构建一个使用c2dm的应用程序。Android C2DM注册ID

我认为我应该要求注册ID,只要我的应用程序的主要“意图”启动。我一直在这样做,但似乎每个请求都会产生一个新字符串,所以我最终在我的数据库中为同一设备堆积了大量的注册ID。我认为只有其中一人会工作。但是,我不想只删除旧的,因为我希望我的用户能够在多个设备上接收通知,如果他们拥有多个设备。

我该如何处理?

回答

0

你唯一想申请一个注册ID,当你没有一个,并将其发送到你的服务器(一个将发送C2DM消息)。奇怪的是,你不断得到一个新的ID,在我每次在同一个设备上注册和取消注册这个相同的应用程序时,我都会得到相同的ID。我还没有做过很多测试,但是我会假设每个设备和应用组合都会改变id。

+0

谢谢,我切换到只发送一次。只要安装该应用程序,是否可以安全地假设此ID是有效的? – 2011-05-30 19:10:27

+0

@andrew:当您在Google服务器上注销您的设备并重新注册时,您将获得与以前不同的新ID。但是,如果您有一个ID,然后注册一次并在数据库中保存标志,则它将与应用程序一样工作但是您需要通过使用该标志来停止控制进入c2dm代码 – Sameer 2012-01-30 06:52:11

0

我正在用DB中的device_id保存registration_id。这样我每个设备只有一个条目。另外,REG ID保存设备作为共享的偏好上,这样我就不用每次都要求一个新的...

但我想知道是否有某种方式,如果要找出用户在其设备上的注册ID已过期或未注册。

任何想法?有意图吗?

0

如果您向云注册,返回的注册ID将有效,直到您收到带有“未注册”字符串额外的意图(这只会在您的应用程序有意识地注销该服务时发生),或者Google发送另一个注册意图与一个新的注册ID,在这种情况下,您设置的系统应该工作正常。

如果服务器收到数据为“Error = NotRegistered”的200响应,它将知道注册ID是否已过期。在这种情况下,您会从数据库中删除该条目。

http://code.google.com/android/c2dm/#server

1

,直到您的应用程序安装在您的设备

我已经实现C2DM决不刷新ID。如果您的设备有多个注册ID,则只有最新的ID才能发送通知。

当您注册设备到谷歌服务器,然后它产生一个字符串(如你已经知道)对应于设备ID.But如果使用相同的设备再前一个是没用的重新注册。

所以我会建议更好地保持信息设备已经注册或注册not.If然后无需重新注册again.As你会得到你的老R_ID的基础上通知。只是这R_ID发送到您的服务器通知的目的,并保存标志在你的数据中心,继续registeration的跟踪

0

应该从C2DM服务器请求该设备的注册ID仅在第一次应用程序被安装后运行,然后保存在数据库中(最好与设备ID一起保存,以便它是唯一的)。

登记ID是有效的,只要C2DM不发送该设备的新的注册ID,或用户卸载应用程序。我假设你知道如何处理后一种情况。

回到第一个案子。在设备的应用程序的生命周期中,C2DM服务器可能会向设备发送一个新的注册ID [它将自行完成,您不必再次请求]。因此,您应该有一个相同的侦听器,并且您可以更新数据库中该设备的注册ID。

希望它有帮助。