如何处理每位用户使用多个 Firebase FCM 令牌



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

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

如果此用户同时在其他设备上安装应用程序,我是否应该在应用程序服务器上为每个用户存储多个令牌?如果是 - 这意味着应该检查哪些已过期?

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

总之,在将新令牌发送到服务器时,还要发送 getId(( 方法返回的设备 ID,并使用它来强制每个设备的令牌的唯一性。

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

如果此用户同时在其他设备上安装应用程序,我是否应该在应用程序服务器上为每个用户存储多个令牌?

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

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

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

Graykos,你可以像这样做:

每次用户有新的登录名时,从谷歌获取一个新令牌,注销时删除该令牌(编辑注意:关闭应用程序并再次运行它,不称为新登录,也不创建新令牌(。因此,如果用户从多个设备/浏览器登录,或者多个用户从一个设备/浏览器一个接一个地登录,您可以很好地处理所有这些。

这样"多个用户从一个设备/浏览器一个接一个地登录",它们都具有相同的令牌(因此每次登录都要删除并续订(

正如Andres SK在您问题的第一条评论中提到的,您可以在发生故障时删除令牌(可能是用户无法注销的丢失设备(。

我有类似的情况,在尝试发送到过期令牌时发现了以下错误响应代码:

{
"error": {
    "code": 404,
    "message": "Requested entity was not found.",
    "status": "NOT_FOUND",
    "details": [
        {
            "@type": "type.googleapis.com/google.firebase.fcm.v1.FcmError",
            "errorCode": "UNREGISTERED"
        }
    ]
}}

我的应用服务器接受每个用户的多个令牌,假设他们使用多个设备。发送新消息时,我将尝试将其发送到与用户相关的所有令牌。返回此错误的那些将被删除,因此将来的消息将仅发送到活动令牌。

我遇到了同样的问题,我试图解决这个问题的方式是维护这样的数据结构。并将此数据保存到我的通知程序服务器的数据库中。

type UserToken struct {
    UserId      string
    Tokens      []DeviceToken
}
type DeviceToken struct {
    DeviceName  string
    Token       string
}

每当您从 firebase 获得新的设备令牌时,只需将该设备的现有令牌替换为新令牌即可。

对于 Web 部分,我认为存储最后一个就足够了。

相关内容

  • 没有找到相关文章

最新更新