Firebase 云消息传递 - GCM 规范 ID 是不是仍然需要?

Posted

技术标签:

【中文标题】Firebase 云消息传递 - GCM 规范 ID 是不是仍然需要?【英文标题】:Firebase Cloud Messaging - Are GCM canonical IDs still necessary?Firebase 云消息传递 - GCM 规范 ID 是否仍然需要? 【发布时间】:2017-01-17 00:42:28 【问题描述】:

我一直在阅读 GCM 中的规范 ID 以及它们如何帮助纠正发送重复推送通知并确保安全性。但是现在有了 Firebase Cloud Messaging (FCM),这个问题还存在吗?

我的注册部分现在已经从开发者那里拿走了,我们只是等待令牌刷新如下:

    public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService 

    @Override
    public void onTokenRefresh() 
        // Get updated registration ID
        String refreshedToken = FirebaseInstanceId.getInstance().getToken();
        Logger.d("Refreshed FCM token: " + refreshedToken);
    

有关规范 ID 的一些信息可以在 here 找到。

【问题讨论】:

【参考方案1】:

更新

我最近重新审视了有关规范 ID 的这个主题,并得出以下结论。

在 FCM 中,由于 Instance ID service 的工作方式,似乎不再使用规范 ID(或至少极少使用)。简而言之,该服务的工作原理是每个应用实例只有一个有效令牌。

如果旧令牌过期(无论出于何种原因),FCM 会触发一个 tokenRefresh 事件,您将在该事件中获得一个新的注册令牌,并且您还必须相应地处理它(在 onTokenRefresh() 中)。


简短的回答,是的。这仍然是必要的。

onTokenRefresh() 方法预计会在令牌实际刷新时触发。从那里,开发者有责任将注册令牌发送到应用服务器。

但是在您无法获得新注册令牌的情况下(例如,忘记保存、删除并且只有以前的注册令牌等),这可能会导致您(开发人员)向本应不再有效的注册令牌发送。这就是规范 ID 发挥作用的时候。

我想您可以将规范 ID 视为另一种安全措施,以便开发人员仍然可以获得有效的注册令牌。 FCM 文档here 中提到了有关规范 ID(如何处理和填充)的详细信息。

【讨论】:

Firebase Admin SDK for JAVA 无法获取规范 ID。 ref:firebase.google.com/docs/cloud-messaging/send-message,这种情况怎么办? @binaryKarmic - 就像我在答案更新中提到的那样,甚至不再需要它。如果由于某种原因您最终到达了需要跟踪它的地方,那么这本身就是一个问题。我建议联系 Firebase 支持。

以上是关于Firebase 云消息传递 - GCM 规范 ID 是不是仍然需要?的主要内容,如果未能解决你的问题,请参考以下文章

Firebase 云消息传递是免费的吗?

将GCM令牌用于FCM中的推送消息

Firebase 云消息传递的 AbstractMethodError

如何使用 Firebase 云消息传递和 Liferay 推送通知

Firebase 通知和云消息传递 [重复]

在哪里可以找到 Firebase 云消息传递的 API KEY?