UNNotificationRequest 仅在 iPhone 解锁时播放自定义声音

Posted

技术标签:

【中文标题】UNNotificationRequest 仅在 iPhone 解锁时播放自定义声音【英文标题】:UNNotificationRequest plays custom sound only when iPhone is unlocked 【发布时间】:2018-02-28 01:26:48 【问题描述】:

我的应用正在下载一个 .wav 文件并将其移动到库/声音,然后通过 UNNotificationRequest 使用该声音的文件名安排本地通知。此请求按预期发送通知,但我添加的自定义声音在手机解锁时大声播放,而不是在通知发送到手机的锁定屏幕时播放。但是,如果我使用UNNotificationSound.default() 而不是我的自定义声音,则默认推送声音将在锁定屏幕和设备解锁时播放。任何人有任何想法可能导致这个问题?我的代码很简单:

let soundName = "demoSound.wav" // (or nil to use default)

let center = UNUserNotificationCenter.current()
center.removeAllPendingNotificationRequests()

let content = UNMutableNotificationContent()
content.title = "Title"
content.body = "Body";
content.sound = soundName.flatMap  UNNotificationSound(named: $0)  ??  UNNotificationSound.default()

let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 60, repeats: true)
let identifier = "PushNotifierLocalNotification"
let request = UNNotificationRequest(identifier: identifier, content: content, trigger: trigger)
center.add(request, withCompletionHandler: nil)

编辑:这对于捆绑的声音(拖放到 Xcode)来说不是问题,但只有当我使用由我的应用下载并移入库/声音的声音时,我才会看到上述问题。

【问题讨论】:

您运行的是哪个操作系统版本和设备? 如果您直接创建UNNotificationSound 并将其分配给content.sound 是否有效?我能够毫无问题地播放自定义声音。 let sound = UNNotificationSound(named: "carhorn.wav") content.sound = sound 希望您没有使用 ios10 作为您的测试设备...因为在 10.2 之前的版本中存在错误。见here man1: 你能确定下载的文件(.wav)是否听得见吗? 这听起来像是文件保护的问题。您为下载的声音文件分配了什么级别的保护?查看FileProtectionType 了解更多信息。 【参考方案1】:

来自here,您会注意到:

波形音频文件格式(WAVE,或者由于其文件扩展名而更常称为 WAV - 两者都发音为“wave”[6])3[7][8][9](很少,Windows 音频) [10] 是一种 Microsoft 和 IBM 音频文件格式标准,用于在 PC 上存储音频比特流。

我认为 Apple 更喜欢 Apple 原生声音格式,例如 AIFF 或 CAF,它们都是 Apple 开发的。

如果问题仍然存在,您能否使用 AIFF 或 CAF 声音文件格式重试并确认使用?

你也可以看看here。

【讨论】:

如果不适用于 AIFF 或 CAF,则问题可能与文件访问权限问题有关。 感谢您的想法,但这似乎对 WAV 和 CAF 文件都有效;据我了解,正确使用时,两者都可以包装未压缩的 PCM 文件。遗憾的是,使用 CAF 文件并不能解决我的问题。

以上是关于UNNotificationRequest 仅在 iPhone 解锁时播放自定义声音的主要内容,如果未能解决你的问题,请参考以下文章

可以有多个未完成的 UNNotificationRequest 吗?

UNNotificationRequest 中的开始和结束日期

从请求中检索 UNNotificationRequest 声音名称

如何在 UNNotificationRequest 中设置重复间隔和触发日期

UNNotificationRequest 需要唯一标识符,但也会触发重复项

动作按钮的 Swift UNNotificationRequest 标识符点击了本地通知