FCM推送通知接收时无法唤醒iOS休眠设备问题咨询
解决iOS设备休眠锁屏时FCM通知无法唤醒设备的问题
这个问题我之前帮不少开发者排查过,核心原因是FCM消息的APNs优先级配置不正确,或者通知类型是静默通知(不会触发设备唤醒)。下面给你一步步的解决方案:
1. 必须设置APNs高优先级(apns-priority: 10)
iOS的APNs只有高优先级(10)的通知才能唤醒休眠中的设备,低优先级(5)的通知会被延迟投递,且不会触发屏幕唤醒。在Firebase Cloud Functions发送FCM消息时,你需要显式配置APNs的优先级:
在构造消息时,添加apns字段,设置headers里的apns-priority为10,同时确保aps payload包含可见的通知内容:
const functions = require("firebase-functions"); const admin = require("firebase-admin"); admin.initializeApp(); exports.sendTargetedNotification = functions.https.onRequest(async (req, res) => { const targetDeviceToken = req.body.deviceToken; const message = { token: targetDeviceToken, notification: { title: "新通知提醒", body: "你有一条未读消息" }, apns: { headers: { "apns-priority": "10" // 关键:高优先级才能唤醒休眠设备 }, payload: { aps: { alert: { title: "新通知提醒", body: "你有一条未读消息" }, sound: "default" // 可选,但添加声音能提升唤醒的可靠性 } } } }; try { const sendResult = await admin.messaging().send(message); res.status(200).send(`通知发送成功: ${sendResult}`); } catch (error) { res.status(500).send(`发送失败: ${error.message}`); } });
2. 避免使用静默通知
如果你的通知只设置了content-available: 1(用于后台数据同步),这类静默通知是不会唤醒设备屏幕的——它们的设计目的就是在后台悄悄更新,不打扰用户。如果需要唤醒设备,必须包含alert字段(标题/内容),确保是可见通知。
3. 检查iOS设备的通知权限与系统设置
- 确认用户已经给应用授予了「允许通知」权限,且开启了「在锁定屏幕上显示」选项;
- 检查设备是否开启了「勿扰模式」,勿扰模式下所有通知都不会唤醒设备;
- 确保设备没有开启「低电量模式」,部分设备在低电量模式下会限制通知唤醒行为。
4. 验证APNs证书配置
如果是发布到App Store的正式版本应用,要确保Firebase控制台中配置的是生产环境的APNs证书;测试版本对应沙盒证书。证书不匹配可能导致通知投递行为异常。
按照上面的步骤调整后,休眠中的iOS设备应该就能被FCM通知正常唤醒了。
内容的提问来源于stack exchange,提问作者Shahin Firouzbakht
相关产品推荐
相关产品推荐

