我正在尝试通过 Google 云功能发送 iOS 推送通知,但它返回错误
The provided registration token is not registered
。但我已经通过调试我的应用程序进行了检查,并且 FCM 注册令牌是正确的。之后,我尝试通过提供 FCM 令牌通过 Firebase 控制台向单个设备发送推送通知,但由于 Unregistered registration token
而失败。由于设备 FCM 令牌没有问题,这是怎么发生的?
我认为这应该是一些粗心的错误,你应该确定以下几点:
代币与
-[FIRMessagingDelegate messaging:(FIRMessaging *)messaging didReceiveRegistrationToken:(NSString *)fcmToken]
GoogleService-Info.plist
是通过您的 Firebase 推送控制台从同一帐户下载的。已更新至最新的 Firebase SDK。
来自 Google Firebase 文档 是对您的错误的一些描述
The provided registration token is not registered
。
提供的注册令牌未注册。之前有效的 注册令牌可能因多种原因而被取消注册, 包括:
- 客户端应用程序已从 FCM 取消注册。
- 客户端应用程序已自动注销。如果用户卸载应用程序,或者在 iOS 上,如果 APNS 反馈 服务报告 APNS 令牌无效。
- 注册令牌已过期。例如,Google 可能决定刷新注册令牌,或者 iOS 的 APNS 令牌可能已过期 设备。
- 客户端应用程序已更新,但新版本未配置为接收消息。对于所有这些情况,请删除此注册令牌 并停止使用它发送消息。
我也遇到类似的错误。像这样的东西。
FirebaseMessagingError: The provided registration token is not registered. A previously valid registration token can be unregistered for a variety of reasons. See the error documentation for more details. Remove this registration token and stop using it to send messages.
所以我只是生成了一个新令牌并将其替换为旧令牌。
它开始工作正常。
我遇到了这个问题,结果发现我们的服务器针对特定用例发送了错误的通知负载。 发生这种情况时,Firebase 将发送返回代码 400 并取消注册令牌。
我们的解决方案是修复发送错误有效负载的用例。 我们的有效负载中的错误是由于“DeviceTokenNotForTopic”造成的。 在陷入这种糟糕的状态之前,请务必检查您在发布通知时是否收到错误。
我在已发布的构建 iOS 设备上也遇到了类似的错误。
The provided registration token is not registered. A previously valid registration token can be unregistered for a variety of reasons. See the error documentation for more details. Remove this registration token and stop using it to send messages.
我通过在 firebase 消息传递上重新上传正确的 .p12 证书来修复它
我收到了来自 Firebase 支持团队的邮件:
“就您的情况而言,请注意,您最多只能上传 2 个 APN 证书。一个用于开发,另一个用于生产。由于其中一个 APN 证书无效,您应该删除不正确的一个。要能够删除 APN证书,用户必须具有“所有者”权限/角色经检查,您没有足够的权限进行此更改,我建议您联系项目所有者以请求必要的权限或删除 APN 证书。
补充一下,从 I/O 2017 开始,开发人员可以为其 APN 使用身份验证密钥或证书。我们建议您使用身份验证密钥,因为它们更易于配置并且不会过期。如果同时上传了证书和身份验证密钥,我们的服务器将使用身份验证密钥。
我们的系统无法像验证证书那样验证身份验证密钥。我们没有办法在不发送实际消息的情况下验证 APN 是否会接受它们。使用证书,我们在接受 APN 之前打开与 APN 的连接,如果它们是无效的 APN,则拒绝它们,我们可以将错误返回给用户。”
我们尝试在 iOS 模拟器而不是实际设备上对其进行测试。当我们切换到在真实设备上进行测试时,我们立即收到了通知。