Flutter应用iOS端FCM通知失效,Android端正常工作求助
iOS Flutter FCM推送无响应&服务端报错排查方案
核心问题定位
你遇到的Request contains an invalid argument和Requested entity was not found,大概率是iOS设备令牌(token)无效或者FCM与APNs的配置链路未打通,结合你已完成基础配置,以下是Flutter侧可操作的排查修复步骤:
分步修复方案
1. 验证iOS设备令牌有效性
- iOS模拟器默认不支持APNs推送,必须使用真机测试(iOS 14+模拟器可手动开启「Push Notifications」权限,但真机测试更可靠)。
- 在Flutter代码中主动获取并打印FCM令牌,确认令牌非空:
FirebaseMessaging.instance.getToken().then((token) { print("FCM Token: $token"); }); - 若令牌为空,检查
GoogleService-Info.plist的CLIENT_ID、GCM_SENDER_ID等字段是否与Firebase控制台完全一致。
2. 补全iOS推送权限配置
- 在
ios/Runner/Info.plist中添加权限描述(iOS 10+强制要求):<key>NSUserNotificationUsageDescription</key> <string>需要推送通知提醒您最新消息</string> <key>NSRemoteNotificationUsageDescription</key> <string>需要远程推送通知提醒您最新消息</string> - 在Flutter代码中主动请求推送权限:
await FirebaseMessaging.instance.requestPermission( alert: true, badge: true, sound: true, );
3. 修正服务端请求参数
invalid argument通常是请求体格式错误,确保服务端请求的token为iOS设备的有效FCM令牌,且notification字段符合APNs要求:
正确请求体示例:{ "token": "你的iOS设备FCM令牌", "notification": { "title": "测试推送", "body": "这是一条FCM测试通知" }, "apns": { "payload": { "aps": { "sound": "default" } } } }Requested entity was not found多因之前的无效令牌被FCM标记,更换新获取的有效令牌重试即可。
4. 检查Flutter FCM插件配置
- 确保
pubspec.yaml中firebase_messaging为最新稳定版,执行flutter pub upgrade firebase_messaging更新。 - 验证
ios/Podfile中platform :ios, '13.0'(FCM最低要求iOS 13),且pod 'Firebase/Messaging'已正确集成。
5. 重新校验APNs密钥配置
- 回到Firebase控制台,确认:
- APNs授权密钥是**推送类型(Push Notification)**的专用密钥
- Key ID和Team ID与Apple开发者后台完全匹配,无拼写或空格错误
- 密钥未过期,且已关联到当前App ID
最终验证流程
- 卸载iOS设备上的App,执行
flutter clean清理项目缓存 - 重新构建并安装App,确认控制台打印有效FCM令牌
- 使用该令牌重新发送服务端请求,观察设备推送接收情况
内容的提问来源于stack exchange,提问作者Freddy
相关产品推荐
相关产品推荐

