iOS15.1仅配置UNNotificationPresentationOptions的.sound选项时通知音不播放
iOS15 仅播放通知音不生效问题说明与解决方案
问题根因
该问题不是苹果官方永久禁止仅播放通知音的实现方式,属于iOS15专属的系统层面异常,该问题在iOS16及以上版本已经被官方修复,iOS14及更低版本也可正常运行。
可行解决方案
- 方案1:系统版本适配
针对不同系统版本做分支处理:- iOS14及更早、iOS16及更新版本:直接返回
[.sound]即可正常触发提示音 - iOS15版本:单独做兼容处理,使用
AudioServicesPlaySystemSound直接播放系统/自定义音效
- iOS14及更早、iOS16及更新版本:直接返回
- 方案2:iOS15兼容实现代码
修改原有willPresent代理方法的逻辑,iOS15下独立调用音效播放接口,示例代码如下:
import AudioToolbox func taskNotificationCenter(_ center: TaskNotificationCenterType, willPresent notification: UNNotificationType, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) { if #available(iOS 16.0, *) || #available(iOS 15.0, *) == false { completionHandler([.sound]) } else { // iOS15单独处理,1007为默认通知音效ID,也可替换为自定义音效对应的ID AudioServicesPlaySystemSound(1007) // 不返回任何展示选项,避免出现通知横幅、角标 completionHandler([]) } }
注:如果需要播放自定义音效,可将自定义音效文件注册为SystemSoundID后再调用播放接口。
- 方案3:低侵入折衷方案
如果不想引入独立的音效播放逻辑,也可以在iOS15下返回[.sound, .banner],同时设置通知内容的title、body为空字符串,此时通知横幅会一闪而过几乎无感知,也能正常播放通知音。
内容的提问来源于stack exchange,提问作者Luciano Perez
相关产品推荐
相关产品推荐

