2014-10-22 8 views
5

Ab iOS8 müssen Sie sich registrieren und den Benutzer zur Verwendung von lokalen Benachrichtigungen aufgefordert. Daher möchte ich eine Möglichkeit implementieren, diese Berechtigungen zu überprüfen.Identifizieren Sie "Nicht bestimmt" Fall für lokale Benachrichtigungen Einstellungen

Wie kann ich für den Fall Lokale Benachrichtigungen überprüfen Einstellungen werden nicht nicht gesetzt noch bestimmt /? Bisher ist nur ich weiß, wie für lokale Benachrichtigungen überprüfen sein gewährt oder verweigert, so ...

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

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

Das Problem dieser Verwendung ist ich auch eine bekommen verweigert wenn es nichts so weit gesetzt ist. Wie kann ich alle 3 Fälle unterscheiden?

  • bewilligt (Benachrichtigung, Alarmtyp)
  • verweigert (Benachrichtigung, Alarmtyp)
  • undefiniert/Noch nicht festgelegt (also lokale Benachrichtigung App-Einstellungen noch nicht erstellt)

Als Alternative Lösung wäre es hilfreich, eine vergleichbare Delegiertenmethode zu CoreLocation 's Autorisierung didChangeAuthorizationStatus zu haben, um auf die Auswahl des Benutzers auf dem permi zu reagieren Warnungen. Gibt es so etwas, um den Status der Benutzerinteraktion mit der Datenschutzwarnung für lokale Benachrichtigungen zu erhalten?

Antwort

0

Ich habe gerade eine entsprechende UIApplication Delegatmethode, die dieses Problem zu lösen hilft:

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

Sie weitere Details zu diesem Thema in WWDC14 Session 713 "Neue Funktionen in iOS Notifications" finden. Ich

2

Die Lösung implementiert:

In AppDelegate, ich erkennen, wenn didRegisterUserNotificationSettings geschossen wird. Und ich spare in userdefaults ein bool true:

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

Und wenn ich brauche, um den Status kennen:

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