2015-01-30 14 views
6

ho ottenuto il pop-up, ho accettato, lo vedo nelle notifiche ed è acceso ma questo codice non restituisce sempre e non posso sembrano scoprire perchéisRegisteredForRemoteNotifications restituisce sempre no

UIApplication *application = [UIApplication sharedApplication]; 

BOOL enabled; 

// Try to use the newer isRegisteredForRemoteNotifications otherwise use the enabledRemoteNotificationTypes. 
if ([application respondsToSelector:@selector(isRegisteredForRemoteNotifications)]) 
{ 

    enabled = [application isRegisteredForRemoteNotifications]; 
} 
else 
{ 
    UIRemoteNotificationType types = [application enabledRemoteNotificationTypes]; 
    enabled = types & UIRemoteNotificationTypeAlert; 

} 
if (enabled){ 
    NSLog(@"is registered"); 
}else{ 
    NSLog(@"is not registered"); 
} 
+0

Quando ti registri per le notifiche è 'UIRemoteNotificationTypeAlert' uno dei tipi per cui ti sei registrato? –

risposta

1

I stava lottando con lo stesso problema, questo ha funzionato per me.

BOOL enabled = NO; 
UIUserNotificationSettings *notificationSettings = [SharedApplication currentUserNotificationSettings]; 
enabled = notificationSettings.types < 4; 
+0

#define SharedApplication [UIApplication sharedApplication] – luisfcofv

+0

Questo ha un'enorme possibilità di mentire. Se non si è registrati per le notifiche remote, si può ancora avere l'impostazione delle impostazioni di notifica in modo che questo possa restituire true quando in realtà è falso. Si dovrebbe fare affidamento sul valore restituito in 'isRegisteredForRemoteNotifications' e se restituisce' NO' significa che qualcosa è andato storto con la registrazione per le notifiche remote. – Popeye

0

penso che il simulatore restituirà sempre no, provare a eseguire il codice su un dispositivo reale e vedere se il comportamento continua

1

Come per la documentazione di Apple isRegisteredForRemoteNotifications tornerà NO se la registrazione non si è verificato, ha fallito, o è stato negato 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 restituirà sempre no restituirà anche yes se l'app è stata registrata per le notifiche remote e ha ricevuto il token dispositivo.

Checkout the Apple Documentation for a better description

Return Value

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

Discussione

Questo metodo riflette solo il completamento del processo di registrazione a distanza 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 tiene conto delle preferenze dell'utente per la ricezione di notifiche remote.

8

Credo che ciò che fa accadere potrebbe essere:

  1. isRegisteredForRemoteNotifications restituirà sempre NO nel simulatori.
  2. registerForRemoteNotifications non riesce.
Problemi correlati