【发布时间】:2021-05-17 01:29:23
【问题描述】:
我想找到一种可持续的解决方案来存储用于推送通知的 FCM 令牌。我正在将 React Native 与 Firebase 一起使用。
要求是:
- 基于用户的应用程序
- 支持每位用户多台设备
- 任何时候都没有存储过时的令牌。
我目前的做法是:
维护一个带有列的表user_devices:
- user_id,
- device_uuid
- fcm_token
保持对 fcm_token 和 device_uuid 的唯一性约束。
关键事件,包括但不限于:
- 应用程序启动
- 登录
- onTokenRefresh
将以下内容发送到后端:
- device unique id
- FCM 注册令牌
- 用户 ID,如果有(通过身份验证令牌完成)
然后后端使用上述值更新一行。如果设备 uuid 存在,这意味着我们会覆盖该设备 uuid 的令牌(可能还有 user_id)。
上述方法存在缺陷,因为:
- device unique id 可以随时更改(设备重置、更新、应用重新安装等...)
- 注册令牌可以随时更改
换句话说,表最终存储了许多过时的令牌,应用程序后端向这些过时的令牌发送通知。
此外,“设备”前端页面(向用户显示他们的注册设备并从上表中读取)显示了许多重复的设备,这些设备实际上代表相同的设备但具有不同的设备 uuid。
一个缓解步骤可以是定期向存储在带有dry_run=true 的表中的所有令牌发送通知。然后,删除带有发生错误的标记的行。这很糟糕,因为这意味着在一段时间内,表中的令牌是陈旧的。
我已经在线扫描了多个资源,包括 FCM 文档,但没有提及在实际应用程序中存储和维护这些令牌。有什么建议的方法吗?
【问题讨论】:
标签: react-native push-notification firebase-cloud-messaging