FCM 令牌 - 我应该何时将其存储/保存在我的数据库中?

Posted

技术标签:

【中文标题】FCM 令牌 - 我应该何时将其存储/保存在我的数据库中?【英文标题】:FCM Token - When should I store/save it on my DB? 【发布时间】:2021-01-31 16:29:18 【问题描述】:

我不确定什么是合适的 FCM 令牌处理机制,所以我在这里写下我们的流程只是为了获得一些验证或改进建议:

    在客户端登录时获取 FCM 令牌 (Flutter) 在我们的数据库中保存 FCM 令牌(使用我们的 REST API) 注销时删除 FCM 令牌(使用我们的 REST API)

Q1:我们是否应该比仅在登录时更频繁地获取 FCM 令牌? AFAIK,FCM 令牌仅在应用重新安装、清除缓存等时发生变化。这是否还包括来自 PlayStore 的应用更新?在这种情况下,我们是否应该在每次应用启动时保存 FCM 令牌,因为用户将在应用更新后保持登录状态,因此我们不会触发保存 FCM 调用。

Q2:我是否提到了从我们的数据库中删除 FCM 令牌的正确方法?我们不希望用户在退出后继续收到通知。

Q3:一个附加的想法是将device_idfcm_token一起发送到服务器,以便服务器删除之前为该device_id保存的所有FCM令牌。如果用户在未注销的情况下卸载应用程序(这意味着 DELETE fcm_token 调用从未通过),这对于在 DB 上没有无用的令牌很有用。

【问题讨论】:

【参考方案1】:

FCM 令牌会在您无法控制的条件下刷新,而且这些条件甚至会随着时间而改变。要正确处理令牌更新,您需要同时实现 initially getting the token 和 monitoring for token updates。

请注意,FCM 令牌不与用户关联。如果您想将它们与用户相关联,这很好,但在这种情况下,维护关联取决于您的应用程序代码。例如,这包括在用户注销时从数据库中删除令牌,就像您在第 3 步中所做的那样。?

为了保持您的令牌注册表清洁,您确实可以按照您的意愿主动执行此操作,或者如下所示被动执行此操作:https://github.com/firebase/functions-samples/blob/master/fcm-notifications/functions/index.js#L76-L88

【讨论】:

【参考方案2】:

嗨,Rohan,您应该使用以下逻辑在服务器上保存令牌。

第一步: 只要您在回调中获得令牌,无论是新的还是相同的,都会尝试将其保存在本地存储中。

第二步: 调用您的 REST API 以将其保存到您的服务器。如果您想与令牌一起发送唯一的用户标识符,这取决于您。

第三步: 很明显,您会收到很多时间的令牌回调,因此您可以检查本地存储中是否有类似的令牌,这意味着您在服务器上有令牌,因此没有必要调用 REST API。

第 4 步:现在您的应用可以将事件发送回服务器并基于它触发向用户推送通知。

第 5 步:您可以根据 uniqye 用户标识符添加/更新用户令牌。在某些情况下,用户可以是访客用户,因此您的应用应生成访客用户 ID 并将其与令牌链接。

保持安全。

【讨论】:

以上是关于FCM 令牌 - 我应该何时将其存储/保存在我的数据库中?的主要内容,如果未能解决你的问题,请参考以下文章

注册令牌不是有效的 FCM 注册令牌

通过 FCM 发送推送通知时何时使用 iOS 设备令牌?

如何检测真正的 iOS/APNS 推送令牌何时向 Firebase Cloud Messaging (FCM) 注册?

我应该在哪里保存客户端的 JWT 以供将来请求?

如何保护刷新令牌?

FCM 中的令牌更新