2010-01-04 16 views

risposta

18

L'UIApplication delegato ha il metodo

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo 

che è necessario implementare. Questo riceve la notifica quando l'app è in esecuzione.

Se l'applicazione non è attualmente in esecuzione e una notifica viene ricevuto allora la vostra applicazione può essere lanciata con

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 

con i dettagli di notifica detenute nel dizionario launchOptions. se il dizionario è zero, l'utente ha toccato l'icona dell'applicazione normalmente.

2

La documentazione di Apple per le notifiche push spiega questo:

Tuttavia, ci sono due situazioni in cui applicationDidFinishLaunching: non è un sito implementazione adatto:

  • L'applicazione è in esecuzione quando la notifica arriva.
  • Il carico utile della notifica contiene dati personalizzati che l'applicazione può utilizzare.

Nel primo caso, in cui l'applicazione è in esecuzione quando iPhone OS riceve una notifica remota, è necessario implementare l'applicazione: didReceiveRemoteNotification: Metodo di UIApplicationDelegate se volete scaricare immediatamente i dati. Dopo il download, assicurarsi di rimuovere il badge dall'icona dell'applicazione. (Se l'applicazione verifica frequentemente con il suo fornitore per i nuovi dati, l'implementazione di questo metodo potrebbe non essere necessaria.)

Questo significa che se la vostra applicazione: didReceiveRemoteNotification: metodo delegato si chiama, la vostra applicazione è in esecuzione.

76

Ecco il modo più appropriato di gestire lo stato attivo/inattivo dell'app.

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { 
     // check for the app state 
     UIApplicationState state = [application applicationState]; 

     if (state == UIApplicationStateActive) { 
      //the app is in the foreground, so here you do your stuff since the OS does not do it for you 
      //navigate the "aps" dictionary looking for "loc-args" and "loc-key", for example, or your personal payload) 
     } 

    application.applicationIconBadgeNumber = 0; 
} 

didReceiveRemoteNotification: viene chiamato quando l'applicazione è in esecuzione, sì, ma quando viene sospeso, l'iOS si occupa di mettere il badge, ecc Se l'applicazione è in primo piano, il sistema operativo non fa nulla e chiama semplicemente il tuo didReceiveRemoteNotification:.

6

Se avete intenzione di controllare applicationState su iOS inferiore a 4, è necessario verificare che applicationState è supportato:

if ([application respondsToSelector:@selector(applicationState)]){ 
    // Safe to check applicationState 
    UIApplicationState state = [application applicationState]; 
} 
26

seconda cosa si intende per "lanciato", o si è alla ricerca di :

  • risposta di Kevin sopra (distinzione tra avviato o non avviato)
  • o questa (differenzia tra sospeso o attivo, ma già avviato):

Utilizzare un flag impostato su true quando l'applicazione diventa attiva e false quando l'applicazione non è attiva.

Flag (nel file di intestazione [.h]):

BOOL applicationIsActive; 

Codice (nel file di implementazione [.m]):

- (void)applicationDidBecomeActive:(UIApplication *)application { 
    applicationIsActive = YES; 
} 

- (void)applicationWillResignActive:(UIApplication *)application { 
    applicationIsActive = NO; 
} 

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo 
{ 
    if (applicationIsActive) { 
     // Handle notification in app active state here 
    } 
    else { 
     // Handle notification in app suspended state here 
    } 

Questo funziona perché quando l'applicazione viene sospesa, il Il sistema operativo chiama "applicationDidReceiveRemoteNotification" prima di chiamare "applicationDidBecomeActive" durante il processo di "riattivazione".

La risposta "completa" è in realtà la risposta di Kevin più questa risposta.

Spero che questo aiuti.

+0

Questo è un gd. Grazie –

Problemi correlati