每个用户使用多个设备实施GCM应用服务器

时间:2015-12-16 14:37:07

标签: android google-cloud-messaging

我对如何管理所有应用安装的注册ID感到困惑。

在app server数据库中,我有一个User表和一个UserDevice表。每个用户可能有许多 UserDevices 。每个 UserDevice 都有注册ID 。因此,当应该通知用户时,我会将消息发送到用户的所有设备的所有注册ID

但是当重新安装应用程序时,Android会更新或发生导致注册ID更改的其他情况,应用程序将向我们的应用服务器发送新的注册ID。但我无法知道这是否是 new 设备,或者是否应使用新的注册ID更新现有的UserDevice。

这应该如何处理?我的第一个想法是发送一个持久的硬件ID以及注册ID,但也许有更好的方法?

3 个答案:

答案 0 :(得分:1)

你不必担心这个。如果用户确实重新安装了应用程序并且令牌已刷新,则只需将其添加到用户的令牌列表中(暂时保留旧令牌)。

下次向该用户发送通知时,它将在不再使用的令牌上失败。现在,当您从谷歌获得失败回复时,您只需要从设备表中删除该令牌。

请记住,如果由于invalidRegID或NotRegistered等原因而无法发送到令牌,那么GCM将/已取消注册该令牌,因此它不合适,因此需要从列表中删除,否则您将收到谷歌坏书用于重复发送到同一个失败的令牌。所以删除失败的那些。

当我的应用程序启动时,我总是检查设备是否已注册,如果是,我将相同的令牌发送到我的应用服务器,只是因为它以某种方式被删除。

希望这有帮助

答案 1 :(得分:1)

您可以查看GCM的设备组功能,该功能明确用于“一个用户,多个设备”问题: https://developers.google.com/cloud-messaging/notifications

答案 2 :(得分:0)

我使用PushSharp,我可以使用定义的不同事件处理程序来处理订阅更改或过期。源代码可在github https://github.com/Redth/PushSharp/blob/master/PushSharp.Android/Gcm/GcmPushChannel.cs上找到 您可以将相同的逻辑应用于您的应用程序。