Flutter / FCM 通知未到达 Codemagic iOS 构建

Flutter / FCM notifications not arriving on Codemagic iOS build

我正在尝试为 Android 和 iOS 构建一个 Flutter 应用程序。我一直在使用 Firestore Cloud Messaging (FCM) 实现推送通知,当我在模拟器 (Android) 或连​​接的物理设备上进行测试时,它适用于 Android 和 iOS设备(iOS)。

但是,当我为客户端构建应用程序进行测试时(使用 Codemagic),推送通知在 iOS 上不起作用(它在 Android 上起作用)。如果它适用于我的开发环境但不适用于 Codemagic,这意味着除了 Codemagic 的构建之外所有配置都正确,对吗??

我认为除了连接苹果开发者帐户外,Codemagic 上不需要进行额外的配置。但是,如果我在连接帐户时犯了一个错误,那么当我构建我想的应用程序时,团队就不会出现。

此外,当我尝试使用 iphone 生成的 FCM 令牌通过 Postman 发送推送通知时,它 returns“NotRegistered”。

那我做错了什么?

如有任何帮助,我们将不胜感激。

谢谢。

对于 iOS,应用程序标识符需要生产和开发证书。如果它只有开发证书,它只能在开发中工作。您是为客户提供分发版本还是开发版本?

以防有人遇到同样的问题。我只是通过不使用 Codemagic 进行 iOS 部署来解决这个问题。我改为遵循本指南:https://flutter.dev/docs/deployment/ios 并在 Apple 的 TestFlight 上部署了 iOS 构建。

从那里安装应用程序后,推送通知在 iOS 上运行良好。

我会尝试检查 Codemagic 在构建过程中使用的配置文件。如果您已经尝试在 Codemagic 上使用自动代码签名,并且稍后添加了 FCM,那么您可能必须删除 Codemagic 已经创建的配置文件,以强制 Codemagic 创建一个启用推送通知的新配置文件(一旦它们在xcode 能力)。在任何情况下,您都可以在 Apple Developer Portal 上检查生成的配置文件,并检查是否为生成的配置文件启用了推送通知。

我有点晚了,但也许有人仍然面临这个问题并正在寻找解决方案。在我想发送到 IOS 设备的每条消息中,我也收到了 NotRegistered 消息。我的问题是,我创建的 FCM IOS 密钥是沙盒密钥。 APNS 使用两个服务器来推送通知——SandBox 和 Production。当您在开发期间在 iOS 设备上构建应用程序的调试版本时,它会连接到 SandBox 服务器并从中检索令牌。创建应用程序的发布版本后,它将连接到生产服务器。如果您正在使用调试版本测试应用程序,那么要测试通知,您需要确保通过沙箱对其进行测试。收到令牌后,您可以使用以下 Google API 将 APNS 令牌转换为 FCM 令牌:

HTTP POST : https://iid.googleapis.com/iid/v1:batchImport HTTP HEADERS: Content-Type: application/json Authorization : key=YOUR_SERVER_KEY

正文: { "application": "com.company.app", (YOUR_APP_PACKAGE) "sandbox":true, "apns_tokens":["7c6811bfa1e89c739c5862122aa7ab68fc4972dea7372242f74276a5326f...."] }