0

我正在开发一个处理推送通知的应用程序。

由于某些原因,

func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {

按预期工作,但是

func userNotificationCenter( _ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {

永远不会被调用。

有人遇到过这种情况吗?

所有常见的嫌疑人都到位:

UNUserNotificationCenter.current().delegate = self

安顿好了didFinishLaunchingWithOptions

let center  = UNUserNotificationCenter.current()
        UNUserNotificationCenter.current().delegate = self
        let options: UNAuthorizationOptions = [.alert, .badge, .sound]
        center.requestAuthorization(options:options) { (granted, error) in
            if error == nil{
                DispatchQueue.main.async() {
                    UIApplication.shared.registerForRemoteNotifications()
                    completion(granted)
                }
            }
        }

正在返回 true(已授予权限)

其他值得一提的项目:

  • 推送通知通过 SendBird 发送

  • 当应用程序在后台时,一切都按预期工作。

4

1 回答 1

0

一次又一次地阅读文档。

苹果声明func userNotificationCenter( _ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void)

询问代理如何处理在应用程序在前台运行时到达的通知。

也就是说,只有当您的应用程序在 FORGROUND 中运行并且您收到通知时,系统才会调用此方法来询问您是否仍应向用户显示此通知,因为他们已经在您的应用程序中。您可以调用 completionHandler 并传入诸如等选项alertsound因此用户仍将看到横幅并听到声音。如果您只回传sound,则用户看不到横幅,只会听到通知声音。

于 2020-06-16T05:06:53.127 回答