2013-06-07 2 views
8

Wenn Sie eine App zum ersten Mal installieren und sich für Push-Benachrichtigungen registrieren möchten, werden Sie in der App gefragt, ob Sie Benachrichtigungen erhalten möchten oder nicht. Dies wird in den Einstellungen auch nach dem Löschen der App dauerhaft gespeichert.Geräte-Token für Push-Benachrichtigungen erhalten, nachdem App gelöscht wurde

Grundsätzlich das Token speichern wir dies tun:

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

Aber das Problem ist, ist NSUserDefaults abgewischt, wenn die App aus dem Gerät entfernt wird, aber die Push-Einstellungen nicht. Es wird also nicht nochmal gefragt, also die Delegate-Methode nicht erneut aufrufen, damit habe ich das Token nicht mehr, aber Push ist noch aktiviert.

Gibt es eine Chance, das Token zurück in das beschriebene Szenario zu bekommen?

+0

Wo rufst du 'registerForRemoteNotificationTypes:' Methode? – Stas

+0

In der 'didFinishLaunchingWithOptions' Methode –

Antwort

23

Von Push Notification Programming Guide

Eine Anwendung sollte jedes Mal, es startet registrieren und geben ihren Anbieter den aktuellen Token. Es ruft die registerForRemoteNotificationTypes: -Methode auf, um den Registrierungsvorgang zu starten.

Durch Anforderung des Geräte-Token und Weiterleitung an den Provider alle Mal Ihre Anwendung startet, helfen Sie sicherzustellen, dass der Provider das aktuelle Token für das Gerät hat. Wenn ein Benutzer eine Sicherung auf einem -Gerät oder einem anderen Computer als dem wiederherstellt, für den die Sicherung erstellt wurde (z. B. wenn der Benutzer Daten auf ein neues Gerät oder einen Computer migriert), muss er die Anwendung mindestens einmal starten damit es wieder Benachrichtigungen erhält. Wenn der Benutzer Sicherungsdaten auf einem neuen Gerät oder einem Computer wiederherstellt oder das Betriebssystem neu installiert, ändert sich das Geräte-Token . Darüber hinaus Cache nie ein Gerät Token und geben Sie das an Ihre Anbieter; Holen Sie das Token immer dann aus dem System, wenn Sie es benötigen. Wenn Ihre Anwendung zuvor registriert wurde, ruft registerForRemoteNotificationTypes: Ergebnisse im Betriebssystem Übergabe des Geräte-Token an die Stellvertretung sofort, ohne zusätzliche Overhead.

Um Ihre Frage zu beantworten: Rufen Sie registerForRemoteNotificationTypes: bei jedem Start und verwenden Sie die neuesten Token.

+0

Danke, Sie haben absolut Recht. Ich habe die 'didFail'-Methode implementiert und es stellte sich heraus, dass es sich nur um ein Zertifikatsproblem handelte (das Team Provisioning-Profil funktioniert nicht) –

+0

Könnten Sie näher erläutern, wie Sie dies implementieren? Wenn ich lösche usw., wird das neue Token aus irgendeinem Grund nicht registriert. – John

2

Anruf registerForRemoteNotificationTypes bei jedem Start Ihrer Anwendung, so dass Ihre didRegisterForRemoteNotificationsWithDeviceToken Methode Anruf erhalten und Sie erhalten Ihr Gerät Token jedes Mal von APNS. Und Geräte-Token für Ihre Anwendung sind bei jedem Start gleich.