You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS 16设备后台接收FCM通知无声音问题求助

解决iOS 16后台FCM通知无声音问题

1. 移除不必要的contentAvailable字段

你的APNS payload中设置了contentAvailable: true,这个字段用于静默通知(仅唤醒应用后台处理数据,不主动展示通知)。即便同时配置了alert和sound,iOS 16仍可能优先将其识别为静默通知,导致后台不播放声音。

如果你的需求只是展示带声音的通知,无需后台唤醒应用处理数据,直接移除该字段:

const message: Message = {
    apns: {
        headers: {
            "apns-priority": "10",
        },
        payload: {
            "aps": {
                "alert" : {
                    "title" : "Rise and Shine",
                    "body" : "Time to wake up! Get up and move!"
                },
                sound: "default"
            }
        }
    },
    data: {
        value: '850',
    },
    token: await getFCMToken()
}

若确实需要后台唤醒+通知展示,可在APNS headers中添加apns-mutable-content: 1,确保iOS正确识别为通知型消息:

apns: {
    headers: {
        "apns-priority": "10",
        "apns-mutable-content": "1"
    },
    payload: {
        "aps": {
            "alert" : {
                "title" : "Rise and Shine",
                "body" : "Time to wake up! Get up and move!"
            },
            contentAvailable: true,
            sound: "default"
        }
    }
}

2. 验证设备通知系统设置

即使前台通知正常,仍需确认设备端应用的通知配置:

  • 打开设置 > 你的应用 > 通知
  • 确保声音选项处于开启状态
  • 确认通知样式设置为横幅或提醒(而非“无”)

3. 检查sound字段格式

iOS 16中,使用系统默认声音时"default"是正确写法;若用自定义声音,需指定完整文件名(含扩展名,如"custom_sound.caf")。你的场景前台正常,此问题概率较低,但可快速验证格式是否正确。

4. 简化后台模式配置

你已开启Remote notifications后台模式,这是通知推送必需的。若无需后台数据拉取或处理,可关闭Background fetch和Background processing,避免不必要的系统逻辑干扰。

5. 确认FCM消息类型

当消息同时包含apns.payload(通知内容)和data字段时,FCM会发送通知+数据类型消息:

  • 前台:由UNUserNotificationCenterDelegate的willPresent处理,你已配置.sound,所以正常播放
  • 后台:通知由APNS直接展示,数据在用户点击后传递。若contentAvailable导致APNS识别为静默通知,就会跳过声音播放。

按上述步骤调整后,重新测试后台通知的声音播放。

内容的提问来源于stack exchange,提问作者Adrian Pascu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 10:26:19