2013-09-03 16 views
11

Nieco podobne do When is didRegisterForRemoteNotificationsWithDeviceToken called?.didRegisterForRemoteNotificationsWithDeviceToken wywołano dwa razy?

Gdy użytkownik po raz pierwszy zainstalował aplikację i wyświetli pytanie, czy przyjąć powiadomienie, czy zostanie wywołany didRegisterForRemoteNotificationsWithDeviceToken, jeśli użytkownik to zaakceptuje?

Obecnie dzwonię pod numer registerForRemoteNotificationTypes po tym, jak użytkownik pomyślnie się zaloguje lub utworzy konto.

W kolejnych uruchomieniach delegat didRegisterForRemoteNotificationsWithDeviceToken jest wywoływany nawet bez wywoływania registerForRemoteNotificationTypes w AppDelegate.

Jeśli śledzę Docs i przykładowy kod:

Wnioskując urządzenie tokenu i przekazania go do dostawcy Za każdym razem uruchamia aplikację, przyczyni się do zapewnienia, że ​​dostawca ma bieżącego tokenu dla urządzenia .

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

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

Ale żądając token gdy uruchamia app, delegat będzie wywoływana dwukrotnie.

Kilka pytań i jasności potrzebne:

  1. dla początkowego szybka wydarzy, to wezwanie do registerForRemoteNotificationTypes muszą być wykonane w odniesieniu do bezzwłocznej pojawiać? Ale delegat zostanie wywołany dwukrotnie, jeśli zadzwonię do niego ręcznie w AppDelegate. Czy to jest tak?

  2. Jeśli użytkownik zaakceptuje początkowy monit, czy zostanie automatycznie wywołana didRegisterForRemoteNotificationsWithDeviceToken? Lub musimy wywołać registerForRemoteNotificationTypes w AppDelegate? Ale wtedy delegat zostanie wezwany dwukrotnie na przyszłe premiery?

  3. Jeśli użytkownik odmówi, a następnie zaakceptuje go za pośrednictwem Ustawień, co się stanie?

UPDATE

0. Dla początkowa szybka wydarzy, to wezwanie do registerForRemoteNotificationTypes muszą być wykonane w odniesieniu do bezzwłocznej pojawiać? Ale delegat zostanie wywołany dwukrotnie, jeśli zadzwonię do niego ręcznie w AppDelegate. Czy to jest tak?To nie jest prawda. Okazało się, że w AppDelegate wykonano 2 registerForRemoteNotiicationTypes.

Odpowiedz

6

Jeśli użytkownik zaakceptuje początkowy monit, czy właściwośćRegisterForRemoteNotificationsWithDeviceToken zostanie wywołana automatycznie? Nie, proces rejestracji zdalnego powiadomienia rozpoczyna się po kliknięciu przycisku "Zezwól na dostęp", ale metoda didRegisterForRemoteNotificationsWithDeviceToken jest wywoływana tylko po pomyślnej rejestracji APNS.

Jeżeli wniosek został wcześniej zarejestrowany, nazywając registerForRemoteNotificationTypes: wyniki w systemie operacyjnym przechodzącej token urządzenia do delegata natychmiast bez ponoszenia dodatkowy narzut

Można określić, czy dana aplikacja jest uruchomiona jako w wyniku kliknięcia przez użytkownika przycisku czynności lub powiadomienia o numerze dostarczonego do działającej już aplikacji poprzez sprawdzenie stanu aplikacji . W przypadku wdrożenia przez delegata aplikacji : didReceiveRemoteNotification: lub : metoda didReceiveLocalNotification: pobierz wartość właściwości applicationState i oceń ją. Jeśli wartość wynosi UIApplicationStateInactive, użytkownik stuknął przycisk akcji; jeśli wartość to UIApplicationStateActive, aplikacja otrzymała powiadomienie z wyprzedzeniem, gdy otrzymała powiadomienie.

+0

Ok. Będzie on wywoływany tylko wtedy, gdy użytkownik zaakceptuje zgłoszenie i udaną rejestrację? W przeciwnym razie zostanie wywołana metoda awarii? Co się stanie, jeśli użytkownik odrzuci monit, czy zostanie wywołana metoda błędu? –

+0

Jeśli użytkownik odrzuci monit, nie zainicjował procesu rejestracji APNS i metoda błędu nigdy nie zostanie wywołana. didFailToRegisterForRemoteNotifications MetodaWithError jest wywoływana tylko przy niepowodzeniu rejestracji. – thatzprem

1

Nie. ta metoda została wywołana tylko raz podczas uruchamiania aplikacji. jeśli zostanie wywołane dwa razy, zostanie wywołane z twojego kodu. Spróbuj zobaczyć, że jeśli wprowadzenie kodu jak

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

w didFinishLaunchingWithOptions

potem idź do

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

to, że może być wywołanie [application registerForRemoteNotifications];

więc usunąć ten kod.

Powiązane problemy