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 云消息传递的 AbstractMethodError