iOS 上的 Firebase 云消息传递无法正常工作

Firebase Cloud Messaging on iOS not working properly

我添加到我的项目 Firebase Cloud Messaging 以接收和发送推送通知。我遵循了 Google 中原始教程中的步骤。结果令人兴奋,我可以在我的设备上接收推送通知 - 我将它发布到 TestFlight - 出现问题

我意识到我需要创建不同的证书。 (???) 然后我从 Firebase 云消息传递中删除了我的密钥 (.p8) 并重新创建了它(也是开发)+ 我重新创建了相同的开发配置文件(我撤销了旧的),我重复了教程中的过程但是现在我什至无法在我的设备 上收到推送通知,在 TestFlight 上也无法收到推送通知。

谁能帮我解决这些问题?

  1. 我应该创建哪个 certificate/profile?现在,我已经创建了用于开发的 .p8 密钥和用于开发的配置文件(不再工作)
  2. 我应该更改我的代码吗?我发现某处我应该将 URL 从沙箱更改为产品,Firebase 会自动执行吗?设备令牌有问题吗?当我将 FCM 令牌复制/粘贴到控制台时,我什至无法收到测试通知。
  3. 是否可以从 Firebase 消息控制台发送静默推送通知? (我可以在 Firebase 控制台中设置所有必需的 headers 吗?)
  4. .p8 和 .p12 的区别?生产时可以使用 .p8 密钥吗?

请帮助我解决这个问题。 谢谢!

[更新][已解决] 完成 将 Firebase 中的团队 ID 更改为来自 Apple Developer 的相同团队 ID 后,我能够收到通知我的设备和所有 TestFlight 设备。

Firebase 与开发和生产无关。如果您使用两个不同的 firebase 应用程序,一个用于开发,另一个用于 production.If,在这种情况下,您只需为各自的环境更改 GoogleService-Info.plist。 以下是我正确实施 Firesbase 推送通知应遵循的步骤。

1) 转到您的苹果开发者帐户并为 APNS 创建一个新密钥。 (Reference)

2) 创建一个 firebase 项目并添加一个 iOS 应用程序,然后在您的应用程序设置中的 Cloud Messaging 选项卡中添加您在第一步中使用 KeyID 和 TeamID 创建的密钥。

3) 将 GoogleService-Info.plist 添加到项目的根目录,并从 Xcode 中的功能添加推送通知。

4) 然后在您的应用中初始化 firebase (Reference)

5) 添加代码以在应用程序启动时请求通知权限。

6) 最后通过这个方法得到fcmToken

func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String)

并从 Firesbase 向该令牌发送通知。

注意:对于配置文件,启用自动登录 Xcode 并且 Xcode 将自行执行签名过程。现在我们不需要手动创建配置文件。

在我们的例子中,在主项目设置中,团队 ID 被设置为团队名称,在更改它并使用正确的团队 ID 再次上传 APN 密钥后,它开始工作了,所以你可能想要加倍检查一下。

在我的例子中,这是错误的 APNs 身份验证密钥 我们已经将错误的文件上传到 firebase 控制台,一旦用正确的 APN 密钥替换,通知就像一个魅力。无需更改代码

确保您没有重命名授权密钥文件

就我而言,我已将授权密钥文件重命名为其他内容,这就是导致问题的原因。我尝试将其命名回默认格式 AuthKey_<KeyID>.p8 并且一切都开始工作了。