如何在 iOS Swift 5 中启用来自应用程序设置的推送通知?

How to enable push notification from app settings in iOS Swift 5?

在我的应用程序中,我有 enabling/disabling 推送通知的应用程序设置。 我 运行 遇到这样一种情况,如果用户在应用程序启动时不允许通知,然后使用应用程序中的设置启用它,则授权状态始终被拒绝。

这是我在应用程序委托中推送通知的代码。
我在 didFinishLaunching 中调用了 registerForPushNotifications 方法。

// MARK: Register app for push notificaitons
    func registerForPushNotifications() {
        UNUserNotificationCenter.current().delegate = self
        UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]) {
          [weak self] granted, error in
          printLogs("Permission granted: \(granted)")
         // guard granted else { return }
            if error == nil {
                self?.getNotificationSettings()
            }

      }
    }

func getNotificationSettings() {
    UNUserNotificationCenter.current().getNotificationSettings { settings in
        printLogs("Notification settings: \(settings)")
        switch settings.authorizationStatus {
        case .authorized:
            DispatchQueue.main.async {
                UIApplication.shared.registerForRemoteNotifications()
            }
        case .denied:
            printLogs("Notifications Denied")

        case .notDetermined:
            printLogs("Notifications not determined")
        default:
            break
        }

    }
}

为了启用来自设置的通知,我正在使用此代码

 AppDelegate.shared.registerForRemoteNotifications()

一旦用户拒绝了推送通知的权限,他必须在设置应用程序中启用它们才能获得推送通知。因此,在您的设置屏幕上,当用户点击启用通知选项时,只需将他带到您应用的通知设置屏幕。他可以从那里启用它。使用这段代码打开设置应用程序。

if let bundle = Bundle.main.bundleIdentifier,
    let settings = URL(string: UIApplication.openSettingsURLString + bundle) {
    if UIApplication.shared.canOpenURL(settings) {
        UIApplication.shared.open(settings)
    }
}

在设置应用中启用后,状态将不再是 denied