2012-08-23 15 views
34

simile a questa domanda: How do I access remote push notification data on applicationDidBecomeActive?iOS Push Notification - Come ottenere i dati di notifica quando si fa clic sull'icona dell'app invece di notifica

Ma il diverso è come si può accedere ai dati di notifica quando si è in applicationDidBecomeActive e se hai fatto clic sull'icona dell'app invece della notifica push.

Il flusso è: Se si fa clic su verrà attivato il push notification poi didReceiveRemoteNotification, ma se si fa clic sull'icona dell'app originale, solo applicationDidBecomeActive verrà attivato e non si chiamerà didReceiveRemoteNotification.

Sto cercando il caso successivo, quindi come posso accedere ai dati di notifica push.

(Sia caso supponendo che l'applicazione è in background e tuttavia non uccisi.)

+2

Questo non è possibile. I dati di notifica vengono trasmessi all'app solo se vengono avviati in risposta alla notifica e non quando si tocca l'icona dell'app. –

+1

Quali informazioni trasmetti con le notifiche push? Per me sembra che tu abbia fatto un difetto di progettazione se non riesci ad aprire la tua app in modo conveniente senza prima ricevere una notifica push. – xci

risposta

35

Non è possibile ottenere payload spinta a distanza con il lancio di app dalla homescreen.

Se i dati di push sono importanti per l'utilizzo delle app, caricarli dal server dopo l'avvio dell'app.

+2

Per continuare su questa traiettoria, è possibile inviare un piccolo carico utile al server ogni volta che l'app viene avviata, quindi fare in modo che il server ascolti quel carico utile e spinga immediatamente i dati. Questa sarebbe la soluzione più vicina a cui posso pensare per raggiungere il tuo obiettivo. –

-6

Si dovrebbe ottenere la notifica nel metodo launchWithOptions nel vostro qualcosa AppDelegate come questo:

NSDictionary *remoteNotif = [launchOptions objectForKey: UIApplicationLaunchOptionsRemoteNotificationKey]; 

    if(remoteNotif != nil){ 
     //Handle your notification 
    } 
+1

L'app è attualmente in background e faccio clic sull'app da homescreen anziché da notifica. – Howard

6

@fannheyward risposta è assolutamente corretto. Non è possibile ottenere un payload all'avvio dell'applicazione toccando l'icona dell'app.

Ho un'idea, cosa succede se si viene a conoscenza del fatto che alcune notifiche sono in attesa quando l'app viene avviata toccando l'icona dell'app. Con questa conoscenza la tua app può recuperare il carico utile dal tuo server.

È possibile impostare "Badge" in ciascuna di tali notifiche e su applicationDidBecomeActive è possibile controllare [application applicationIconBadgeNumber]> 0 per sapere che alcune notifiche sono attive. Dopo il recupero del carico utile dal server è possibile impostare a 0 come qui di seguito

[UIApplication sharedApplication] setApplicationIconBadgeNumber:1]; 
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0]; 

Si prega di notare: Questo significa la vostra applicazione avrà distintivo visualizzata su di esso quando si riceve la notifica. Non sono sicuro del comportamento quando il badge è disabilitato dall'utente dalle impostazioni.

+0

Sto usando lo stesso approccio. Prendi nota che l'utente * potrebbe * avere avvisi di notifica attivati, ma * badge disabilitati * per la tua app. Praticamente, però ... chi lo fa? ;) – Timo

+0

Riguardo a >> Non sono sicuro del comportamento quando il badge è disabilitato dall'utente dalle impostazioni - L'applicazione può ancora ottenere l'evento di conteggio corretto se il badge non è visualizzato sull'icona dell'app –

3

Se l'obiettivo dell'applicazione è su iOS7, è possibile farlo solo se l'applicazione è attiva in backgroud.

Nelle impostazioni delle funzionalità in Xcode, è necessario abilitare le Modalità di sfondo> Notifiche remote e scrivere il codice riportato di seguito.

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler 
{ 
    // save userInfo in NSUserDefaults 
    completionHandler(UIBackgroundFetchResultNoData); 
} 

Se volete provarlo, sarà utile usare https://github.com/acoomans/SimulatorRemoteNotifications

  • Dal lato server, assicurarsi di impostare la proprietà dei contenuti disponibili con un valore di 1

Per far funzionare ciò dovevo anche controllare la casella di recupero dello sfondo.

+0

Ho provato questo su un iphone 6 con iOS8, content-available = 1, modalità di background notifica remota, app in background. didReceieveRemoteNotification viene chiamato quando viene ricevuta la notifica. NON è CHIAMATO quando l'app è aperta. Questo non risponde alla domanda. – wyu

Problemi correlati