安卓C2DM注册ID

3
我正在开发一款使用c2dm的应用程序。
我认为每当我的应用程序的主要“意图”启动时,我应该请求一个注册ID。我一直在这样做,但似乎每个请求都会产生一个新的字符串,所以我最终在我的数据库中积累了许多相同设备的注册ID。我想只有其中一个有效。然而,我不想删除旧的注册ID,因为如果用户拥有多个设备,我希望他们能在多个设备上收到通知。
我该如何处理这个问题?
5个回答

1

在您的应用程序安装在设备上之前,永远不要刷新ID

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

当您将设备注册到Google服务器时,它会生成与该设备ID对应的字符串(正如您已经知道的那样)。但是,如果您再次使用同一设备进行注册,则先前的设备ID将无用。

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


0

如果您在云端注册,返回的注册ID将有效,直到您收到带有“未注册”字符串额外信息的意图(仅在您的应用程序有意注销服务时才会发生),或者Google发送另一个带有新注册ID的Registration意图,此时您设置的系统应该正常工作。

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

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


0
你只需要在没有注册ID的情况下请求一个并将其发送到你的服务器(将发送C2DM消息的那个)。很奇怪你一直得到一个新的ID,在我的测试中,每次我在同一设备上注册和注销相同的应用程序时,我都会得到相同的ID。我还没有进行过太多的测试,但我认为ID会因每个设备和应用程序组合而异。

谢谢,我已经改为只发送一次了。可以假设这个ID在应用程序安装期间都是有效的吗? - Frank LaRosa
@andrew:当您在Google服务器上注销设备并重新注册时,您将获得新的ID而不是以前的ID。但是,如果Frank你得到一个ID,那么注册一次并将标志保存在数据库中,只要应用程序安装,它就会起作用。但是,您需要使用该标志停止控制进入c2dm代码。 - Tofeeq Ahmad

0

我正在将registration_id与device_id保存在数据库中。这样,每个设备只有一个条目。此外,reg id作为共享首选项保存在设备上,以便我不必每次请求新的reg id...

但是我想知道是否有办法找出用户设备上的reg id是否过期。

有什么想法吗?是否有意图可以实现它?


0

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

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

回到第一个情况。在设备上应用程序的生命周期内,C2DM服务器可能会向设备发送新的注册ID[它会自行执行,您无需再次请求]。因此,您应该为此设置监听器,并可以更新数据库中该设备的注册ID。

希望对您有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接