处理FCM设备组的刷新令牌

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

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

我将如何区分要更改哪个标记,因为所有标记都属于同一用户?

更新:

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

gcm是否有任何方法可以识别它发送通知的设备是否已登录,如果是,是否使用同一用户登录该组?


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

这不会被频繁调用 ,因此需要密钥轮换和处理实例ID更改:

  • 应用程序删除实例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

    上一篇: Handling refresh tokens for FCM device groups

    下一篇: Chrome Desktop push notifications sound not working