2013-09-03 13 views
11

Etwas ähnlich zu When is didRegisterForRemoteNotificationsWithDeviceToken called?.didRegisterForRemoteNotificationsWithDeviceToken zweimal aufgerufen?

Wenn der Benutzer zuerst installiert die App und es fragt, ob eine Benachrichtigung akzeptiert wird, wird didRegisterForRemoteNotificationsWithDeviceToken aufgerufen werden, wenn der Benutzer es annimmt?

Ich rufe derzeit registerForRemoteNotificationTypes an, nachdem der Benutzer sich erfolgreich angemeldet oder ein Konto erstellt hat.

Bei nachfolgenden Starts wird der Delegat didRegisterForRemoteNotificationsWithDeviceToken auch ohne Aufruf von registerForRemoteNotificationTypes in AppDelegate aufgerufen.

Wenn ich die Dokumentation und Beispielcode folgen:

Durch das Gerät Token anfordern und dann an den Provider vorbei, jedes Mal Ihrer Anwendung startet, helfen Sie sicherstellen, dass der Anbieter die aktuellen Token für das Gerät hat .

- (void)applicationDidFinishLaunching:(UIApplication *)app { 

    // other setup tasks here.... 
    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:... 
} 

Aber durch das Token anfordert, wenn die App startet, werden die Delegierten zweimal aufgerufen werden.

Ein paar Fragen und Klarheit benötigt:

  1. Für die erste Aufforderung geschehen, ein Anruf für registerForRemoteNotificationTypes muss gemacht werden, die Eingabeaufforderung angezeigt werden? Aber der Delegat wird zweimal aufgerufen, wenn ich dies manuell in AppDelegate aufrufe. Soll es so sein?

  2. Wenn der Benutzer die erste Eingabeaufforderung akzeptiert, wird didRegisterForRemoteNotificationsWithDeviceToken automatisch aufgerufen? Oder müssen wir registerForRemoteNotificationTypes in AppDelegate aufrufen? Aber dann wird der Delegierte zweimal für zukünftige Starts gerufen?

  3. Wenn der Benutzer dies verweigert und später über Setting akzeptiert, was passiert dann?

UPDATE

0. Für die erste Aufforderung geschehen, ein Anruf für registerForRemoteNotificationTypes muss gemacht werden, die Eingabeaufforderung angezeigt werden? Aber der Delegat wird zweimal aufgerufen, wenn ich dies manuell in AppDelegate aufrufe. Soll es so sein?Das ist nicht wahr. Herausgefunden, dass es tatsächlich 2 registerForRemoteNotiicationTypes in AppDelegate gemacht wurde.

Antwort

6

Wenn der Benutzer die anfängliche Eingabeaufforderung akzeptiert, wird didRegisterForRemoteNotificationsWithDeviceToken automatisch aufgerufen? Nein, Ihr Remote-Benachrichtigungsregistrierungsprozess wird gestartet, wenn auf "Zugriff zulassen" geklickt wird, die Methode didRegisterForRemoteNotificationsWithDeviceToken jedoch nur bei erfolgreicher APNS-Registrierung aufgerufen wird.

Wenn die Anwendung zuvor registriert hat, ruft registerForRemoteNotificationTypes: Ergebnisse im Betriebssystem das Gerät Token sofort an den Delegaten vorbei, ohne zu verursachen zusätzlichen Aufwand

Sie, ob eine Anwendung wie gestartet wird, bestimmen kann, ein Ergebnis von der Benutzer Tippen auf die Aktionsschaltfläche oder ob die Benachrichtigung an die bereits laufende Anwendung durch Prüfung der Anwendungsstatus geliefert wurde. In der Delegierten Implementierung der Anwendung: didReceiveRemoteNotification: oder Anwendung: didReceiveLocalNotification: Methode, den Wert der applicationState-Eigenschaft abrufen und evaluieren. Wenn der Wert UIApplicationStateInactive lautet, hat der Benutzer auf die Aktionsschaltfläche geklickt. Wenn der Wert UIApplicationStateActive lautet, war die Anwendung am weitesten vorne, wenn die Benachrichtigung erhalten hat.

+0

Ok. Es wird nur aufgerufen, wenn der Benutzer die Aufforderung und eine erfolgreiche Registrierung akzeptiert? Andernfalls wird die Fehlermethode aufgerufen? Was passiert, wenn der Benutzer die Aufforderung ablehnt, wird die Fehlermethode aufgerufen? –

+0

Wenn der Benutzer die Eingabe ablehnt, hat er den APNS-Registrierungsprozess nicht initiiert und die Fehlermethode wird nie aufgerufen. Die Methode didFailToRegisterForRemoteNotificationsWithError wird nur bei einem Registrierungsfehler aufgerufen. – thatzprem

1

Nein. Diese Methode wird nur einmal beim Start der App aufgerufen. Wenn es zweimal aufgerufen wird, wird es aus Ihrem Code aufgerufen. Versuchen Sie, um zu sehen, dass, wenn Sie Code wie

[application registerUserNotificationSettings:mySettings]; 
[application registerForRemoteNotifications]; 

in didFinishLaunchingWithOptions

dann unterwegs

- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings 

setzen ist, dass Sie [application registerForRemoteNotifications];

diesen Code so entfernen anrufen könnten.

Verwandte Themen