我像这样制作一个UNUserNotice:
let content = UNMutableNotificationContent()
content.title = "a title"
content.body = "a body"
content.sound = .default
content.categoryIdentifier = "(type(of: self))"
let request = UNNotificationRequest(
identifier: UUID().uuidString,
content: content,
trigger: UNTimeIntervalNotificationTrigger(timeInterval: 0.01, repeats: false)
)
let category = UNNotificationCategory(
identifier: content.categoryIdentifier,
actions: [
UNNotificationAction(identifier: Strings.accept.id, title: Strings.accept.title, options: [.authenticationRequired, .foreground]),
UNNotificationAction(identifier: Strings.reject.id, title: Strings.reject.title, options: [.authenticationRequired, .destructive])
],
intentIdentifiers: [],
options: .customDismissAction
)
它将显示带有标题和正文的通知,以及两个自定义操作按钮(接受和拒绝,这是来电(。它也播放声音,但由于某种原因,如果应用程序是前台,则不会播放。
我还尝试用它伪造持久通知,就像 Whatsapp 通过每 ~4 秒重复一次本地通知来做到这一点一样,但第二次显示通知时,声音被切断了一点。这不是第一个的声音,第二个显示有自己的声音播放,但这次它没有完全播放。声音只有~1-2秒。
我不明白为什么会有这些差异,如何让它始终播放声音(前景、背景、不运行(以及如何确保第二次显示通知时声音不会被切断?
当在应用运行时收到通知时,通知通常会静音,以便应用能够以更原生的方式处理它们。
如果我没记错的话,收到通知会打电话:
func userNotificationCenter(_ center: UNUserNotificationCenter,
willPresent notification: UNNotification,
withCompletionHandler completionHandler:
@escaping (UNNotificationPresentationOptions) -> Void) {
if someCondition {
completionHandler(.alert)
} else {
completionHandler(.init(rawValue: 0))
}
}
收到通知时调用此方法,如果应用在前台运行,则通常会将其静音。完成处理程序确定应执行的操作以及是否应显示通知或发出声音等。
在这种情况下,如果 someCondition 为 true,那么它应该像往常一样本机显示通知,否则不要执行任何操作。
尝试在应用中使用此方法调用completionHandler(.alert)
,通知应会显示
在此处查看文档