如何使 UNUserNotification 通过应用状态保持一致?



我像这样制作一个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),通知应会显示

在此处查看文档

相关内容

  • 没有找到相关文章

最新更新