处理FCM设备组的刷新令牌

我正尝试通过Node.js服务器在我的Android应用程序中实现Firebase云消息传递,并且遇到了一个用例。

我看到了使用注册令牌创build设备组的Firebase教程,使用相同的用户login将消息/通知发送到所有设备,但是我不明白当通过onTokenRefresh()方法刷新其中一个注册令牌时会发生什么。

我将如何区分哪个令牌要更改,因为它们都属于同一个用户?

更新:

好的,现在我已经陷入另一个阻塞用例了。 我从我的服务器创build一个用户组标识的用户组。 如果用户立即卸载并重新安装应用程序,并且另一个用户login到设备上,如果我在前一个用户组上调用gcm消息,则该设备仍会收到该消息。

有没有办法让gcm识别它发送通知的设备是否已经login,如果是,是否与组中的用户login?

所以我一直在想如何与这种情况下去。 首先,让我们在调用onRefreshToken()时join实例:

这不会被频繁地调用 ,它是需要的密钥轮换和处理实例ID更改由于:

  • 应用程序删除实例ID
  • 应用程序在新设备上恢复
  • 用户卸载/重新安装应用程序
  • 用户清除应用程序数据

可以这么说,你可以说'onTokenRefresh()`会在上述情况发生后被调用,如果设备在线( 当然为了得到新的令牌,它必须在线 )。 所以我想这是我怎么去的情景:

首先,注册后,我会保存注册令牌,并将其与另一个标识符配对,比如我的App Server中的deviceId( 因为我们处于具有多个设备的用户的场景中 )。

所以假设我添加了3个注册令牌,这些令牌也与他们的deviceIds配对。 我将它们全部添加到设备组。

现在说其中一个设备触发onTokenRefresh() ,我会立即发送一个删除请求到我的应用程序服务器的注册令牌,目前配对该deviceId(你也应该删除它的任何设备组(s)它连接到),将其replace为新的,然后将其重新添加到相应的设备组中。

这是我能想到的最简单的方法。 这里的关键是您将注册令牌与另一个标识符配对,并使用它来查找您需要replace的注册令牌。

目前我使用这种方法。 在我的数据库中,我创build一个设备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,因为当我在应用程序中使用注销或login时,我可以为任何用户更改相应的deviceId,以便在用户和设备之间保持一致。

如果绕过20个设备的限制,我发送相同的通知到不同的20个设备组会发生什么情况?