Проверка пользовательских настроек для push-уведомления в Swift

У меня есть push-уведомления в моем приложении. Всякий раз, когда приложение запускается, я хотел бы проверить, разрешил ли пользователь push-уведомление для моего приложения.

Я делаю так:

let notificationType = UIApplication.sharedApplication().currentUserNotificationSettings()!.types
if notificationType == UIUserNotificationType.None {
    print("OFF")
} else {
    print("ON")
}

Если push-уведомления отключены пользователем, есть ли способ активировать это из моего приложения?

Или есть ли какая-либо альтернатива для отправки пользователям настроек push-уведомлений (Настройки - Уведомления - AppName)?

Ответы

Ответ 1

Невозможно изменить настройки из приложения. Но вы можете привести пользователя к конкретным системным настройкам приложения, используя этот код.

extension UIApplication {
    class func openAppSettings() {
        UIApplication.sharedApplication().openURL(NSURL(string: UIApplicationOpenSettingsURLString)!)
    }
}

Обновлено для Swift 3.0

extension UIApplication {
    class func openAppSettings() {
        UIApplication.shared.openURL(URL(string: UIApplicationOpenSettingsURLString)!)
    }
}

Ответ 2

Для iOS 10 или выше

Проверка того, что push-уведомления были включены для вашего приложения, резко изменилось для Swift 3. Используйте это вместо приведенных выше примеров, если вы используете Swift 3.

    let center = UNUserNotificationCenter.current()
    center.getNotificationSettings { (settings) in
        if(settings.authorizationStatus == .authorized)
        {
            print("Push authorized")
        }
        else
        {
            print("Push not authorized")
        }
    }

Вот документация Apple о том, как уточнить вашу проверку: https://developer.apple.com/reference/usernotifications/unnotificationsettings/1648391-authorizationstatus

Ответ 3

Это версия Swift 3, в которой вы можете проверить, включены ли уведомления или отключены.

let notificationType = UIApplication.shared.currentUserNotificationSettings?.types
    if notificationType?.rawValue == 0 {
        print("Disabled")
    } else {
        print("Enabled")
    }

Ответ 4

Swift 4 версия ответа salabaha

extension UIApplication {
    class func openAppSettings() {
        UIApplication.shared.open(URL(string: UIApplicationOpenSettingsURLString)!, options: [:], completionHandler: {enabled in
            // ... handle if enabled
        })
}

Ответ 5

Короткий ответ: Нет, если пользователь отклонил ваш запрос на push-уведомления, вы не можете запросить их снова, вы должны указать их на страницу настроек, вы можете сделать это с предупреждением, информирующим их о шагах и двух вариантах "Ok" и "Go to settings" ", здесь вы будете использовать римский код.

Длинный ответ: Вы должны запрашивать у пользователя только push-уведомления, когда вам это абсолютно необходимо. И если вы попросите его помочь предисловие с небольшим представлением, объясняющим, почему вам нужно/нужно отправлять push-уведомления, это отличная статья TechCrunch, которая поможет вы получаете лучшее удержание/прием от своих пользователей - http://techcrunch.com/2014/04/04/the-right-way-to-ask-users-for-ios-permissions/

Ответ 6

Вот самый тщательный способ, начиная с iOS12 и Swift 5:

 _ = UNUserNotificationCenter.current().getNotificationSettings { (settings) in
        switch settings.authorizationStatus {
        case .notDetermined:
            <#code#>
        case .denied:
            <#code#>
        case .authorized:
            <#code#>
        case .provisional:
            <#code#>
        @unknown default:
            <#fatalError()#>
        }
    }