Notificaciones en Xamarin.iOS
Importante
La información de esta sección pertenece a iOS 9 y versiones anteriores. Para iOS 10 y versiones posteriores, consulte la guía del marco de notificaciones de usuario.
iOS tiene tres maneras de indicar al usuario que se ha recibido una notificación:
- Sonido o vibración: iOS puede reproducir un sonido para notificar a los usuarios. Si el sonido está deshabilitado, el dispositivo se puede configurar para vibrar.
- Alertas: es posible mostrar un cuadro de diálogo en la pantalla con información sobre la notificación.
- Distintivos: cuando se publica una notificación, se puede mostrar un número (distintivo) en el icono de la aplicación.
iOS también proporciona un Centro de notificaciones que mostrará todas las notificaciones, tanto locales como remotas, al usuario. Los usuarios pueden acceder a esto deslizando hacia abajo desde la parte superior de la pantalla:
Creación de notificaciones locales en iOS
iOS facilita bastante la creación y control de notificaciones locales. En primer lugar, iOS 8 requiere que las aplicaciones soliciten el permiso del usuario para mostrar las notificaciones. Agregue el código siguiente a la aplicación antes de intentar enviar una notificación local: normalmente en el métodoFinishedLaunching de AppDelegate:
var notificationSettings = UIUserNotificationSettings.GetSettingsForTypes(
UIUserNotificationType.Alert | UIUserNotificationType.Badge | UIUserNotificationType.Sound, null
);
application.RegisterUserNotificationSettings(notificationSettings);
Para programar una notificación local, cree un objeto UILocalNotification
, establezca el FireDate
y programe a través del método ScheduleLocalNotification
en el objeto UIApplication.SharedApplication
. El siguiente fragmento de código muestra cómo programar una notificación que se activará un minuto en el futuro y mostrará una alerta con un mensaje:
UILocalNotification notification = new UILocalNotification();
notification.FireDate = NSDate.FromTimeIntervalSinceNow(15);
//notification.AlertTitle = "Alert Title"; // required for Apple Watch notifications
notification.AlertAction = "View Alert";
notification.AlertBody = "Your 15 second alert has fired!";
UIApplication.SharedApplication.ScheduleLocalNotification(notification);
En la captura de pantalla siguiente se muestra el aspecto de esta alerta:
Tenga en cuenta que si el usuario eligió no permitir notificaciones, no se mostrará nada.
Si desea aplicar un distintivo al icono de la aplicación con un número, puede establecerlo como se muestra en el código de línea siguiente:
notification.ApplicationIconBadgeNumber = 1;
Para reproducir un sonido con el icono, establezca la propiedad SoundName en la notificación como se muestra en el siguiente fragmento de código:
notification.SoundName = UILocalNotification.DefaultSoundName;
Si el sonido de notificación es superior a 30 segundos, iOS reproducirá el sonido predeterminado en su lugar.
Importante
Hay un error en el simulador de iOS que activará la notificación del delegado dos veces. Este problema no debe producirse al ejecutar la aplicación en un dispositivo.
Control de notificaciones
Las aplicaciones de iOS controlan las notificaciones remotas y locales de la misma manera. Cuando se ejecuta una aplicación, se llamará al método ReceivedLocalNotification
o al método ReceivedRemoteNotification
de la clase AppDelegate
y se pasará la información de notificación como parámetro.
Una aplicación puede controlar una notificación de maneras diferentes. Por ejemplo, la aplicación podría mostrar una alerta para recordar a los usuarios sobre algún evento. O bien, es posible que la notificación se use para mostrar una alerta al usuario que ha finalizado un proceso, como la sincronización de archivos en un servidor.
El código siguiente muestra cómo controlar una notificación local y mostrar una alerta y restablecer el número de distintivo en cero:
public override void ReceivedLocalNotification(UIApplication application, UILocalNotification notification)
{
// show an alert
UIAlertController okayAlertController = UIAlertController.Create(notification.AlertAction, notification.AlertBody, UIAlertControllerStyle.Alert);
okayAlertController.AddAction(UIAlertAction.Create("OK", UIAlertActionStyle.Default, null));
Window.RootViewController.PresentViewController(okayAlertController, true, null);
// reset our badge
UIApplication.SharedApplication.ApplicationIconBadgeNumber = 0;
}
Si la aplicación no se está ejecutando, iOS reproducirá el sonido o actualizará el distintivo de icono según corresponda. Cuando el usuario inicia la aplicación asociada a la alerta, se iniciará la aplicación y se llamará al método FinishedLaunching
en el delegado de la aplicación y se pasará la información de notificación a través del parámetro launchOptions
. Si el diccionario de opciones contiene la clave UIApplication.LaunchOptionsLocalNotificationKey
, AppDelegate
sabe que la aplicación se inició desde una notificación local. El siguiente fragmento de código muestra este proceso:
// check for a local notification
if (launchOptions.ContainsKey(UIApplication.LaunchOptionsLocalNotificationKey))
{
var localNotification = launchOptions[UIApplication.LaunchOptionsLocalNotificationKey] as UILocalNotification;
if (localNotification != null)
{
UIAlertController okayAlertController = UIAlertController.Create(localNotification.AlertAction, localNotification.AlertBody, UIAlertControllerStyle.Alert);
okayAlertController.AddAction(UIAlertAction.Create("OK", UIAlertActionStyle.Default, null));
Window.RootViewController.PresentViewController(okayAlertController, true, null);
// reset our badge
UIApplication.SharedApplication.ApplicationIconBadgeNumber = 0;
}
}
Para una notificación remota, launchOptions
tendrá un LaunchOptionsRemoteNotificationKey
con un NSDictionary
asociado que contiene la carga de notificación remota. Puede extraer la carga de notificación a través de las claves alert
, badge
y sound
. El siguiente fragmento de código muestra cómo obtener notificaciones remotas:
NSDictionary remoteNotification = options[UIApplication.LaunchOptionsRemoteNotificationKey];
if(remoteNotification != null)
{
string alert = remoteNotification["alert"];
}
Resumen
En esta sección se muestra cómo crear y publicar una notificación en Xamarin.iOS. Muestra cómo una aplicación puede reaccionar a las notificaciones reemplazando el método ReceivedLocalNotification
o el método ReceivedRemoteNotification
en el AppDelegate
.