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.

  • Enviar difusión al hacer clic en la notificación
  • El clic de Android en la notificación no abre la Actividad adjunta
  • Tamaño de icono de la barra de estado de Android - Uso de Cordova / Phonegap Push Plugin
  • ¿Cómo puedo ver los errores en console.developers.google.com?
  • Analizar: enviar notificaciones push desde la aplicación
  • Android: administrar múltiples notificaciones push en el dispositivo de una aplicación
  • Cómo mostrar las notificaciones Heads up android
  • FCM: onMessageReceived no se llama, la notificación no llegó incluso después de enviar msg a fcm?
  • Parse Push - Cómo abrir automáticamente una actividad sin la acción del usuario al recibir un empujón en Android
  • 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)
  • Productos de Android Gradle con notificaciones de Parse Push
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.