我应该生成Android GCM注册ID是特定于应用程序还是特定于用户?

5

我正在开发一个带有登录功能的应用程序。我为每个应用程序仅生成一个GCM注册ID。如果其他用户在同一应用程序中登录,则会开始收到针对先前用户的通知。 如何处理此情况,以便每个用户将获得针对他/她的通知? 是否应该为每个用户生成GCM注册ID? 如何处理这种情况的标准方式是什么?

4个回答

7
您可以尝试以下方法:
1. 当用户注销时,向服务器发送删除令牌的请求,并在应用程序上擦除它; 2. 一旦用户注销,您可以简单地在服务器上删除“用户ID”到“GCM令牌”(或注册ID)的关联。当有人再次登录时,您将与该令牌建立新的关联。
GCM令牌是应用程序特定的,但您在服务器上建立的关联完全由您决定。
而且我再次强调,GCM生成的令牌是应用程序特定的。如果您的用户在多个设备上登录,则您的服务器应该处理这一点,并将“用户ID”与多个“注册ID”令牌相关联。
引用:
GCM服务器为Android应用程序发出的ID,允许其接收消息。一旦Android应用程序拥有注册ID,它会将其发送到第三方应用程序服务器,后者使用它来识别已注册以接收给定Android应用程序消息的每个设备。换句话说,注册ID与在特定设备上运行的特定Android应用程序相关联。
根据文档,您的服务器还应:
在编写使用GCM的客户端应用程序之前,您必须拥有一个满足以下条件的应用程序服务器: - 能够与您的客户端通信。 - 能够向GCM连接服务器发送格式正确的请求。 - 能够处理请求并以指数回退方式重新发送请求。 - 能够存储API密钥和客户端注册令牌。 - 能够生成消息ID以唯一标识其发送的每条消息。 消息ID应按发件人ID区分。

编辑:您可以在此处阅读有关GCM的更多信息。

如需进一步了解,您还可以阅读有关设备组消息传递的更多内容。

您也可以在此处下载一些代码示例。


5

您应该按用户存储regID。

这是因为有测试用例,用户1注销并且用户2登录。在这种情况下,如果您已将regID存储为特定于应用程序而不绑定用户,则用户2也会收到通知。

因此,您需要按用户、应用程序以及设备特定存储regID。


1
当然,每当有人下载您的应用程序时,您的应用程序都应该将其注册到GCM并获得一个注册令牌,这需要发送到您的应用程序服务器,您需要在应用程序服务器上解决要发送通知的人员。他们登录时,您应该发送一些登录信息和注册令牌,以便您可以识别每个人,然后编写一些PHP或JQuery以向单个用户或所有用户发送通知。每次登录时,您还应该发送注册令牌,因为这些可能会在没有警告的情况下更改。
您的应用程序服务器应能够处理删除未使用的注册令牌并添加新的令牌。

0
每个安卓设备都会生成一个唯一的GCM注册ID,来自服务器端的推送通知将根据设备ID发送。因此,在登录时,您可以将GCM注册ID发送到您的服务器,这样从服务器端就可以向设备发送推送通知,这是实际的功能。
希望这能帮到你。

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