Hay muchos hilos de stackoverflow con respecto a este tema, pero todavía no encontré una buena solución.
Si la aplicación no está en el fondo, puedo comprobar launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey]
en la application:didFinishLaunchingWithOptions:
llamada para ver si se abre desde una notificación.
Si la aplicación está en segundo plano, todas las publicaciones sugieren usar application:didReceiveRemoteNotification:
y verificar el estado de la aplicación. Pero como experimenté (y también como sugiere el nombre de esta API), este método se llama cuando se recibe la notificación, en lugar de tocarlo.
Entonces, el problema es que, si la aplicación se inicia y luego se pone en segundo plano, y sabe que se recibe una notificación de application:didReceiveNotification
( application:didFinishLaunchWithOptions:
no se activará en este punto), ¿cómo saber si el usuario reanudó la aplicación tocando la notificación o simplemente tocando el icono de la aplicación? Porque si el usuario tocó la notificación, la expectativa es abrir la página mencionada en esa notificación. De lo contrario, no debería.
Podría usarlo handleActionWithIdentifier
para notificaciones de acciones personalizadas, pero esto solo se activa cuando se toca un botón de acción personalizada, no cuando el usuario toca el cuerpo principal de la notificación.
Gracias.
EDITAR:
después de leer una respuesta a continuación, pensé que de esta manera puedo aclarar mi pregunta:
¿Cómo podemos diferenciar estos 2 escenarios?
(A) 1.app pasa a segundo plano; 2. notificación recibida; 3. el usuario toca la notificación; 4. la aplicación entra en primer plano
(B) 1.app pasa a segundo plano; 2. notificación recibida; 3. el usuario ignora la notificación y toca el icono de la aplicación más tarde; 4. la aplicación entra en primer plano
Dado que application:didReceiveRemoteNotification:
se activa en ambos casos en el paso 2.
¿O debería application:didReceiveRemoteNotification:
activarse en el paso 3 solo para (A), pero de alguna manera configuré mal mi aplicación, así que la veo en el paso 2?