首页 > 解决方案 > 当应用程序从 Swift 5 中的设置返回时,如何检测通知是否打开?

问题描述

我有一个会触发通知警报的开关按钮。我能够实现请求通知权限(用户第一次触发开关),我还能够实现当用户再次单击开关按钮时让用户打开应用程序的通知设置(如果用户拒绝第一次要求)。但我在如何让通知打开信息回到应用程序方面遇到问题。

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

在这个阶段,如何检测应用程序的通知设置是否打开并将开关按钮显示为“打开”?

我尝试了覆盖 func viewWillAppear(这不起作用,因为当您从设置返回应用程序时,viewcontroller 永远不会再次调用/重新加载。)我还尝试了 AppDelegate、applicationWillEnterForeground 和 applicationDidBecomeActive,两者都没有工作。

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

标签: iosswiftnotifications

解决方案


将 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
     }
}

推荐阅读