Unity iOS端前台无法接收无通知栏的Firebase云消息问题
解决iOS前台无法接收FCM纯数据消息的问题
问题原因
iOS的APNS推送机制与Android存在差异:仅包含data字段、无notification字段的纯数据消息,在App前台运行时默认不会被APNS投递到App进程,必须显式配置content-available: 1标记,同时开启App的后台远程通知权限,才能触发Firebase的回调。
解决方案
1. 修改后端Firebase Functions的消息结构
在发送消息时添加iOS专属的APNS配置,强制APNS将数据消息投递到前台App:
const message={ data:{ code:code.toString(), data:undefined }, // 添加iOS APNS核心配置 apns: { payload: { aps: { contentAvailable: 1 // 告知APNS此消息可投递到前台App } }, // 设置正常优先级,避免高优先级被系统限制 headers: { "apns-priority": "5" } } } if(data!=null) { if(typeof data !=='string') { data=JSON.stringify(data); } message.data.data=data; } await messaging.sendToDevice(tokens,message). catch((err:any)=>{ error(err); return -1; });
2. 配置iOS项目的后台权限
在Xcode中为项目开启后台远程通知权限:
- 打开Xcode项目,进入
Signing & Capabilities标签页 - 点击
+ Capability,搜索并添加Background Modes - 勾选
Remote notifications选项
3. 确认Unity客户端初始化时机
确保Firebase消息回调的注册足够早,例如在Awake方法中调用Init(),避免因注册过晚错过消息:
void Awake() { // 尽早初始化FCM回调 Init(); }
验证步骤
- 重新部署修改后的Firebase Functions代码
- 在iOS设备上保持App前台运行状态
- 发送测试消息,检查
OnMessageReceived回调是否触发 - 查看Xcode控制台日志,确认无FCM相关投递错误
内容的提问来源于stack exchange,提问作者Артем Архаин
相关产品推荐
相关产品推荐

