2014-03-27 6 views
5

Ich weiß, dass Sie das Gerät Token mit dem Verfahren erhalten können: -iOS Geräte-Token erhalten, nachdem das Gerät für Push-Benachrichtigungen registriert wurde?

- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken 

Allerdings, wenn ich das richtig verstehe diese Methode nur das erste Mal die App läuft aufgerufen wird und der Benutzer nimmt die Benachrichtigungsanforderung. Bei nachfolgenden Neustarts der App wird die Methode nie wieder aufgerufen.

Also meine Frage ist dies - gibt es eine andere Möglichkeit, auf das Gerät Token zugreifen, nachdem der Benutzer Benachrichtigungen akzeptiert hat?

Bearbeiten - Ich weiß alles, dass das Gerät online ist und das vorläufige Profil ist mit der App-ID verknüpft, weil ich Push-Benachrichtigungen erhalten kann. Das Empfangen von Push-Benachrichtigungen ist nicht das Problem - das Geräte-Token abzurufen und es in Parse zu speichern ist das, was ich erreichen möchte.

Dank

+1

Vielleicht '- (void) Anwendung: (UIApplication *) Anwendung didFailToRegisterForRemoteNotificationsWithError: (NSError *) error' wird aufgerufen. Wenn dies der Fall ist, können Sie sich den Fehler ansehen und er wird Ihnen eine Vorstellung davon geben, was falsch läuft. – xardas

+1

Dank Xardas, die wirklich geholfen haben, dass der Fehler-Handler aufgerufen wird - es scheint, dass es ein Provisioning-Profil-Problem war - siehe Smikey's Antwort unten. Aber es ist seltsam, dass es immer noch Stöße empfing. – BlinkingCahill

Antwort

1

Hmm Push hat, versuchen Sie es erneut Ihr Provisioning-Profil überprüfen. Es klingt, als ob Sie einen mit einem Platzhalter verwenden. Sie erhalten möglicherweise Push-Nachrichten vom Server, weil Sie ursprünglich mit einem korrekten Profil bereitgestellt haben. Wenn Sie jedoch ein Platzhalterprofil (z. B. ein Teamprofil) verwenden, werden Sie keine Remote-Benachrichtigungen mehr korrekt registrieren ...

0

Verwenden Sie die folgenden Verfahren in didiFinishLaunchingWithOption

[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)]; 

Kann dies für Ihr Problem umgehen

+1

Das Problem ist, dass, sobald RegisterForRemoteNotificationTypes einmal ausgeführt wurde, didRegisterForRemoteNotificationsWithDeviceToken nicht erneut aufgerufen wird. Selbst wenn Sie die App löschen, rufen Sie unregister etc. auf, die App ruft didRegisterForRemote nicht mehr auf. – Smikey

9

Sie falsch.

Von der -application:didRegisterForRemoteNotificationsWithDeviceToken: Dokumentation:

The delegate receives this message after the registerForRemoteNotificationTypes: method of UIApplication is invoked and there is no error in the registration process [...] This method could be called in other rare circumstances, such as when the user launches an app after having restored a device from data that is not the device’s backup data. In this exceptional case, the app won’t know the new device’s token until the user launches it.

aus der Apple-Push-Benachrichtigungen Führung:

Moreover, never cache a device token and give that to your provider; always get the token from the system whenever you need it. If your application has previously registered, calling registerForRemoteNotificationTypes: results in the operating system passing the device token to the delegate immediately without incurring additional overhead. Also note that the delegate method may be called any time the device token changes, not just in response to your app registering or re-registering.

Mit anderen Worten, die Methode aufgerufen wird, wenn Sie registerForRemoteNotificationTypes: anrufen und die Operation erfolgreich ist, sowie zu anderen Zeiten, wenn der Token wechselt

EDIT:

If a cellular or Wi-Fi connection is not available, neither the application:didRegisterForRemoteNotificationsWithDeviceToken: method or the application:didFailToRegisterForRemoteNotificationsWithError: method is called. For Wi-Fi connections, this sometimes occurs when the device cannot connect with APNs over port 5223.

Alternativ stellen Sie sicher, mit einem Provisioning-Profil zu einer App-ID verknüpft sind, den Aufbau, die Benachrichtigung Ansprüche

+0

Ok, vielleicht verstehe ich immer noch nicht, ich rufe 'registerForRemoteNotificationTypes' auf und ich habe Log-Anweisungen und einen Breakpoint in 'didRegisterForRemoteNotificationsWithDeviceToken' gesetzt - aber ich treffe den Breakpoint nicht oder bekomme diese Log-Nachrichten - gibt es noch etwas anderes Ich mache falsch? – BlinkingCahill

+0

Ich weiß, dass das Gerät online ist und das vorläufige Profil ist mit der App-ID verknüpft, weil ich Push-Benachrichtigungen erhalten kann. Lassen Sie mich klar sein, dass das Empfangen von Push-Benachrichtigungen nicht das Problem ist - das Geräte-Token zu bekommen und es in Parse zu speichern ist das, was ich erreichen möchte. – BlinkingCahill

+0

Haben Sie das jemals gelöst? Ich stoße auf ein ähnliches Problem – John

Verwandte Themen