gpt4 book ai didi

ios - 如何制作在应用程序状态中保持一致的 UNUserNotification?

转载 作者:行者123 更新时间:2023-11-29 05:36:32 24 4
gpt4 key购买 nike

我做了一个像这样的UNUserNotification:

    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
)

它将显示一 strip 有标题和正文的通知,以及两个自定义操作按钮(接受和拒绝,这是来电)。它也会播放声音,但由于某种原因,如果应用程序处于前台,则不会播放声音。
我还尝试用它来伪造持久通知,就像 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,那么它应该像平常一样在 native 显示通知,否则不执行任何操作。

尝试在应用中的此方法中调用 completionHandler(.alert),您的通知应该会显示

查看 documentation here

关于ios - 如何制作在应用程序状态中保持一致的 UNUserNotification?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56985164/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com