如何调试Flutter使用firebase_messaging时iOS收不到推送通知的问题
iOS端firebase_messaging无法接收通知排查方案
APNs token格式问题说明
iOS端获取的纯大写字母+数字的APNs token是正常格式,属于苹果规范的十六进制APNs令牌,和安卓端的格式存在差异属于正常现象,不需要针对该格式做额外调整。
常见遗漏配置检查项
- 必须使用iOS真机测试推送,模拟器默认不支持远程推送接收
- 确认Xcode中Signing & Capabilities配置的开发者Team,与生成APNs密钥、App ID的苹果开发者账号Team完全一致
- 确认Firebase控制台iOS应用配置的Bundle ID与Xcode项目的Bundle ID完全匹配,大小写完全一致
- 用Debug模式测试时,Firebase控制台发送测试通知必须选择开发APNs环境,若选择生产环境会导致Debug包无法收到通知
- 确认推送载荷格式符合iOS要求:普通通知必须携带
alert字段,静默通知必须携带content-available: 1配置,使用旧版HTTP API发送时建议将优先级设为10 - 若项目中手动实现了
UNUserNotificationCenterDelegate相关方法,需保证调用了父类的对应回调方法,避免swizzle逻辑失效
调试步骤
- 在Xcode的Scheme设置中,Arguments Passed On Launch 新增两个参数:
-FIRDebugEnabled、-APNSDebugEnabled,运行后查看详细的推送日志,确认APNs token是否正常上报到Firebase、推送到达时是否触发了系统回调 - 查看curl请求返回的完整响应体,确认
success字段为1,没有invalid_apns_token、mismatch_credential之类的错误提示,可定位是凭证配置问题还是链路问题 - 直接使用苹果APNs服务接口向获取到的iOS APNs token发送测试推送,如果无法收到说明是苹果开发者账号/证书相关配置问题,可收到则说明问题出在Firebase链路
- 打印Firebase Messaging生成的FCM token,使用该token在Firebase控制台发测试通知,排除APNs token和FCM token绑定异常的问题
- 检查手机系统设置中当前App的通知权限是否正常开启,横幅、通知中心等展示权限是否打开,iOS15+设备需确认专注模式未拦截当前App的通知
内容的提问来源于stack exchange,提问作者Exprove
相关产品推荐
相关产品推荐

