处理FCM设备组的刷新令牌
我正尝试通过Node.js服务器在我的Android应用程序中实现Firebase云消息传递,并且遇到了一个用例。
我看到了使用注册令牌创建设备组的Firebase教程,它向使用相同用户登录的所有设备发送消息/通知,但我不明白当通过onTokenRefresh()方法刷新其中一个注册令牌时会发生什么。
我将如何区分要更改哪个标记,因为所有标记都属于同一用户?
更新:
好的,现在我已经陷入另一个阻塞用例了。 我从我的服务器创建用户组标识的用户组。 如果用户立即卸载并重新安装应用程序,并且其他用户在设备上登录,如果我在前一个用户组上调用gcm消息,则该设备仍会接收该消息。
gcm是否有任何方法可以识别它发送通知的设备是否已登录,如果是,是否使用同一用户登录该组?
所以我一直在想如何与这种情况下去。 首先,让我们在调用onRefreshToken()时加入实例:
这不会被频繁调用 ,因此需要密钥轮换和处理实例ID更改:
与此猜测,你可以说'onTokenRefresh()`将在上述情况发生后以及如果设备在线(当然为了获得新令牌必须在线)才会被调用。 所以我想这就是我将如何去的场景:
首先,在注册后,我将保存注册令牌并将其与另一个标识符配对,比如我的App Server中的deviceId(因为我们处于具有多个设备的用户的场景中)。
因此,假设我添加了3个注册令牌,这些注册令牌也与他们的deviceId配对。 我将它们全部添加到设备组中。
现在说其中一个设备触发onTokenRefresh()
,我会立即向我的应用服务器发送一个删除请求,以获得当前与该设备ID配对的注册令牌(您也应该在与其相连的任何设备组中删除它) ),将其替换为新的,然后将其重新添加到相应的设备组中。
这是我能想到的最简单的方法。 这里的关键是让您将注册令牌与另一个标识符配对,并使用它来查找您需要替换的注册令牌。
现在我使用这种方法。 在我的数据库中,我使用设备ID创建一个节点
deviceId: {
uid1: deviceId,
uid2: deviceId,
uid3: deviceId
}
另一个节点与订阅的用户接收通知
newsSubscriber: {
uid1: [array of subscribers],
uid2: [array of subscribers],
uid3: [array of subscribers]
}
当我可以通过我的nodejs脚本发送通知时,我获得了保存在newsSubscriber节点中的所有用户,并且对于任何用户,我获得了他的deviceId,并将它放入设备数组中以发送通知。 只有一个问题,我现在读到,在这种模式下,只有20个设备的限制 !
但我认为这是一个很好的方法来为任何用户提供相应的deviceId,因为当我在应用程序中使用注销或登录时,我可以为任何用户更改通讯员deviceId,以便在用户和设备之间保持一致。
如果绕过20个设备的限制,我发送相同的通知到20个设备的不同组,会发生什么情况?
链接地址: http://www.djcxy.com/p/93719.html