2013-06-07 10 views
8

Quando si installa un'app per la prima volta e si desidera registrarsi per le notifiche Push, l'app chiede se si desidera ricevere avvisi o meno. Questo viene salvato in modo permanente nelle impostazioni, anche dopo la cancellazione dell'app.Ottieni il token del dispositivo per le notifiche push dopo l'eliminazione dell'applicazione

In sostanza, per salvare il token che stiamo facendo questo:

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { 
    NSString *token = [[[deviceToken description] 
      stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]] 
      stringByReplacingOccurrencesOfString:@" " withString:@""]; 
    [[NSUserDefaults standardUserDefaults] setValue:token forKey:kDeviceTokenKey]; 
} 

ma il problema è, NSUserDefaults vengono cancellati quando l'applicazione viene rimosso dal dispositivo, ma le impostazioni di spinta non lo sono. Quindi non chiederà di nuovo, quindi non chiamare di nuovo il metodo delegato, quindi non ho più il token, ma push è ancora attivato.

C'è qualche possibilità di riportare il token nello scenario descritto?

+0

Dove si chiama il metodo 'registerForRemoteNotificationTypes:'? – Stas

+0

Nel metodo 'didFinishLaunchingWithOptions' –

risposta

23

Da Push Notification Programming Guide

Un'applicazione dovrebbe registrare ogni volta che si lancia e dare il suo fornitore di il token corrente. Chiama lo registerForRemoteNotificationTypes: metodo per avviare la procedura di registrazione .

Richiedendo il token del dispositivo e trasmettendolo al provider ogni avvio dell'applicazione, è necessario assicurarsi che il provider disponga del token corrente per il dispositivo. Se un utente ripristina un backup su un dispositivo o computer diverso da quello creato per il backup (ad esempio, l'utente migra i dati su un nuovo dispositivo o computer), lui o deve avviare l'applicazione almeno una volta per ricevere nuovamente le notifiche . Se l'utente ripristina i dati di backup su un nuovo dispositivo o computer, o reinstalla il sistema operativo, le modifiche del token dispositivo . Inoltre, non mettere mai in cache un token dispositivo e assegnarlo al tuo provider ; ricevi sempre il token dal sistema ogni volta che ne hai bisogno. Se l'applicazione è stata precedentemente registrata, chiamando registerForRemoteNotificationTypes: risultati nel sistema operativo passando immediatamente il token del dispositivo al delegato senza incorrere nel sovraccarico aggiuntivo.

Per rispondere alla tua domanda: Chiama registerForRemoteNotificationTypes: ad ogni avvio e utilizza l'ultimo token.

+0

Grazie, hai assolutamente ragione. Ho implementato il metodo 'didFail' e, come si è scoperto, era solo un problema di certificato (il profilo di provisioning del team non funziona) –

+0

Potresti espandere come implementarlo? Quando elimino, ecc., Il nuovo token non viene registrato per qualche motivo. – John

2

chiamare registerForRemoteNotificationTypes ad ogni avvio dell'applicazione in modo che il metodo didRegisterForRemoteNotificationsWithDeviceToken ottenga la chiamata e riceverai il token del dispositivo ogni volta da APNS. E il token dispositivo per la tua applicazione è lo stesso ad ogni avvio.

Problemi correlati