Проверка пользовательских настроек для 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()#>
}
}