Similaire à cette question: Comment puis-je accéder aux données de notification Push à distance sur applicationDidBecomeActive?
Mais la différence 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 flux est le suivant: si vous cliquez sur le Push notification
puis didReceiveRemoteNotification
sera déclenché, mais si vous cliquez sur l'icône de l'application d'origine, seul applicationDidBecomeActive
sera déclenché et didReceiveRemoteNotification
ne sera pas appelé.
Je recherche le dernier cas, alors comment puis-je accéder aux données de notification Push.
(Les deux cas supposent que l'application est en arrière-plan et pas encore tuée.)
Vous ne pouvez pas obtenir la charge utile Push à distance en lançant l'application à partir de l'écran d'accueil.
Si les données Push sont importantes pour l'utilisation de l'application, chargez-les depuis votre serveur après le lancement de l'application.
La réponse @fannheyward est absolument correcte. Vous ne pouvez pas obtenir la charge utile lorsque l'application est lancée en appuyant sur l'icône de l'application.
J'ai une idée, que faire si vous apprenez 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 serveur.
Vous pouvez définir "Badge" dans chacune de ces notifications 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 serveur, vous pouvez la mettre à 0 comme ci-dessous
[UIApplication sharedApplication] setApplicationIconBadgeNumber:1];
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
Veuillez noter: cela signifie que votre application aura un badge affiché dessus lorsque la notification sera reçue. Je ne suis pas sûr du comportement lorsque le badge est désactivé par l'utilisateur à partir des paramètres.
Si votre cible d'application est sur iOS7, vous ne pouvez le faire que si l'application est vivante dans backgroud.
Dans les paramètres de capacité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
Pour que cela fonctionne, j'ai également dû cocher la case de récupération d'arrière-plan.