react-native-push-notification iOS端自定义通知音不播放问题咨询
核心问题原因
react-native-push-notification 的 createChannel 是Android专属API,你在这里配置的soundName完全不会被iOS端读取,这是配置失效的首要原因。iOS的通知音效需要在通知触发时单独指定参数。
排查&解决步骤
1. 通知触发时显式指定
sound参数无论本地通知还是远程推送,都要在通知payload中单独配置iOS端的音效字段:
本地通知示例:PushNotification.localNotification({ channelId: 1, // Android端用 title: "通知标题", message: "通知内容", sound: 'tone1.mp3', // iOS端必填,Android优先读通道配置 // 其余配置项 })远程推送需要在APNs的payload中添加
sound字段,值为tone1.mp3。2. 验证音效文件符合iOS要求
iOS对通知音效有强制限制,不符合要求会自动回退到系统默认音:
- 时长必须小于30秒
- 推荐格式为caf、wav、aiff,mp3格式存在小概率兼容性问题,可通过以下命令转换为caf格式:
afconvert -f caff -d LEI16@44100 -c 1 tone1.mp3 tone1.caf - 不要将音效文件存放在Assets.xcassets中,必须直接放在项目主Bundle根目录。
3. 校验XCode配置
- 点击音效文件,在右侧检查器的「Target Membership」栏确认已勾选你的主应用目标
- 确认Copy Bundle Resources中没有重复添加同一个音效文件
- 检查Build Settings中
STRIP_UNUSED_RESOURCES参数未开启,避免音效被当做无用资源剥离。
4. 卸载应用清除缓存测试
iOS会缓存通知相关的系统配置,修改音效配置后必须完全卸载旧应用,重启设备后再重新安装,避免缓存导致配置不生效。
5. 升级库版本解决已知bug
7.3.2版本存在iOS端
sound参数解析异常的已知问题,可升级到8.1.1及以上的稳定版本,升级后按照官方文档重新适配iOS通知权限申请逻辑即可。
内容的提问来源于stack exchange,提问作者Faye
相关产品推荐
相关产品推荐

