Swift 5 如何检测应用从设置返回时通知是否打开?

How to detect if notification is turn on when the app comes back from Settings in Swift 5?

我有一个可以触发通知提醒的切换按钮。我能够实现请求通知权限(用户第一次触发切换),我还能够实现在用户再次单击切换按钮时让用户打开应用程序的通知设置(如果用户拒绝第一次要求)。但是我在如何将通知打开信息返回给应用程序方面遇到问题。

  1. 应用程序启动,用户点击切换开关(将弹出通知请求对话框)。
  2. 如果用户拒绝初始请求并再次点击切换开关,将弹出一个对话框,suggest/bring 用户进入应用程序设置。 (应用进入后台,设置在前面)
  3. 当用户打开通知设置,然后返回应用(设置进入后台,应用进入前台)。

在这个阶段,如何检测应用程序的通知设置是否已打开并将切换按钮显示为 'on'?

我尝试覆盖 func viewWillAppear(这不起作用,因为当您从“设置”返回到应用程序时,viewcontroller 再也不会 calls/reload。) 我也在AppDelegate, applicationWillEnterForeground 和applicationDidBecomeActive 里试过了,都没有用。

我希望这是有道理的。感谢您的任何建议。

将 UserNotifications 导入您的 ViewController

import UserNotifications

创建一个方法来检查当前通知状态

private func hasNotificationPermission(completion: @escaping (Bool) -> Void) {
    UNUserNotificationCenter.current().getNotificationSettings { (settings) in
        completion(settings.authorizationStatus == .authorized)
    }
}

添加观察器以检测应用程序何时激活

override func viewDidLoad() {
     super.viewDidLoad()
     NotificationCenter.default.addObserver(self, selector: #selector(self.openactivity), name: NSNotification.UIApplicationDidBecomeActive, object: nil)
}

从后台返回时检查通知状态并更新您的 UI

@objc func appBecomeActive() {
     if hasNotificationPermission {
         // Notifications are enabled
     } else {
         // Notifications are not enabled
     }
}