谷歌云消息推送 - 多账户多设备

6
我正在学习如何实现GCM(Google Cloud Messaging),包括客户端(Android)和服务器端(ASP.NET)。我花了一些时间阅读了与GCM相关的整个Google文档,并尝试了他们提供的示例。
据我所知,注册ID是将应用程序与特定设备以及后台服务器绑定到GCM服务的令牌;因此,后端可以直接向该设备发送下行消息。
在我的情况下,我可能有多个用户可以在同一设备上使用该应用程序,这意味着他们需要登录应用程序,并在服务器端的数据库中拥有帐户。我是否需要为该设备上的每个用户存储不同的注册ID?或者注册ID仍然只针对应用程序?
如果情况分布在多个设备上会怎样呢?因为一个用户可能有多个设备?
预先感谢您的回答。
3个回答

0

这与您的应用程序的上下文以及您希望通过通知实现的目标密切相关。

每个设备只有一个注册ID是可以的。

我通过使用由我的服务器处理的订阅标签来管理多个用户。

所以,假设您有一个体育应用程序:

用户A和用户B共享同一台设备。每个用户都订阅了一个标签。

User A is subscribed to two tags (Basketball & Football)

User B is subscribed to two tags (Tennis & Basketball)

当用户A注销时,您清除与该用户关联的标签,并在用户B登录时获取他/她的标签。
您的服务器根据用户订阅的标签知道要发送到设备的通知。
多设备场景:
同样,在用户登录时获取其标签。设备还具有来自GCM的自己的令牌。

好的,我明白你的意思。我也在考虑这个问题,可能只能由服务器处理。在数据库中,我可以存储用户和注册ID之间的关系,并设置一个字段来为特定用户设置设备的活动或非活动状态。因此,当服务器需要向特定用户发送下行消息时,它会检索所有活动和相关的注册ID,并通过多播将通知发送给它们中的所有人。这样可以吗? - Lex Kero
这会让事情更加复杂,为什么要在本地处理数据库ID?如果用户清除了所有数据,那么您将会失去多个用户的数据。 - AndroidEnthusiast
“如果用户擦除了所有数据”是什么意思?服务器将存储发送到它的所有注册ID,并基于账户创建关系。正如其他答案中所说,当另一个用户登录应用程序时,可能需要向服务器发送信息以更新与特定注册ID相关联的用户信息。 - Lex Kero

0
注册 ID 是应用程序的 ID,如果应用程序版本已更新,则可能会更改。您的推送通知将发送到具有您的应用程序的设备,而不考虑用户帐户。因此,每个设备上的每个用户都将收到您的通知,您只需为每个设备存储一个注册 ID。

好的,但如果我只需要向特定用户发送通知怎么办?文档中还报告了"如果您的应用程序正在使用帐户,则应对您的服务器的请求进行身份验证。" - Lex Kero
然后,您必须在用户登录时存储当前用户及其注册ID。对于一个设备和多个用户的情况:如果新用户登录,则设备会向服务器发送信息,说明此用户具有此注册ID,先前使用此注册ID的用户必须被删除。如果用户使用多个设备-数据库必须存储每个注册ID。并且您将向与您的用户匹配的已知注册ID发送推送。 - Jane
根据您的建议,当另一个用户登录应用程序时,最好删除用户与RegID之间的关系,对吗? - Lex Kero
我认为是,因为您要发送给以前用户的通知将被新用户接收。我认为您只需存储实际信息 - 用户及其当前注册ID。 - Jane

0

针对多个用户:如果您的消息是特定于用户的,您将希望检索用户的令牌并仅在他们登录时订阅它。当您切换用户时,请删除/注销先前的令牌,然后保存/注册新用户的令牌。

不仅在每个设备上有多个用户时应该这样做,而且当用户退出时也应该这样做。这将防止特定于用户的消息在错误的时间显示给错误的用户。

针对多个设备:听起来您正在寻找设备组消息

通过设备组消息,应用程序服务器可以向属于组的设备上运行的应用程序的多个实例发送单个消息。通常,“组”指的是属于单个用户的一组不同设备。

这也很好,因为有collapse_key。当同一帐户上的其中一个设备打开通知时,它将在其他设备上关闭通知。


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