RN升级至0.54+iOS11.3后PushNotificationIOS推送无声音问题咨询
我之前也碰到过类似的版本升级后推送提示音失效的情况,结合你的描述,给你几个实用的排查和解决方向:
确认推送Payload的sound字段配置
iOS 11+ 和 React Native 0.50+ 版本对推送 payload 的要求更严格了。即使之前省略sound字段能默认播放提示音,升级后可能需要显式指定。确保你的推送 payload 里包含"sound": "default"(使用系统默认提示音);如果是自定义音效,要确认音效文件已正确添加到Xcode项目中,且路径填写无误。另外要注意:如果 payload 包含"content-available": 1(静默推送标记),系统默认不会播放提示音,得确认你的推送不属于这种类型。重新检查通知权限设置
虽然你能接收推送,但权限设置可能因为RN版本升级出现异常。建议在应用初始化时重新请求完整的通知权限:PushNotificationIOS.requestPermissions({ alert: true, sound: true, badge: true });同时去iPhone的「设置-通知-你的应用」里,确认「声音」选项是开启状态,有时候权限请求后用户可能不小心关闭了。
检查Xcode项目的通知相关配置
RN版本升级过程中,Xcode项目的配置可能被覆盖:- 确认
Info.plist中UIBackgroundModes包含remote-notification; - 打开Xcode的Capabilities面板,确保
Push Notifications是开启状态; - 如果使用了自定义通知分类(category),要确保分类配置中指定了对应的sound属性。
- 确认
分场景测试推送行为
分别测试应用在前台、后台、完全关闭三种状态下的推送:- 如果只有前台无提示音:RN的PushNotificationIOS默认在前台接收通知时不会自动播放提示音,你可以手动调用React Native的
Audio模块播放默认音效; - 如果后台和关闭状态都无提示音:重点排查payload的sound字段和系统权限设置。
- 如果只有前台无提示音:RN的PushNotificationIOS默认在前台接收通知时不会自动播放提示音,你可以手动调用React Native的
查阅RN版本变更日志
React Native 0.48到0.54之间,PushNotificationIOS模块有不少适配iOS 11的更新,部分版本存在sound字段解析的bug。比如0.50+版本中,必须显式传递sound字段才会触发提示音,之前的默认行为被修改了。
内容的提问来源于stack exchange,提问作者jasonsbless

