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

Expo推送通知无声音:使用expo-notifications无系统提示音如何解决

通知无声音问题原因及解决方案

核心原因

绝大多数情况是以下几类配置错误导致:

  • Android通知通道创建后不可修改,前期测试生成的旧通道没有声音配置,后续修改代码不会更新已存在的通道参数
  • 推送请求载荷未携带sound参数,或者Android端未指定对应通知通道ID
  • 系统通知权限的声音开关未打开,或设备处于静音/免打扰/专注模式
  • iOS端未显式申请声音权限

分步修复方案

1. 清理旧的Android通知通道

完全卸载设备上已安装的测试应用,再重新安装运行,确保新的通道配置生效。Android系统通知通道一旦创建,后续哪怕修改代码参数也不会更新已有通道配置,必须卸载重装或者更换通道ID才能生效。
你的通道创建代码本身没有问题,importance设为MAX、sound设为'default'已经满足出声音的要求。如果不想卸载应用,可以把代码里的通道ID从'default'改成其他值比如'default_v2',同时后续推送请求里的channelId同步修改即可。

2. 配置推送请求的载荷参数

无论你使用Expo官方推送服务还是自研后端发送推送,都必须在请求里添加声音相关配置,否则默认不会播放提示音:

Expo Push服务请求示例

{
  "to": "你的Expo推送Token",
  "sound": "default",
  "title": "通知标题",
  "body": "通知内容",
  "android": {
    "channelId": "default"
  }
}

FCM(安卓自建推送)请求示例

{
  "android": {
    "notification": {
      "sound": "default",
      "channel_id": "default"
    }
  }
}

APNs(iOS自建推送)请求示例

{
  "aps": {
    "sound": "default",
    "alert": {
      "title": "通知标题",
      "body": "通知内容"
    }
  }
}

3. 补全权限申请配置

在申请通知权限的代码中显式指定需要声音权限,避免部分系统默认关闭声音权限:

const { status } = await Notifications.requestPermissionsAsync({
  ios: {
    allowAlert: true,
    allowSound: true,
    allowBadge: true,
  },
  android: {},
})

同时确认app.json中已添加安卓13+所需的通知权限:

{
  "expo": {
    "android": {
      "permissions": ["POST_NOTIFICATIONS"]
    }
  }
}

4. 验证系统设置

  • 检查设备是否处于静音、免打扰、专注模式,关闭后再测试
  • 进入系统设置的应用通知管理页,确认对应应用的通知声音开关处于打开状态

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 05:36:06