web-dev-qa-db-fra.com

Notification push iOS - Comment obtenir les données de notification lorsque vous cliquez sur l'icône de l'application au lieu de la notification

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.)

36
Howard

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.

38
fannheyward

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.

6
msk

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

  • Du côté du serveur, assurez-vous de définir la propriété de contenu disponible avec une valeur de 1

Pour que cela fonctionne, j'ai également dû cocher la case de récupération d'arrière-plan.

4
kasajei