0

我建立了一个虚拟项目来重现我看到的问题。在我的ContentView中,我安排了一些重复的通知。

struct ContentView: View {
    var body: some View {
        VStack {
            Button("Schedule notifications") {
                let content = UNMutableNotificationContent()
                content.title = "Title"
                content.body = "body"
                content.sound = UNNotificationSound.default
                let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 60, repeats: true)
                let request = UNNotificationRequest(identifier: UUID().uuidString, content: content, trigger: trigger)
                UNUserNotificationCenter.current().add(request, withCompletionHandler: nil)
            }

            Button("Request Permission") {
                let current = UNUserNotificationCenter.current()
                current.requestAuthorization(
                    options: [.sound, .alert],
                      completionHandler: { completed, wrappedError in
                          guard let error = wrappedError else {
                              return
                          }
                  })
            }
        }

    }
}

然后在我的 中AppDelegate,我尝试在应用程序终止之前取消那些重复的通知。

   func applicationWillTerminate(_ application: UIApplication) {
        UNUserNotificationCenter.current().removeAllPendingNotificationRequests()
        print("============== removing all notifications")
    }

我发现我的预定通知仍然发送,即使我可以在 Xcode 控制台中看到我的打印语句。但是,如果我在 iPhone 上运行相同的测试,我的通知不会按预期传递。

我做错了什么,还是这是一个错误?我在 iPad 上使用 13.4.1,在 iOS 上使用 13.3.1

4

1 回答 1

0

我也面临同样的问题。发现 applicationWillTerminate 方法有大约五秒钟的时间来执行任何任务并返回。并且 removeAllPendingNotificationRequests 立即返回,但在辅助线程中异步删除预定通知。

我认为清除通知所需的时间超过 5 秒。

于 2021-01-01T13:32:30.850 回答