Android de vinculación profunda. La intención no se restablece cuando la aplicación se abre desde el historial

Tengo un problema con la tarea de Android y la gestión de intenciones.

Guión

> El usuario recibe un empuje con un enlace profundo en la aplicación.
> Mostramos una notificación que pone el URI en los Datos de Intención.
> El usuario hace clic en la notificación, se ingresa a la aplicación y se redirige a alguna Característica1Actividad descrita por el enlace profundo.
> El usuario mira a su alrededor y sale de la aplicación.
> Más tarde, el usuario abre la aplicación desde el historial (tecla de inicio prolongado o multitarea).
> Ahora se usa la misma intención que se usó en la notificación (con el enlace profundo en los Datos de Intención) para iniciar la aplicación.
> Por lo tanto, el usuario es llevado nuevamente a Feature1Activity.

Problema:

El inicio de la aplicación desde el historial (botón de inicio de pulsación múltiple o multitarea) no restablece la Tarea (lo que hace cuando se inicia desde el ícono de la aplicación).

Entiendo que iniciar una aplicación desde el historial no se supone que reinicie la tarea, ya que está diseñada para ser utilizada como “reenviarse en el lugar donde estaba”. Sin embargo, en mi caso, esto es un problema ya que el lanzamiento de la aplicación desde una notificación es una cosa de una sola vez.

¿Alguien más encontró este problema? Alguien sabe alguna solución?

Más en profundidad

La intención dentro del PendingIntent se construye así:

Intent intent = new Intent (Intent.ActionView);
intent.addFlags (Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags (Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags (Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
intent.setData (Uri.Parse (DEEP_LINK_URL));

Me enteré de FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET este día y realmente pensé que no iba a eliminar mi problema, pero no hizo ninguna diferencia.

Hay tres actividades de interés:

SplashActivity       (main launcher & listener of the deep-linking schema -- this activity just redirects either to login or OverviewActivity)
OverviewActivity     (authorized user's main activity)
Feature1Activity     (any feature that the deep-link is pointing to)

Lo que sucede cuando el usuario hace clic en la notificación es que SplashActivity actúa como un oyente para el esquema y convierte la url de enlace profundo en dos intentos para iniciar OverviewActivity y Feature1Activity usando Activity.startActivities (Intent []).

Cuando veo la intención de la notificación dentro de SplashActivity, siempre contiene el enlace profundo en los Datos.

Un trabajo alrededor

Hay una solución alternativa, estableciendo algunos campos booleanExtra en el intento de notificación (por ejemplo, “ignoreWhenLaunchedFromHistory” = true) y luego verifique SplashActivity antes de redirigir

boolean fromHistory = (getIntent().getFlags() & FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) == FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY;

if (fromHistory && getIntent().getBooleanExtra ("ignoreWhenLaunchedFromHistory", false))
    // Don't follow deep-link even if it exists
else
    // Follow deep-link

Excepto que es hacker y feo, ¿puedes ver algún problema con este trabajo?

EDITAR: El trabajo alrededor solo funciona cuando soy responsable de enviar la intención con el enlace profundo. Dado que ninguna fuente externa puede conocer el extra “ignoreWhenLaunchedFromHistory”.

Mejor respuesta
De lo que obtengo, tal vez usando android: excludeFromRecents = “true” en su manifiesto (como propiedad de la declaración de actividad) podría mejorar el problema

Por favor indique la dirección original:Android de vinculación profunda. La intención no se restablece cuando la aplicación se abre desde el historial - Código de registro