Il y a beaucoup de threads stackoverflow concernant ce sujet, mais je n'ai toujours pas trouvé de bonne solution.
Si l'application n'est pas en arrière - plan, je peux vérifier launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey]
en application:didFinishLaunchingWithOptions:
appel pour voir si elle est ouverte à partir d' une notification.
Si l'application est en arrière-plan, tous les articles suggèrent d'utiliser application:didReceiveRemoteNotification:
et de vérifier l'état de l'application. Mais comme j'ai expérimenté (et aussi comme le nom de cette API le suggère), cette méthode est appelée lorsque la notification est reçue, au lieu d'être tapée.
Le problème est donc que si l'application est lancée puis mise en arrière-plan et que vous savez qu'une notification est reçue de application:didReceiveNotification
( application:didFinishLaunchWithOptions:
ne se déclenchera pas à ce stade), comment savoir si l'utilisateur a repris l'application à partir de en appuyant sur la notification ou en appuyant simplement sur le icône de l'application? Parce que si l'utilisateur a tapé sur la notification, l'attente est d'ouvrir la page mentionnée dans cette notification. Sinon, ça ne devrait pas.
Je pourrais utiliser handleActionWithIdentifier
pour les notifications d'action personnalisées, mais cela ne se déclenche que lorsqu'un bouton d'action personnalisé est appuyé, pas lorsque l'utilisateur appuie sur le corps principal de la notification.
Merci.
ÉDITER:
après avoir lu une réponse ci-dessous, je me suis dit que je pouvais clarifier ma question:
Comment différencier ces 2 scénarios:
(A) 1.app passe à l'arrière-plan; 2. notification reçue; 3. l'utilisateur appuie sur la notification; 4. l'application entre au premier plan
(B) 1.app passe à l'arrière-plan; 2. notification reçue; 3. l'utilisateur ignore la notification et appuie sur l'icône de l'application plus tard; 4. l'application entre au premier plan
Depuis application:didReceiveRemoteNotification:
est déclenché dans les deux cas à l'étape 2.
Ou, devrait-il application:didReceiveRemoteNotification:
être déclenché à l'étape 3 pour (A) uniquement, mais j'ai en quelque sorte mal configuré mon application, donc je la vois à l'étape 2?