近日,多位 iOS 开发者向 Firebase 官方反馈了一个令人困惑的推送问题:在使用 Firebase Cloud Messaging(FCM)v1 API 时,若以 Firebase Installation ID(fid)作为推送目标,会持续收到 404 UNREGISTERED 错误响应;而改用完整 registration token 投递消息,一切正常。这一现象在开发者社区引发广泛讨论,并直接影响了依赖 fid 进行精细化推送策略的应用稳定性。

现象:同一设备,两个目标,两种结果

据多名开发者描述,其应用已正确集成 Firebase sdk,并成功获取了设备的 registration token 以及与之关联的 Firebase Installation ID(也称 FID)。当尝试使用 FCM v1 的 send 方法,将 token 字段设置为 fid 时,服务器返回 HTTP 404 状态码,错误信息为 UNREGISTERED。而如果使用标准的 registration token(通常是一长串由设备标识、项目信息等构成的字符串),则推送可达且设备正常收到通知。

更令人困惑的是,在 Android 平台上,使用 fid 作为目标却未出现类似问题。这意味着该 bug 具有明确的平台特异性,指向 iOS 端的 FCM v1 实现逻辑可能存在偏差。

背景:FID 与 Registration Token 的角色差异

要理解这一问题,首先需要厘清 fid 与 registration token 的区别。FID 是 Firebase Installation 的稳定标识符,由 Firebase SDK 自动生成,用于标识设备上的特定应用安装实例。它的生命周期较长,通常仅在应用卸载或重置 Firebase 实例时变化。而 registration token 是 FCM 为每个客户端实例生成的动态令牌,用于接收来自 FCM 服务器的消息推送。开发者通常通过 Messaging.messaging().token 异步获取。

FCM v1 API 的设计初衷是提供更灵活、更细粒度的推送目标选择。官方文档指出,token 字段既可以接受 registration token,也可以接受 fid。但实际测试表明,在 iOS 上这一兼容性并未完全实现。

影响范围:依赖 fid 的推送策略受阻

该问题对以下场景影响尤为严重:

  • 多设备同步推送:某些应用使用 fid 作为用户跨设备登录的唯一标识,在用户切换设备时向 fid 推送“同步”消息。若 fid 失效,则可能导致用户收不到重要同步通知。
  • 安装归因与统计:广告归因平台或数据分析服务常基于 fid 进行推送效果追踪。每当向 fid 推送被判定为未注册,都会造成归因数据偏差。
  • 批量推送优化:在大型推送系统中,开发者可能使用 fid 作为去重或分群键。若 fid 无法正常投递,则需回退到 registration token,增加处理复杂度。

有开发者指出,该问题在 iOS 14.5+ 及 Firebase iOS SDK 10.x 系列中均被复现,且与是否使用 APNs 密钥无关。

官方回应与临时解决方案

截至目前,Firebase 官方已在 GitHub Issues 中确认该问题,但尚未发布正式修复版本。官方工程师表示,iOS 端 FCM v1 的 fid 路由逻辑与 Android 端存在差异,根本原因在于 iOS 的推送令牌注册机制与 FID 的关联方式不同。

作为临时的解决方案,建议开发者:

  1. 始终使用 registration token 作为 FCM v1 token 字段的值。注册令牌可以可靠地定位到设备。
  2. 在服务端建立 fid 与 registration token 的映射表,在需要向 fid 推送时,先查询对应的 registration token 再投递。
  3. 监听 UNREGISTERED 错误,并在收到该响应时主动清理服务端失活的 fid 或 token 记录。

展望:等待 SDK 更新,但应调整设计习惯

这一问题看似是 API 实现的 bug,但也反映出一些值得开发者反思的设计惯性——过度依赖 fid 作为推送目标的风险。FID 本意是用于 Identify Installation,而非直接作为推送寻址标识。在 FCM v1 的演进过程中,苹果生态的隐私政策(如 App Tracking Transparency)也对设备标识的稳定性产生了冲击。

预计 Firebase 将在近期推出的 iOS SDK 14.0 或更高版本中修复该问题。但在此之前,开发者应当主动调整推送架构,以 registration token 为核心,并构建健壮的心跳与令牌刷新机制,确保推送不会因平台差异而断裂。

业内人士指出,FCM v1 的 fid 问题虽小,却揭示了跨平台推送底层逻辑的复杂性。在未来,Firebase 若能统一 iOS 与 Android 的令牌路由行为,将大幅降低开发者的适配成本。

(完)