2015-04-22 10 views
8
if UIApplication.sharedApplication().isRegisteredForRemoteNotifications() == true { 
     println("Yes, allowed") 
     println(UIApplication.sharedApplication().isRegisteredForRemoteNotifications()) 
    }else{ 
     //don't do shit 
     return 
    } 

Quando vado a impostazioni per disattivare le notifiche completamente e poi tornare in app, l'applicazione stampa ancora true, ha permesso.isRegisteredForRemoteNotifications restituisce vero anche se ho disattivato completamente

Non riesco a farlo scattare false, anche dopo una disinstallazione/installazione dell'app.

+0

Quale versione IOS testate? e fare test su un dispositivo reale o un simulatore? –

+0

È su ios8.2, ios8.3, su dispositivi reali (installazioni recenti) – TIMEX

risposta

2

Come da Apple documentationisRegisteredForRemoteNotifications restituirà NO se la registrazione non è avvenuta, non è riuscita o è stata negata dall'utente. YES verrà restituito se l'app è stata registrata per le notifiche remote e ha ricevuto un token dispositivo. Quindi, in risposta alla tua domanda NO, non tornerà sempre, ma restituirà anche sì se la tua app è stata registrata per le notifiche remote e ha ricevuto il token dispositivo.

ritorno Valore YES se l'applicazione è registrato per le notifiche remote e ricevuto il suo dispositivo di token o NO se la registrazione non si è verificato, ha fallito, o è stato negato da parte dell'utente.

Discussione Questo metodo riflette solo il completamento del processo di registrazione remota che inizia quando si chiama il metodo registerForRemoteNotifications. Questo metodo non riflette se le notifiche remote sono effettivamente disponibili a causa di problemi di connettività . Il valore restituito da questo metodo prende in account le preferenze dell'utente per la ricezione di notifiche remote.

Torna sopra il punto nel documento Apple.

----- A CURA ----------

Potete leggere le autorizzazioni di tua app tramite

UIRemoteNotificationType enabledTypes = [[UIApplication sharedApplication] enabledRemoteNotificationTypes]; 

Poi l'esecuzione di una qualsiasi operazione con i diversi tipi di vedere quali sono abilitati. Puoi anche chiamare unregisterForRemoteNotifications per disabilitare le notifiche.

----- ------ Modifiche

- isRegisteredForRemoteNotifications

Restituisce un booleano che indica se l'applicazione è attualmente registrato per le notifiche a distanza.

Dichiarazione SWIFT func isRegisteredForRemoteNotifications() -> Bool

Objective-C - (BOOL)isRegisteredForRemoteNotifications

Valore di ritorno YES se l'applicazione è registrato per le notifiche remote e ricevuto il suo dispositivo di token o NO se la registrazione non si è verificato, ha non riuscito o è stato negato dall'utente.

Discussione Questo metodo riflette solo il completamento con successo del processo di registrazione remota che inizia quando si chiama il metodo registerForRemoteNotifications . Questo metodo non riflette se le notifiche remote sono effettivamente disponibili a causa di problemi di connettività . Il valore restituito da questo metodo prende in account le preferenze dell'utente per la ricezione di notifiche remote.

+1

Come posso modificare il mio codice in modo che io sappia quando l'utente '' 'disabilita la notifica'''? – TIMEX

+0

Modifica il codice per quello. –

+0

Non è un metodo deprecato? La documentazione afferma di usare '' 'isRegisteredForRemoteNotifications''' – TIMEX

9

Ho fatto un'estensione per Swift 3

extension UIApplication { 
    func remoteNotificationsEnabled() -> Bool { 
     var notificationsEnabled = false 
     if let userNotificationSettings = currentUserNotificationSettings { 
      notificationsEnabled = userNotificationSettings.types.contains(.alert) 
     } 
     return notificationsEnabled 
    } 
} 

E che lo usano

UIApplication.shared.remoteNotificationsEnabled() 
+3

Grazie! Ho scritto lo stesso codice in una riga: 'return currentUserNotificationSettings? .types.contains (.alert) ?? false' – Raphael

+0

Perché devo abilitare l'avviso? Posso disattivare l'avviso e lasciare che le notifiche vengano visualizzate nella schermata di blocco e nel centro notifiche. –

+0

Esistono 3 UIUserNotificationType. avviso, distintivo e suono. Penso che l'avviso sia il permesso più importante, quindi controllo solo questo – zeiteisen

2

ho i miei appunti su Push Notification in https://github.com/onmyway133/notes/issues/219

Scenari

012.

Questi sono gli scenari che si può passare attraverso

isRegisteredForRemoteNotifications-UIApplication.shared.currentUserNotificationSettings

iOS 9.3.2+

  • Non hanno innescare finestra richiesta push: false - nessuno
  • Abilita spinta per app su richiesta di autorizzazione: true - alert, badge, audio
  • Spegni push per app: true - none
  • Accendere spinta, abilitare solo avviso: vero - avviso
  • Disinstallare e installare di nuovo (entro 24 ore): false - nessuno
  • Nega quando abbiamo chiesto su richiesta l'autorizzazione: vero - nessuno
  • spinta Riattivare dopo smentita: true - avviso, distintivo, suono

API

Come di iOS 8+, la notifica API push è stato diviso per registerForRemoteNotifications e registerUserNotificationSettings.

Quindi, quando si chiamano registerForRemoteNotifications

  • func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) si chiama
  • UIApplication.shared.isRegisteredForRemoteNotifications restituisce true

Ciò significa che l'applicazione ha ricevere il token spinta, ed è pronto a ricevere la notifica push.Sia il sistema operativo fornisce spinta per la vostra applicazione dipende da user notification settings, che è ciò che l'utente si alterna nel Settings

Mostrami il codice

Per verificare se spinta è abilitato (significa che l'utente può visualizzare il messaggio push)

static var isPushNotificationEnabled: Bool { 
    guard let settings = UIApplication.shared.currentUserNotificationSettings 
     else { 
     return false 
    } 

    return UIApplication.shared.isRegisteredForRemoteNotifications 
     && !settings.types.isEmpty 
    } 
Problemi correlati