You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Expo开发安卓推送通知仅振动,无声音及弹窗问题求助

解决Expo Android推送通知仅振动、无声音无弹窗的问题

针对你遇到的问题,结合你的代码和环境(Android 9、Expo SDK 37、Laravel服务端),下面是几个排查和解决的关键点:

1. 修正Android通知频道的配置

你已经创建了通知频道,但有几个细节需要调整:

  • priority 参数在Expo的createChannelAndroidAsync中,正确取值应为数字而非字符串:max对应数字2,字符串类型的priority可能不生效,导致通知优先级不足无法弹出。
  • 建议将sound参数指定为default(系统默认通知声),部分设备对布尔值的支持不够稳定;同时新增importance参数,这是Android 8.0+控制通知是否弹出的核心配置。

修正后的客户端频道创建代码:

if (Platform.OS === 'android') {
  await Notifications.createChannelAndroidAsync('notification-sound-channel', {
    name: 'Notification Sound Channel',
    sound: 'default', // 使用系统默认通知声,也可指定自定义音频文件
    priority: 2, // 对应max优先级,确保通知能弹出横幅
    vibrate: [0, 250, 250, 250],
    importance: Notifications.AndroidImportance.MAX, // 强制通知弹出横幅
  });
}

2. 完善服务端通知Payload

你的服务端代码已指定channelId,但还需补充以下配置:

  • 明确设置sound字段为default,避免仅依赖频道配置导致声音不触发
  • android字段中重复指定channelIdpriority,确保通知优先级足够

修正后的Laravel服务端代码:

$notification = [
  'title' => 'test title',
  'body' => 'test body',
  'channelId' => 'notification-sound-channel',
  'sound' => 'default', // 明确指定通知声音
  'android' => [
    'priority' => 'high', // 提升通知优先级
    'channelId' => 'notification-sound-channel', // 再次绑定频道,避免配置遗漏
  ],
];

3. 检查设备的应用通知权限

即使代码中请求了NOTIFICATIONS权限,Android 9设备仍需手动确认细分权限:

  • 打开设备「设置」→「应用和通知」→ 找到你的应用 →「通知」
  • 确保「允许通知」开启,同时对应频道(Notification Sound Channel)下的「声音」「弹窗通知」都已启用

部分场景下,用户仅授予了基础通知权限,但频道的声音和弹窗权限默认处于关闭状态。

4. 验证Expo SDK版本兼容性

你提到的expo版本 "^37.0.8"SDK版本27存在版本冲突:Expo SDK 37对应的expo包版本就是37.x,而SDK27是非常老旧的版本(对应expo 27.x)。建议统一项目的SDK版本,优先使用稳定的37.x版本,避免版本不兼容导致的通知异常。

测试验证

修改配置后,重启Expo项目或重新打包安装应用,再用Expo推送工具测试:

  • 确认推送Payload包含正确的channelIdsound字段
  • 若问题仍存在,可尝试删除应用后重新安装,确保新的通知频道被正确创建

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

火山引擎 最新活动