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

iOS React Native应用后台接收远程通知时无法播放铃声求助

解决iOS后台/非活跃状态下React Native Sound播放音频失败问题

针对你遇到的前台正常、后台/非活跃状态下收远程通知无法播放铃声的问题,按以下步骤排查修复:

1. 配置正确的音频会话类别

iOS默认音频会话类别是SoloAmbient,后台会自动暂停音频。必须将类别设置为Playback才能支持后台播放:

import Sound from 'react-native-sound';

// 在应用启动时(比如App.js的useEffect或componentDidMount中)设置
Sound.setCategory('Playback', true); // 第二个参数允许与其他音频混音,按需调整

2. 确保远程通知是"可唤醒"类型

普通远程通知不会触发后台代码执行,必须在推送payload中添加content-available: 1,让iOS唤醒应用处理通知:

{
  "aps": {
    "alert": "新通知提醒",
    "content-available": 1,
    "sound": "" // 留空避免系统默认铃声干扰,用自定义音频播放
  }
}

3. 后台通知回调中激活音频会话

收到后台通知时,需要先激活音频会话再播放,避免会话被系统挂起:

如果用原生代码处理通知(AppDelegate.m):

#import <AVFoundation/AVFoundation.h>

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
    // 激活音频会话
    AVAudioSession *audioSession = [AVAudioSession sharedInstance];
    NSError *error = nil;
    [audioSession setCategory:AVAudioSessionCategoryPlayback error:&error];
    if (!error) {
        [audioSession activateSessionWithOptions:AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation error:&error];
    }

    // 调用React Native的播放逻辑或直接原生播放音频
    // ...

    completionHandler(UIBackgroundFetchResultNewData);
}

如果用React Native通知库(如react-native-push-notification),在后台回调中先执行会话激活逻辑,再播放音频。

4. 验证Xcode后台权限配置

不要仅手动修改info.plist,直接在Xcode中配置更可靠:

  • 打开项目的Signing & Capabilities标签
  • 添加Background Modes能力
  • 勾选Audio, AirPlay, and Picture in Picture和Remote notifications

5. 其他注意事项

  • 音频文件持久化:后台播放前确保音频文件已正确加载,若前台加载的实例被回收,需重新初始化Sound对象
  • 真实设备测试:模拟器对后台通知和音频的支持有限,必须用真机测试
  • 设备状态检查:确保设备未静音、音量足够,且未开启"专注模式"等限制音频的功能

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 17:28:29