2014-10-22 12 views
5

A partire da iOS8 è necessario registrarsi e richiedere all'utente l'uso di Notifiche locali. Pertanto mi piacerebbe implementare un modo per ricontrollare queste autorizzazioni.Identifica il caso "Not Determined" per le impostazioni di Notifiche locali

Come posso controllare per il caso di notifiche locali impostazioni di essere non hanno determinato/non impostato ancora? Finora ho solo so come controllare per le notifiche locali che sono concesso o negato, come questo ...

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

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

Il problema con questo è anche ottenere un negato se non c'è niente di impostato finora. Come posso differenziare tutti e 3 i casi?

  • Certo (Notificazione, Tipo di avviso)
  • negato (notifica, Tipo di avviso)
  • non identificato/Non ancora impostati (quindi le impostazioni di notifica app locali non ancora creata)

In alternativa soluzione Sarebbe utile disporre di un metodo di delega comparabile all'identificazione CoreLocationdidChangeAuthorizationStatus per reagire alla selezione dell'utente sul permi avviso di ssioni. C'è qualcosa di simile al fine di ottenere lo stato di interazione dell'utente con l'avviso di privacy per le notifiche locali?

risposta

0

Ho appena trovato un metodo appropriato UIApplication delegato che aiuta a risolvere questo:

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

Potete trovare maggiori dettagli su questo in WWDC14 Session 713 "Cosa c'è di nuovo in iOS Notifiche".

2

La soluzione che ho implementato:

In applicazione delegato, mi rilevare quando didRegisterUserNotificationSettings è girato. Li risparmio in userdefaults un bool true:

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

E quando ho bisogno di conoscere lo stato:

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