3

我正在构建一个使用 c2dm 的应用程序。

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

我该如何处理?

4

5 回答 5

1

在您的设备上安装您的应用程序之前,切勿刷新 ID

我已经实现了 C2DM。如果您在一台设备上拥有多个注册 ID,则只有最新的 ID 才能发送通知。

当您将设备注册到谷歌服务器时,它会生成一个与该设备 ID 相对应的字符串(如您所知)。但是如果您再次使用同一设备注册,那么之前的设备就没有用了。

所以我建议最好保留设备是否已注册的信息。如果已注册,则无需再次重新注册。因为您将根据旧 R_ID 收到通知。只需将此 R_ID 发送到您的服务器以进行通知,并将标志保存在您的数据库中以跟踪注册

于 2012-01-25T09:46:42.273 回答
0

您唯一的假设是在没有注册 ID 时请求注册 ID,并将其发送到您的服务器(发送 C2DM 消息的服务器)。奇怪的是,在我自己的测试中,每次我在同一设备上注册和取消注册同一个应用程序时,我都会获得相同的 id。我还没有做很多测试,但我认为每个设备和应用程序组合的 id 都会改变。

于 2011-05-28T04:30:59.593 回答
0

我将registration_id 和device_id 保存在数据库中。这样我每个设备只有一个条目。此外,注册 ID 作为共享首选项保存在设备上,这样我就不必每次都请求新的...

但我想知道是否有某种方法可以查明用户在其设备上的 reg id 是否已过期。

有任何想法吗?有没有这样做的意图?

于 2011-05-28T14:55:56.037 回答
0

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

只要 C2DM 没有向设备发送新的注册 ID,或者用户卸载应用程序,注册 ID 就有效。我假设您知道如何处理后一种情况。

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

希望能帮助到你。

于 2012-01-31T09:33:14.613 回答
0

如果您在云中注册,则返回的注册 ID 将一直有效,直到您收到带有“未注册”字符串的意图(仅当您的应用程序有意识地取消注册服务时才会发生这种情况)或 Google 发送带有新注册的另一个注册意图ID,在这种情况下,您设置的系统应该可以正常工作。

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

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

于 2011-07-21T15:13:41.183 回答