Android 实现每个用户具有多个设备的GCM应用程序服务器

Android 实现每个用户具有多个设备的GCM应用程序服务器,android,google-cloud-messaging,Android,Google Cloud Messaging,对于如何管理所有应用程序安装的注册ID,我有点困惑 在app server数据库中,我有一个User表和一个UserDevice表。每个用户可能有许多用户设备。每个UserDevice都有一个注册id。因此,当应该通知用户时,我会将消息发送给该用户所有设备的所有注册id 但当应用程序重新安装、Android更新或其他导致注册id更改的情况发生时,应用程序将向我们的应用程序服务器发送一个新的注册id。但我无法知道这是否是一个新设备,或者是否应该使用新的注册id更新现有的UserDevice 这应该

对于如何管理所有应用程序安装的注册ID,我有点困惑

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

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


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

我使用PushSharp,在那里我可以使用定义的不同事件处理程序来处理订阅更改或过期。源代码可在github上获得
您可能可以对应用程序应用相同的逻辑

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

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

请记住,如果您因invalidRegID或NotRegistered等原因未能发送到令牌,则GCM将/已注销该令牌,因此该令牌不好,因此需要将其从您的列表中删除,否则您将因重复发送到同一个失败令牌而被谷歌记录在册。所以,去掉那些失败的

当我的应用程序启动时,我总是检查设备是否已注册,如果是,我会将相同的令牌发送到我的应用程序服务器,以防它被删除


希望这对您有所帮助

您可以看看GCM的设备组功能,它明确针对“一个用户,多个设备”问题: