在 FCM(Firebase 云消息传递)中,在通知中包含令牌是不是安全?
Posted
技术标签:
【中文标题】在 FCM(Firebase 云消息传递)中,在通知中包含令牌是不是安全?【英文标题】:In FCM (Firebase cloud messaging), is it safe to include token in the notification?在 FCM(Firebase 云消息传递)中,在通知中包含令牌是否安全? 【发布时间】:2018-08-27 21:52:35 【问题描述】:使用 FCM 向 android 设备发送推送通知时,在通知正文中包含令牌是否安全? 这会以某种方式违反安全/隐私或 GDPR 吗?
在 firebase 文档 (https://firebase.google.com/docs/cloud-messaging/concept-options) 中,他们的示例在 通知:
"message":
"token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"notification":
"title":"Portugal vs. Denmark",
"body":"great match!"
我们可以这样做吗?
"message":
"token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"notification":
"token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"title":"Portugal vs. Denmark",
"body":"great match!"
如果在通知中包含令牌没有任何问题,我希望我可以在通知中包含令牌以供客户端检查以过滤接收来自过期令牌的通知(令牌并不总是立即失效。至少在GCM 不是)
注意:我这样做的原因是当用户卸载并重新安装应用程序时,旧令牌仍然可以使用。在 Firebase 的 cron 作业执行并删除旧令牌之前,仍然可以使用旧令牌。如果您有单独的服务器维护令牌,这将是一个问题。所以我希望我可以在通知中包含令牌以过滤无效通知并使我们的私人服务器上的旧令牌无效。
【问题讨论】:
【参考方案1】:在示例中,令牌是在消息中发送的,而不是在通知中发送的。通知也是消息的一部分。
消息被发送到 FCM 服务器,在该服务器中,使用令牌,它将知道向谁发送通知。
关于在通知中包含令牌,我不会那样做。
此外,移动设备已经拥有在设备向 FCM 注册时发送给它的令牌。 如果设备由于任何原因(例如卸载)没有注册,那么即使您将令牌添加到通知中,它也不会到达设备。
编辑我
您将无法以这种方式在通知中添加标记(作为附加属性)。
了解如何在 fcm 文档中形成 json
消息。如果有一个地方你可以设置它(我不建议这样做)作为data
的一部分。
不包括它的原因是没有理由这样做:
Token 不由您的应用管理,它由 FCM 服务器管理。您只需要在 Token 更改时更新您的服务器,在这种情况下,FCM api 通过触发应用程序中的回调 (onTokenRefresh()) 让您的应用程序知道。 执行此操作时,您会在共享首选项中保留令牌的副本。
在最后一点之后,应用程序已经拥有令牌。在每个通知中发送它,如果它到达移动设备,那是因为它仍然有效,所以你已经在共享偏好中拥有它。 另一方面,如果令牌无效,则不会收到消息,并且应用程序永远不会意识到这一点。当 FCM 服务器向应用程序提供新的 Token 时,一切都会恢复正常。在这种情况下,应用会收到回调通知,您的应用会替换共享首选项中的令牌并更新您的服务器。
【讨论】:
感谢您的回答,但我们是否有理由不应该或不应该避免在通知中包含令牌?我已经根据您的回答更新了我的问题。感谢您解释消息与通知! 如何将设备令牌存储在某个数据库中以定期向特定设备发送消息。这会对 GDPR/隐私有任何顾虑吗?每次从 firebase api 获取设备的令牌时,我都想存储设备的设备令牌。是否也可以获取先前的无效令牌以使用刷新的令牌更新数据库?我想这样做是为了在 ios 设备的服务器上创建一个“新消息”徽章推送通知。由于 iOS 不支持在后台获取 api 来发送带有徽章的本地通知。以上是关于在 FCM(Firebase 云消息传递)中,在通知中包含令牌是不是安全?的主要内容,如果未能解决你的问题,请参考以下文章
FCM(Firebase 云消息传递):Firebase 推送通知在 Firefox 中显示,但在 Chrome 中不显示
如何使用 Nuxt.js 实现 Firebase 云消息传递 (FCM)
IOS 应用程序中的 Firebase 云消息传递 (FCM) 无法正常工作