Notificaciones agrupadas en iOS
Si tu app usa notificaciones locales y deseas agruparlas para organizar un poco mejor la barra de estado del dispositivo móvil, quédate unos minutos a leer esta entrada, seguro que te interesa.
Haciendo un poco de historia, a partir de la versión de iOS 12, el sistema operativo ya gestiona de una manera inteligente las agrupaciones en la pantalla de estado de notificaciones, de forma predeterminada esta agrupación se realiza por aplicación, pero si queremos ir un paso más allá y organizar en base a otros criterios, tenemos que pasar a la acción y tirar algunas líneas de código.
Por ejemplo, imagínate una aplicación de mensajería que da soporte a un comercio electrónico y esta recibe notificaciones de cada cliente potencial, para una mejor experiencia de usuario lo más idóneo es agrupar los mensajes en base a cada cliente, de manera que el usuario pueda ver de un vistazo los diferentes mensajes de cada comprador.
Vamos a ver los pasos necesarios para realizar en la plataforma iOS un agrupamiento de notificaciones.
Ahora solo tenemos que asignar la clase "NotificationCenterDelegate" delegado para las escuchas de los mensajes, el siguiente código lo incluimos dentro del método "FinishedLaunching" de la clase "AppDelegate", que se encuentra en el proyecto Xamarin iOS.
Enlaces de interés:
https://github.com/jcantos/xamarin-forms-notifications
https://www.javiercantos.net/2019/10/notificaciones-agrupadas-en-android-con-xamarin.html
Imagen de Thomas Ulrich en Pixabay
Haciendo un poco de historia, a partir de la versión de iOS 12, el sistema operativo ya gestiona de una manera inteligente las agrupaciones en la pantalla de estado de notificaciones, de forma predeterminada esta agrupación se realiza por aplicación, pero si queremos ir un paso más allá y organizar en base a otros criterios, tenemos que pasar a la acción y tirar algunas líneas de código.
Por ejemplo, imagínate una aplicación de mensajería que da soporte a un comercio electrónico y esta recibe notificaciones de cada cliente potencial, para una mejor experiencia de usuario lo más idóneo es agrupar los mensajes en base a cada cliente, de manera que el usuario pueda ver de un vistazo los diferentes mensajes de cada comprador.
Vamos a ver los pasos necesarios para realizar en la plataforma iOS un agrupamiento de notificaciones.
Clase delegada para la recepción de notificaciones
Lo primero que vamos a hacer es dirigirnos al proyecto de Xamarin iOS y crearnos una clase delegada que herede de "UNUserNotificationCenterDelegate" y posteriormente indicar a nuestro "UNUserNotificationCenter" que la clase anteriormente mencionada será la encargada de gestionar los mensajes.
public class NotificationCenterDelegate : UNUserNotificationCenterDelegate
{
[Export("userNotificationCenter:willPresentotification:withCompletionHandler:")]
public override void WillPresentNotification(UNUserNotificationCenter center, UNNotification notification, System.Action<UNNotificationPresentationOptions> completionHandler)
{
completionHandler(UNNotificationPresentationOptions.Alert);
}
}
Ahora solo tenemos que asignar la clase "NotificationCenterDelegate" delegado para las escuchas de los mensajes, el siguiente código lo incluimos dentro del método "FinishedLaunching" de la clase "AppDelegate", que se encuentra en el proyecto Xamarin iOS.
UNUserNotificationCenter center = UNUserNotificationCenter.Current;
center.RequestAuthorization(UNAuthorizationOptions.Alert, (bool success, NSError error) => {
// Set the Delegate regardless of success; users can modify their notification
// preferences at any time in the Settings app.
center.Delegate = new NotificationCenterDelegate();
});
Creación de la notificación
Para nuestro ejemplo particular hemos creado una clase de servicio a la que hemos denominado "NotificationService", está clase será instanciada mediante el uso de dependencias, de manera que desde el proyecto de Xamarin Forms haremos la siguiente llamada:
Echando un ojo al código fuente podéis verlo con más claridad:
Ejemplo de clase de servicio de notificaciones
Lo importante en este punto es la asignación del valor "ThreadIdentifier", es la propiedad que usará el sistema de notificaciones de iOS para agruparlas, el valor de "SummaryArgument" es de tipo cadena y podemos poner el valor que más nos convenga, aparece cuando las notificaciones se encuentran agrupadas, tal y como podéis observar en la captura de pantalla: "4 more notifications from <SummaryArgument>"
DependencyService.Get<INotificationService>().AddNotification();
Echando un ojo al código fuente podéis verlo con más claridad:
Ejemplo de clase de servicio de notificaciones
Lo importante en este punto es la asignación del valor "ThreadIdentifier", es la propiedad que usará el sistema de notificaciones de iOS para agruparlas, el valor de "SummaryArgument" es de tipo cadena y podemos poner el valor que más nos convenga, aparece cuando las notificaciones se encuentran agrupadas, tal y como podéis observar en la captura de pantalla: "4 more notifications from <SummaryArgument>"
var center = UNUserNotificationCenter.Current;
UNNotificationSettings settings = await center.GetNotificationSettingsAsync();
if (settings.AuthorizationStatus != UNAuthorizationStatus.Authorized)
{
return;
}
var content = new UNMutableNotificationContent()
{
ThreadIdentifier = GROUP_NAME,
Title = "Javier Cantos",
Body = "Mensaje de prueba",
SummaryArgument = "Javier Cantos"
};
var request = UNNotificationRequest.FromIdentifier(
Guid.NewGuid().ToString(),
content,
null
);
center.AddNotificationRequest(request, null);
Ejemplo de funcionamiento
Aquí os dejo un ejemplo de cómo nos quedarían las notificaciones agrupadas en nuestra StatusBar o barra de notificaciones.
Conclusiones
El ejemplo que hemos visto está basado en notificaciones locales, para las notificaciones remotas habría que realizar algunas adaptaciones que las comentaremos en próximas entradas del blog.
Puedes descargar el proyecto completo en GitHub y hacer pruebas, aquí tienes toda la información:
Enlaces de interés:https://github.com/jcantos/xamarin-forms-notifications
https://www.javiercantos.net/2019/10/notificaciones-agrupadas-en-android-con-xamarin.html
Comentarios
Publicar un comentario