一尘不染

处理FCM设备组的刷新令牌

node.js

我正在尝试通过Node.js服务器在Android应用中实现Firebase云消息传递,但遇到了用例。

我看到了Firebase教程,该教程使用注册令牌创建设备组以向登录同一用户的所有设备发送消息/通知,我不明白的是当使用onTokenRefresh()方法刷新一个注册令牌时会发生什么。

我将如何区分要更改的令牌,因为所有令牌都属于同一用户?

更新:

好的,所以现在我被困在另一个阻塞的用例上。我正在创建一个由服务器上的用户ID标识的用户组。如果用户立即卸载并重新安装了该应用程序,并且另一个用户登录到该设备,则如果我在前一个用户组上呼叫了gcm消息,则该设备仍会收到该消息。

gcm是否可以通过任何方式识别将通知发送到的设备是否已登录,如果已登录,是否使用与该组相同的用户登录?


阅读 225

收藏
2020-07-07

共1个答案

一尘不染

所以我一直在考虑如何处理这种情况。首先,让我们在调用onRefreshToken()时放入实例:

这不会被频繁调用 ,它是密钥旋转和处理由于以下原因导致的实例ID更改所必需的:

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

猜到了,您可以说’onTokenRefresh()`将在上述情况发生之后并且设备在线时被调用( 当然,必须先在线才能获取新令牌
)。因此,我想这是我要进行的操作:

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

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

现在说一台设备触发onTokenRefresh(),我将立即向我的App
Server发送删除请求,以获取当前已与该deviceId配对的注册令牌(您还应该在与其连接的任何设备组中将其删除),将其替换将其与新设备​​一起添加,然后将其重新添加到相应的设备组。

那是我想到的最简单的方法。这里的密钥是让您将注册令牌与另一个标识符配对,并使用它来查找需要替换的注册令牌。

2020-07-07