小编kfi*_*lla的帖子

Firebase Cloud Messaging:处理应用服务器中的令牌刷新

我正在尝试实现一个通知系统,您可以在其中订阅另一个用户(不是 Firebase 主题),并在该用户发布内容时获取推送通知。

为此,我决定使用设备组注册令牌,以便用户可以将推送通知发送到他/她登录的每个设备。

目前,用户可以订阅另一个用户,还可以使用通知键接收他登录的每个设备的推送通知。为此,我每次用户登录时都会获取设备的注册令牌,并使用以下结构将其存储在数据库(应用程序服务器)中。

用户

  • 用户 ID(主键)
  • 通知键名称
  • 通知键

设备

  • 用户 ID (FK)
  • 注册令牌

但是,我无法弄清楚如何管理应用程序服务器中的令牌刷新。

考虑这种情况:

1)user_1首次登录设备。

2) 使用registration_token_1创建设备组(在FCM 和应用程序服务器中)。

3)user_1卸载应用并重新安装(令牌刷新)。

4) user_1 重新登录。

5) App Server 将refresh_token_1添加到user_1,他现在有2 个令牌,旧的和新的。

6) user_1注销和user_2登录同一设备,refresh_token_1转移给user_2。

7) FCM 删除 user_1 的设备组,因为 user_1不再具有任何注册令牌。但 user_1 在应用服务器中仍然拥有 notification_key 和带有 Registration_token_1 的设备。

8) user_1 无法登录,因为应用程序服务器认为他已经拥有设备组并尝试将刷新令牌_1 添加到 FCM 中不存在的 notification_key,并收到错误代码 400“通知密钥不存在”。

我对此有几个问题:

如果刷新令牌,是否有办法从 FCM 检索旧令牌?这样,应用程序服务器可以用新令牌替换旧令牌,而无需将令牌与设备标识符配对,如果标识符在卸载/恢复出厂设置等情况下不存在,则这似乎不可靠

您能否推荐一种更好的方法来将用户(通知键)与应用程序服务器中的注册令牌进行映射?

编辑 我已经阅读了一些其他线程,并找到了一种可能的解决方案,其形式是将注册令牌与设备标识符配对,因此当刷新令牌时,我可以查找设备标识符并替换/删除令牌。现在,我不确定 iOS 和 Android 是否都具有持久标识符,这些标识符是否可以在应用程序卸载、数据擦除和恢复出厂设置之外存在……

firebase google-cloud-messaging firebase-cloud-messaging

0
推荐指数
1
解决办法
2255
查看次数