Activación inteligente "androide" desde una notificación push

Tengo una tarea simple: activar una aplicación desde el empuje de una actividad en particular (no en la actividad de inicio)

Imaging Tengo 3 actividades en la aplicación:

  1. A (splash)
  2. B (lista de artículos)
  3. C (detalles del artículo seleccionado)

Algunos requisitos previos:

  • Con el empuje estoy consiguiendo el id del artículo para seleccionar.
  • En el chapoteo estoy forzando una autentificación.
  • Una de las condiciones – no podría mover la autentificación digamos a otra actividad o al servicio de la aplicación por ejemplo.

Ahora podría crear varias declaraciones. Cuando toco presionar para activar la aplicación:

  1. Cuando Push es llegado el PushIntentService genera una notificación que especifica el id del artículo en los extras de la intención Si la aplicación se terminó debería iniciar la aplicación de la actividad A (para forzar la autenticación)
  2. Si la aplicación estuviera en segundo plano (funciona en segundo plano) debería volver a activarla en el mismo lugar (para omitir la autenticación)
  3. Una vez que la aplicación esté activada, navegaré a la Actividad C con el ítem del artículo extraído de los extras.

Ahora mismo estoy usando el siguiente código para generar la notificación (ítem 1, sintaxis Xamarin.Android):

var resultIntent = new Intent(Application.Context, typeof(SplashScreen)); resultIntent.AddFlags(ActivityFlags.ClearTop | ActivityFlags.SingleTop); if (extras.ContainsKey("ItemId")) { var itemId = extras["ItemId"]; resultIntent.PutExtra("ItemId", itemId); } var resultPendingIntent = PendingIntent.GetActivity(Application.Context, 0, resultIntent, 0); builder.SetContentIntent(resultPendingIntent); var notification = builder.Build(); 

Esta notificación funciona absolutamente bien en todos los casos, pero veo aquí un problema. Estoy reiniciando la aplicación desde el principio cada vez que estoy tocando en una notificación. Lo que quiero es cuando la aplicación es de fondo sólo necesito para activarlo (como iOS) y navegar a la página requerida (una activación más rápida y evitar la re-autenticación).

¿Cómo puedo lograr esto y modificar el código anterior?

Crear una nueva Activity para esto. La notificación debe iniciar esa Activity (sin ningún indicador). En onCreate() de esta nueva Activity , haga algo como esto:

 super.onCreate(...); if (!isTaskRoot() && alreadyAuthenticated) { // Go directly to details page Intent redirectIntent = new Intent(this, Details.class) redirect.putExtra("id", itemId); startActivity(redirectIntent); else { // This means the app was not running, so redirect to Splash Intent redirectIntent = new Intent(this, Splash.class) startActivity(redirectIntent); } finish(); 

isTaskRoot() devolverá true si la aplicación no se estaba ejecutando cuando el usuario hizo clic en la Notification . Si la aplicación ya se estaba ejecutando, debería devolver false .

Para probar si ya está autenticado, podría llamar a un método static o comprobar una variable static o tal vez usted tiene algún otro método para hacer esto. Dependiendo de lo que usted desea que la pila de la Activity parezca si el usuario estaba ya en las actividades del "detalle del artículo" o de la "lista del artículo", usted puede querer agregar SINGLE_TOP y / o CLEAR_TOP al redirigir a los detalles del artículo Activity .

Espero que entiendas el punto.

Encontré la respuesta sobre cómo simular el icono del lanzador. Lo estoy usando para crear una intención pendiente para mi empuje:

var launchIntent = PackageManager.GetLaunchIntentForPackage(PackageName);

Esto es exactamente lo que quería y funciona perfectamente bien en mi caso.

  • El clic de Android en la notificación no abre la Actividad adjunta
  • Firebase onMessageReceived no llamado cuando la aplicación está en segundo plano
  • Aplicación Phonegap de Android: llevar la actividad al frente
  • La intención del receptor de mensajes de la nube de Google no se inicia (devolución de llamada de intención de difusión: resultado = CANCELADO paraIntención)
  • Analizar notificaciones push en Android
  • La aplicación Ionic / Cordova no recibe notificación push en el fondo
  • GCM BroadcastReceiver setResultCode uso
  • Notificación de la mensajería en la nube de Firebase Vibración
  • Analizar: enviar notificaciones push desde la aplicación
  • BroadcastReceiver no se llama cuando la pantalla está bloqueada en Android
  • ¿Por qué firebase push_token devuelve la lista negra?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.