Notificaciones en Xamarin.iOS
De forma predeterminada, iOS 12 coloca todas las notificaciones de una aplicación en un grupo. La pantalla de bloqueo y el Centro de notificaciones muestran este grupo como una pila con la notificación más reciente en la parte superior. Los usuarios pueden expandir el grupo para ver todas las notificaciones que contiene y descartar el grupo en su conjunto.
Las aplicaciones también pueden agrupar notificaciones por subproceso, lo que facilita a los usuarios encontrar e interactuar con la información específica que les interesa.
Solicitar autorización y permitir notificaciones en primer plano
Para que una aplicación pueda enviar notificaciones locales, debe solicitar permiso para hacerlo. En el AppDelegate
de la aplicación de muestra, el método FinishedLaunching
solicita este permiso:
public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions)
{
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 = this;
});
return true;
}
El Delegate
(establecido anteriormente) para un UNUserNotificationCenter
decide si una aplicación en primer plano debe mostrar o no una notificación entrante llamando al controlador de finalización pasado a WillPresentNotification
:
[Export("userNotificationCenter:willPresentNotification:withCompletionHandler:")]
public void WillPresentNotification(UNUserNotificationCenter center, UNNotification notification, System.Action<UNNotificationPresentationOptions> completionHandler)
{
completionHandler(UNNotificationPresentationOptions.Alert);
}
El parámetro UNNotificationPresentationOptions.Alert
indica que la aplicación debe mostrar la alerta, pero no reproducir un sonido ni actualizar un distintivo.
Notificaciones de subproceso
Pulse el mensaje de la aplicación de ejemplo con Alice botón repetidamente para que envíe notificaciones para una conversación con un amigo llamado Alice. Dado que las notificaciones de esta conversación forman parte del mismo subproceso, la pantalla de bloqueo y el Centro de notificaciones las agrupan.
Para iniciar una conversación con un amigo diferente, pulse el botón Elegir un nuevo amigo. Las notificaciones de esta conversación aparecen en un grupo independiente.
ThreadIdentifier
Cada vez que la aplicación de ejemplo inicia un nuevo subproceso, crea un identificador de subproceso único:
void StartNewThread()
{
threadId = $"message-{friend}";
// ...
}
Para enviar una notificación subprocesada, la aplicación de ejemplo:
- Compruebe si la aplicación tiene autorización para enviar una notificación.
- Crea una objeto
UNMutableNotificationContent
para el contenido de la notificación y establece suThreadIdentifier
al identificador de subproceso creado anteriormente. - Crea una solicitud y programa la notificación:
async partial void ScheduleThreadedNotification(UIButton sender)
{
var center = UNUserNotificationCenter.Current;
UNNotificationSettings settings = await center.GetNotificationSettingsAsync();
if (settings.AuthorizationStatus != UNAuthorizationStatus.Authorized)
{
return;
}
string author = // ...
string message = // ...
var content = new UNMutableNotificationContent()
{
ThreadIdentifier = threadId,
Title = author,
Body = message,
SummaryArgument = author
};
var request = UNNotificationRequest.FromIdentifier(
Guid.NewGuid().ToString(),
content,
UNTimeIntervalNotificationTrigger.CreateTrigger(1, false)
);
center.AddNotificationRequest(request, null);
// ...
}
Todas las notificaciones de la misma aplicación con el mismo identificador de subproceso aparecerán en el mismo grupo de notificaciones.
Nota:
Para establecer un identificador de subproceso en una notificación remota, agregue la clavethread-id
a la carga JSON de la notificación. Consulte el documento Generación de una notificación remota de Apple para obtener más información.
SummaryArgument
SummaryArgument
especifica cómo afectará una notificación al texto de resumen que aparece en la esquina inferior izquierda de un grupo de notificaciones al que pertenece la notificación. iOS agrega texto de resumen de las notificaciones del mismo grupo para crear una descripción general de resumen.
La aplicación de ejemplo usa el autor del mensaje como argumento de resumen. Con este enfoque, el texto de resumen de un grupo de seis notificaciones con Alice podría ser 5 notificaciones más de Alice y Me.
Notificaciones de subproceso
Cada pulsación del aviso de cita de la aplicación de muestra envía una de las distintas notificaciones de recordatorio de citas. Dado que estos recordatorios no están en subprocesos, aparecen en el grupo de notificaciones de nivel de aplicación en la pantalla de bloqueo y en el Centro de notificaciones.
Para enviar una notificación no leída, el método ScheduleUnthreadedNotification
de la aplicación de ejemplo usa código similar al anterior.
Sin embargo, no establece el ThreadIdentifier
en el objeto UNMutableNotificationContent
.