Traitement des notifications locales lorsque l'user appuie sur l'icône au lieu de l'alerte

Voici la situation que je veux gérer citée de la documentation d'Apple.

À la suite de la notification présentée, l'user appuie sur le button d'action de l'alerte ou appuie (ou clique) sur l'icône de l'application. Si le button d'action est appuyé (sur un périphérique exécutant iOS), le système lance l'application et l'application appelle l'application de son délégué: didFinishLaunchingWithOptions: method (si implémentée); il transmet la charge utile de notification (pour les notifications à distance) ou l'object de notification locale (pour les notifications locales).

Si l'icône de l'application est sélectionnée sur un appareil exécutant iOS, l'application appelle la même méthode mais ne fournit aucune information sur la notification. Si vous click l'icône de l'application sur un ordinateur exécutant OS X, l'application appelle la méthode applicationDidFinishLaunching du délégué: méthode dans laquelle le délégué peut get la charge utile de notification à distance.

Comment gérer cette situation s'il n'y a aucune information sur la notification?

Si je vous comprends bien, il semble que vous ayez un UILocalNotification qui a été déclenché, mais vous devez toujours le gérer si l'user appuie sur l'icône de l'application au lieu de la notification. Correct?

Si tel est le cas, à ma connaissance, vous ne serez pas en mesure de gérer la notification du délégué de l'application, car l'application n'est pas lancée ou retirée de l'arrière-plan par la notification, mais plutôt par l'interaction de l'user.

Cependant, si vous définissez un badgeNumber sur l'application avec la notification, vous pouvez essayer quelque chose comme ceci:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { if (launchOptions[UIApplicationLaunchOptionsLocalNotificationKey]) { UILocalNotification *notification = launchOptions[UIApplicationLaunchOptionsLocalNotificationKey]; } else if ([UIApplication sharedApplication].applicationIconBadgeNumber > 0) { // Assume that user launched the app from the icon with a notification present. }} 

Vous devrez peut-être également vérifier l'application badgeNumber in - (void)applicationDidBecomeActive:(UIApplication *)application .

Améliorer à @Aron Crittendon réponse:

Pensez aussi à gérer cela dans applicationDidBecomeActive:

 -(void)applicationDidBecomeActive:(UIApplication *)application { if ([UIApplication sharedApplication].applicationIconBadgeNumber > 0) { //application is in background, fired notification and user tapped app icon with badge } } 

Comme l'indique la documentation, si vous appuyez sur l'icône sur iOS (et non sur l'alerte ou la bannière de la notification), la même méthode est appelée, mais vous ne recevez aucune information de notification. Il n'y a aucun moyen de gérer une notification locale simplement en appuyant sur l'icône de l'application.