Flutter / FCM 通知未到达 Codemagic iOS 版本
Posted
技术标签:
【中文标题】Flutter / FCM 通知未到达 Codemagic iOS 版本【英文标题】:Flutter / FCM notifications not arriving on Codemagic iOS build 【发布时间】:2021-05-11 01:40:09 【问题描述】:我正在尝试为 android 和 ios 构建一个 Flutter 应用程序。我一直在使用 Firestore Cloud Messaging (FCM) 实现推送通知,当我在模拟器 (Android) 或连接的物理设备 (iOS) 上进行测试时,它适用于 Android 和 iOS。
但是,当我构建应用程序供客户端测试(使用 Codemagic)时,推送通知在 iOS 上不起作用(在 Android 上起作用)。如果它适用于我的开发环境但不适用于 Codemagic,这意味着除了 Codemagic 的构建之外,一切都已正确配置,对吧??
我认为除了连接苹果开发者账号外,Codemagic 上不需要做额外的配置。但是,如果我在连接帐户时犯了错误,那么我想在我构建应用程序时团队就不会出现。
另外,当我尝试使用 iphone 生成的 FCM 令牌通过 Postman 发送推送通知时,它返回“NotRegistered”。
那我做错了什么?
请,任何帮助将不胜感激。
谢谢。
【问题讨论】:
【参考方案1】:我会尝试检查 Codemagic 在构建期间使用的配置文件。如果您已经尝试在 Codemagic 上使用自动代码签名,并且稍后添加了 FCM,那么您可能必须删除 Codemagic 已经创建的配置文件,以强制 Codemagic 创建一个启用推送通知的新配置文件(一旦在xcode 功能)。在任何情况下,您都可以在 Apple Developer Portal 上查看生成的配置文件,并检查是否为生成的配置文件启用了推送通知。
【讨论】:
是的,我确实检查了 Codemagic 生成的配置文件和证书,并且它们已正确配置了推送通知。我在设置 FCM 并在本地环境中测试(并成功)之后设置了 Codemagic,所以我猜它应该可以工作。无论如何,我已经通过使用 Apple TestFlight 解决了这个问题......如果你问我,问题一定是 Codemagic 而不是我的配置。不过还是谢谢!【参考方案2】:对于 iOS,应用程序标识符需要生产和开发证书。如果它只有开发证书,它只会在开发中工作。您是为客户提供分发版本还是开发版本?
【讨论】:
感谢您的回答。我给它一个开发版本。我还将配置文件设置为处于开发阶段,所以我认为我不需要生产证书,除非我这样做? 有很多事情要检查。 iOS 用户是否已授予接收推送通知的权限?给Apple Notification Documentation 一个评论。它会给你一些检查的想法。 这是另一个链接,可能对Adding push notifications to iOS flutter apps有帮助。 我没有提供太多信息的原因是因为通知正在我的本地环境中工作(当我在我的物理手机上运行颤振时)。所以我知道 FCM 已正确连接到 APN。我只是想不通为什么它不能与 Codemagic 构建一起使用。不过还是谢谢你的帮助!【参考方案3】:如果有人遇到同样的问题。我通过不使用 Codemagic 进行 iOS 部署解决了这个问题。我改为遵循本指南:https://flutter.dev/docs/deployment/ios 并在 Apple 的 TestFlight 上部署了 iOS 版本。
从那里安装应用后,推送通知在 iOS 上运行良好。
【讨论】:
【参考方案4】:我有点晚了,但也许有人仍然面临这个问题并正在寻找解决方案。在我想发送到我的 IOS 设备的每条消息上,我也得到了 NotRegistered。我的问题是,我创建的 FCM IOS 密钥是沙盒密钥。 APNS 使用两台服务器来推送通知——沙盒和生产。当您在开发期间在 iOS 设备上构建应用程序的调试版本时,它会连接到沙盒服务器并从中检索令牌。创建应用程序的发布版本后,它将连接到生产服务器。如果您正在使用调试版本测试应用程序,那么要测试通知,您需要确保通过沙箱对其进行测试。收到令牌后,您可以使用以下 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...."]
【讨论】:
以上是关于Flutter / FCM 通知未到达 Codemagic iOS 版本的主要内容,如果未能解决你的问题,请参考以下文章
Flutter 和 FCM(Firebase 云消息传递)onMessage、onResume 和 onLaunch 在单击通知时未触发(包:firebase_messaging 7.0.0)