首页 > 解决方案 > 在 FCM(Firebase 云消息传递)中,在通知中包含令牌是否安全?

问题描述

使用 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 中它是't)

注意:我这样做的原因是当用户卸载并重新安装应用程序时,旧令牌仍然可以使用。在 Firebase 的 cron 作业执行并删除旧令牌之前,仍然可以使用旧令牌。如果您有单独的服务器维护令牌,这将是一个问题。所以我希望我可以在通知中包含令牌以过滤无效通知并使我们的私人服务器上的旧令牌无效。

标签: androidfirebasegoogle-cloud-messagingfirebase-cloud-messagingtoken

解决方案


在示例中,令牌是在消息中发送的,而不是在通知中。通知也是消息的一部分。

消息被发送到 FCM 服务器,使用令牌,它将知道将通知发送给谁。

关于在通知中包含令牌,我不会那样做。

此外,移动设备已经拥有在设备注册 FCM 时发送给它的令牌。如果设备由于任何原因(例如卸载)没有注册,那么即使您将令牌添加到通知中,它也不会到达设备。

编辑我

您将无法以这种方式在通知中添加令牌(作为附加属性)。了解如何json在 fcm 文档中形成消息。如果有一个地方你可以设置它(我不建议这样做)作为data.

不包括它的原因是没有理由这样做:

Token 不由您的应用程序管理,它由 FCM 服务器管理。您只需要在 Token 更改时更新您的服务器,在这种情况下,FCM api 通过触发应用程序中的回调(onTokenRefresh())让您的应用程序知道。执行此操作时,您会在共享首选项中保留令牌的副本。

在最后一点之后,应用程序已经拥有令牌。在每个通知中发送它,如果它到达移动设备,那是因为它仍然有效,所以你已经在共享首选项中拥有它。另一方面,如果令牌无效,则不会收到消息,并且应用程序永远不会意识到这一点。当 FCM 服务器向应用程序提供新的 Token 时,一切都会恢复正常。在这种情况下,应用程序会收到回调通知,并且您的应用程序会替换共享首选项中的令牌并更新您的服务器。


推荐阅读