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:
- Firebase Push Notification - Cómo mostrar mensaje multilínea en Notificación
- Tamaño de icono de la barra de estado de Android - Uso de Cordova / Phonegap Push Plugin
- Enviar notificaciones push a la aplicación en una configuración limitada - fake_push_profile not found Ionic
- Firebase Cloud Messaging: mejores prácticas
- Productos de Android Gradle con notificaciones de Parse Push
- A (splash)
- B (lista de artículos)
- 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:
- 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)
- 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)
- 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?
- Enviar Notificaciones push a iOS / Android en WiFi cerrado (sin conexión a Internet)
- Nuevo error de origen desconocido del registro de la API de GCM
- Uso de GoogleApiClient desde IntentService de Notificación Push para enviar datos a Android Wear
- notificaciones push de Google Chrome android
- ¿Hay alguna razón para continuar usando IntentService para manejar mensajes de GCM?
- Cómo implementar notificaciones push para android en React Native
- ¿Cómo puedo ver los errores en console.developers.google.com?
- Enviar difusión al hacer clic en la notificación
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.
- Mejores Prácticas de Android – Comunicación entre Actividad y Fragmentos
- La mejor manera de manejar el error de entrada duplicado