iOS Push Notification – Comment get datatables de notification lorsque vous click l'icône de l'application au lieu de notification

Similaire à cette question: Comment accéder aux données de notification push à distance sur applicationDidBecomeActive?

Mais le différent est comment pouvez-vous accéder aux données de notification lorsque vous êtes dans applicationDidBecomeActive et si vous avez cliqué sur l'icône de l'application au lieu de la notification push.

Le stream est: Si vous click la push notification alors didReceiveRemoteNotification sera déclenché, mais si vous click l'icône de l'application d'origine, seule applicationDidBecomeActive sera déclenchée et didReceiveRemoteNotification ne sera pas appelée.

Je suis à la search du cas plus tard, comment puis-je accéder aux données de notification push.

(Les deux cas supposent que l'application est en arrière-plan et n'a pas encore été détruite.)

Vous ne pouvez pas get la charge utile à distance en lançant l'application à partir de l'écran d'accueil.

Si datatables push sont importantes pour l'utilisation de l'application, chargez-la à partir de votre server après le lancement de l'application.

@fannheyward réponse est absolument correcte. Vous ne pouvez pas get la charge utile lorsque l'application est lancée en appuyant sur l'icône de l'application.

J'ai une idée, et si vous arrivez à savoir qu'une notification est en attente lorsque l'application est lancée en appuyant sur l'icône de l'application. Avec cette connaissance, votre application peut récupérer la charge utile de votre server.

Vous pouvez définir "Badge" dans chaque notification et sur ApplicationDidBecomeActive vous pouvez vérifier [application applicationIconBadgeNumber]> 0 pour savoir qu'une notification est active. Après avoir récupéré la charge utile de votre server, vous pouvez le définir sur 0 comme ci-dessous

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

Remarque: cela signifie que votre badge sera affiché sur le badge lorsque la notification est reçue. Je ne suis pas sûr du comportement lorsque le badge est désactivé par l'user à partir des parameters.

Si votre cible d'application est sur iOS7, vous pouvez le faire uniquement si l'application est active dans backgroud.

Dans les parameters de fonctionnalités de Xcode, vous devez activer les modes d'arrière-plan> Notifications à distance et écrire le code ci-dessous.

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

Si vous voulez le tester, il sera utile d'utiliser https://github.com/acoomans/SimulatorRemoteNotifications

  • Du côté server, assurez-vous de définir la propriété content-available avec une valeur de 1

Pour que cela fonctionne, j'ai aussi dû cocher la case de search d'arrière-plan.

Vous devriez get la notification dans la méthode launchWithOptions dans votre appDelegate quelque chose comme ceci:

 NSDictionary *remoteNotif = [launchOptions objectForKey: UIApplicationLaunchOptionsRemoteNotificationKey]; if(remoteNotif != nil){ //Handle your notification }