如何为每个用户处理多个Firebase FCM令牌?

Gra*_*kos 14 firebase firebase-cloud-messaging

从官方文档中我了解到它的工作方式是这样的:

  1. 用户安装应用程序,生成FCM令牌
  2. 将令牌发送到应用服务器
  3. 服务器使用令牌向此设备发送推送通知.

如果此用户同时在另一台设备上安装应用程序,该怎么办?我应该在应用服务器上为每个用户存储多个令牌吗?如果是 - 这意味着应该检查哪些过期了?

tor*_*uto 7

我还遇到了确切的挑战,必须解决一个解决方案:根据设备ID为用户存储每个令牌。有趣的是,该功能实际上存在于firebase消息传递方法中。但是更令人惊讶的是,没有文档可以处理这种情况。 https://firebase.google.com/docs/reference/android/com/google/firebase/iid/FirebaseInstanceId.html#getId()

概括地说,在将新令牌发送到服务器的同时,还发送getId()方法返回的设备ID,并使用它对每个设备强制实施令牌的唯一性。

此外,要在利用FCM的设备分组功能的同时应用此解决方案,您可以在FCM组上发出服务器请求,以便删除该设备ID上的旧令牌,然后将其替换为新令牌。

  • 我知道,我读过,但是您称其为设备ID,不是,它只是一个实例ID。如果用户删除并重新安装该应用程序,则您将在同一设备上拥有另一个实例ID。因此,您将无法在同一设备上将旧令牌与新令牌区分开。 (7认同)

AL.*_*AL. 5

如果该用户同时在另一台设备上安装应用怎么办 - 我应该在应用服务器上为每个用户存储多个令牌吗?

是的。一个用户可能有多个设备,通常使用设备组的情况。

如果是 - 这意味着应该检查哪些已过期?

如果令牌过期,则会触发回调(onTokenRefresh()对于 Android),您必须从中将新令牌发送到应用服务器并删除与用户/设备对应的旧令牌。

  • “删除与用户/设备对应的旧设备”... 好的,但我如何确定唯一设备?如果同一用户使用 2 个不同的浏览器或不同的机器怎么办。是否有用于获取唯一设备 ID 或公共 Web API 的 firebase 方法? (10认同)