2014-10-22 2 views
5

Начиная с iOS8 вам необходимо зарегистрироваться и запросить пользователя для использования локальных уведомлений. Поэтому я хотел бы реализовать способ двойной проверки этих разрешений.Определите случай «Не определено» для локальных настроек уведомлений

Как я могу проверить для случая местных уведомлений что настройки не определяются/не установлены еще? До сих пор я только знаю, как проверить местные уведомления, предоставивших или отказано, как это ...

var currentStatus = UIApplication.sharedApplication().currentUserNotificationSettings() 
    var requiredStatus:UIUserNotificationType = UIUserNotificationType.Alert 

    if currentStatus.types == requiredStatus { 
    … //GRANTED 
    } else { 
    … //DENIED 
    } 

проблемы с помощью этого я получаю Denied если нет ничего установлено до сих пор. Как я могу дифференцировать все 3 случая?

  • Предоставленный (уведомление, тип оповещения)
  • Denied (уведомление, тип оповещения)
  • Undefined/Пока не установлено (поэтому локальные настройки приложения уведомления еще не создана)

В качестве альтернативы решение было бы полезно иметь сопоставимый метод делегирования с . Назначение CoreLocationdidChangeAuthorizationStatus для того, чтобы отреагировать на выбор пользователя на permi ssions alert. Есть ли что-то подобное, чтобы получить состояние взаимодействия пользователя с предупреждением о конфиденциальности для местных уведомлений?

ответ

0

Я только что нашел подходящий UIApplication метод делегата, который помогает решить эту проблему:

- (void)application:(UIApplication *)application 
    didRegisterUserNotificationSettings: 
    (UIUserNotificationSettings *)notificationSettings { 

Вы можете найти более подробную информацию по этому вопросу в WWDC14 сессии 713 «Что нового в IOS Уведомления».

2

Решение я реализовал:

В приложение делегата, я обнаруживаю, когда didRegisterUserNotificationSettings снят. И я сохраню в userdefaults логическое значение истина:

func application(application: UIApplication, didRegisterUserNotificationSettings notificationSettings: UIUserNotificationSettings) { 
     NSUserDefaults.standardUserDefaults().setBool(true, forKey: "notificationsDeterminedKey") 
     NSUserDefaults.standardUserDefaults().synchronize() 
} 

И когда мне нужно знать статус:

if NSUserDefaults.standardUserDefaults().boolForKey("notificationsDeterminedKey") { 
    let grantedSettings = UIApplication.sharedApplication().currentUserNotificationSettings() 
    if grantedSettings.types == UIUserNotificationType.None { 
     // Denied 
    } else { 
     // Granted 
} else { 
    // Not Determined 
}