2

在我的应用程序中,我在应用程序设置中启用/禁用推送通知。我遇到了这样一种情况,如果用户在应用程序启动时不允许通知,然后使用应用程序中的设置启用它,那么授权状态总是被拒绝。

这是我在应用程序委托中推送通知的代码。
我在 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()
4

1 回答 1

1

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

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

从设置应用程序中启用后,状态将denied不再存在。

于 2020-04-21T08:47:55.547 回答