Gestiona las acciones de notificaciones push de Android en Xamarin.Forms
azure android-activity (1)
Así que acabo de implementar FCM en mi aplicación Android Xamarin.Forms con esta guía . Todo funciona bastante bien, las notificaciones llegan, reproducen un sonido, tienen un ícono, etc. Luego, quería agregar una acción a mi notificación, tiene que abrir una determinada página en mi aplicación.
Y ese es mi problema, Xamarin.Forms pone todo el contenido de Android en una sola actividad. Lo que significa que abrir una página determinada hace que toda la OnCreate de MainActivity se cargue nuevamente (y LoadApplication también).
Mi notificación
var notificationIntent = new Intent(this, typeof(MainActivity));
notificationIntent.AddFlags(ActivityFlags.ClearTop | ActivityFlags.NewTask);
notificationIntent.PutExtras(intent.Extras);
var pendingIntent = PendingIntent.GetActivity(this, 0, notificationIntent, PendingIntentFlags.UpdateCurrent);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
.SetSmallIcon(Resource.Drawable.icon)
.SetStyle(new NotificationCompat.BigTextStyle().BigText(text))
.SetContentIntent(pendingIntent)
.SetAutoCancel(true)
.SetPriority((int)NotificationPriority.Max)
.SetVibrate(new long[] { 0, 250, 100, 250, 0 })
.SetLights(Color.Red, 1, 250)
.SetContentTitle("Eindexamen")
.SetContentText(text);
Carga útil de FCM
{"data":{"message":"Notification Hub test notification", "action":"open-exam", "exam-id":"F50FC23C-B4EE-E611-80C3-000D3A218F79"}}
Entonces mi pregunta es, ¿cómo abrir una página de Xamarin.Forms sin volver a cargar toda la aplicación en Android?
Lo fijo resultó ser bastante fácil.
En lugar de utilizar ActivityFlags.ClearTop
y ActivityFlags.NewTask
use ActivityFlags.SingleTop
.
Luego en su MainActivity.cs anule el método OnNewIntent.
protected override void OnNewIntent(Intent intent)
{
base.OnNewIntent(intent);
ProcessPushNotification(intent);
}