2013-09-03 16 views
11

Un po 'simile a When is didRegisterForRemoteNotificationsWithDeviceToken called?.didRegisterForRemoteNotificationsWithDeviceToken ha chiamato due volte?

Quando l'utente primo ha installato l'app e richiede se accettare la notifica, verrà chiamato didRegisterForRemoteNotificationsWithDeviceToken se l'utente lo accetta?

Attualmente sto chiamando registerForRemoteNotificationTypes dopo che l'utente ha eseguito correttamente l'accesso o creato un account.

In successivi lanci, il delegato didRegisterForRemoteNotificationsWithDeviceToken viene chiamato anche senza chiamare registerForRemoteNotificationTypes in AppDelegate.

Se seguo la documentazione e codice di esempio:

Richiedendo il dispositivo token e passarlo al fornitore ogni volta che il lancio dell'applicazione, è contribuire a garantire che il provider ha il token corrente per il dispositivo .

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

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

Ma richiedendo il token quando i lanci di app, il delegato saranno chiamati due volte.

Un paio di domande e la chiarezza necessaria:

  1. Per l'iniziale richiesta di accadere, un invito a registerForRemoteNotificationTypes deve essere fatto per la richiesta di apparire? Ma il delegato verrà chiamato due volte se lo chiamo manualmente in AppDelegate. Supponiamo che sia così?

  2. Se l'utente accetta il prompt iniziale, verrà chiamato automaticamente didRegisterForRemoteNotificationsWithDeviceToken? O dobbiamo invocare registerForRemoteNotificationTypes in AppDelegate? Ma poi il delegato verrà chiamato due volte per i lanci futuri?

  3. Se l'utente nega e successivamente lo accetta tramite Impostazione, cosa succede?

UPDATE

0. Per l'iniziale richiesta di accadere, un invito a registerForRemoteNotificationTypes deve essere fatto per la richiesta di apparire? Ma il delegato verrà chiamato due volte se lo chiamo manualmente in AppDelegate. Supponiamo che sia così?Questo non è vero. Ho scoperto che c'erano effettivamente 2 registerForRemoteNotiicationTypes in AppDelegate.

risposta

6

Se l'utente accetta il prompt iniziale, si sarà richiamato automaticamenteRegisterForRemoteNotificationsWithDeviceToken? No, il processo di registrazione della notifica remota viene avviato quando si fa clic su "Consenti accesso", ma il metodo didRegisterForRemoteNotificationsWithDeviceToken viene chiamato solo in caso di registrazione APNS di successo.

Se l'applicazione è già registrato, chiamando registerForRemoteNotificationTypes: risultati nel sistema operativo passare il token dispositivo al delegato immediatamente senza incorrere ulteriore sovraccarico

È possibile determinare se un'applicazione è lanciato come un risultato di l'utente che tocca il pulsante di azione o se la notifica è stata consegnata all'applicazione già in esecuzione esaminando lo stato dell'applicazione . Nell'implementazione del delegato dell'applicazione : didReceiveRemoteNotification: o application: didReceiveLocalNotification: metodo, ottenere il valore della proprietà applicationState e valutarlo. Se il valore è UIApplicationStateInactive, l'utente ha toccato il pulsante di azione; se il valore è UIApplicationStateActive, l'applicazione era in primo piano quando ha ricevuto la notifica.

+0

Ok. Sarà chiamato solo se l'utente accetta il prompt e una registrazione corretta? Altrimenti verrà chiamato il metodo di errore? Cosa succede se l'utente rifiuta il prompt, verrà chiamato il metodo di errore? –

+0

Se l'utente rifiuta il prompt, non ha avviato il processo di registrazione APNS e il metodo di errore non verrà mai chiamato. didFailToRegisterForRemoteNotificationsWithError metodo viene chiamato solo in caso di errore di registrazione. – thatzprem

1

No. questo metodo viene chiamato solo una volta al momento dell'avvio dell'app. se viene chiamato due volte, verrà chiamato dal tuo codice. Prova a vedere che se si sta mettendo il codice come

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

in didFinishLaunchingWithOptions

poi Vai alla

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

è che si può essere chiamata [application registerForRemoteNotifications];

in modo da rimuovere il codice.

Problemi correlati