Compartir a través de


Administración de notificaciones en Xamarin.iOS

En iOS 12, el sistema operativo puede vincular en profundidad desde el Centro de notificaciones y la aplicación Configuración a la pantalla de administración de notificaciones de una aplicación. Esta pantalla debe permitir a los usuarios participar y no en los distintos tipos de notificaciones que envía la aplicación.

Pantalla de administración de notificaciones

En la aplicación de ejemplo, ManageNotificationsViewController define una interfaz de usuario que permite a los usuarios habilitar y deshabilitar de forma independiente las notificaciones rojas y las notificaciones verdes. Es un estándar UIViewController que contiene un UISwitch para cada tipo de notificación. Alternar el modificador para cualquier tipo de notificación guarda, en los valores predeterminados del usuario, la preferencia del usuario para ese tipo de notificación:

partial void HandleRedNotificationsSwitchValueChange(UISwitch sender)
{
    NSUserDefaults.StandardUserDefaults.SetBool(sender.On, RedNotificationsEnabledKey);
}

Nota:

La pantalla de administración de notificaciones también comprueba si el usuario tiene notificaciones completamente deshabilitadas para la aplicación. Si es así, oculta los botones de alternancia para los tipos de notificación individuales. Para ello, la pantalla de administración de notificaciones:

  • Llama a UNUserNotificationCenter.Current.GetNotificationSettingsAsync y examina la propiedad AuthorizationStatus.
  • Oculta los botones de alternancia para los tipos de notificación individuales si las notificaciones se han deshabilitado completamente para la aplicación.
  • Vuelve a comprobar si las notificaciones se han deshabilitado cada vez que la aplicación se mueve al primer plano, ya que el usuario puede habilitar o deshabilitar las notificaciones en la configuración de iOS en cualquier momento.

La clase ViewController de la aplicación de ejemplo, que envía las notificaciones, comprueba la preferencia del usuario antes de enviar una notificación local para asegurarse de que la notificación es de un tipo que el usuario realmente quiere recibir:

partial void HandleTapRedNotificationButton(UIButton sender)
{
    bool redEnabled = NSUserDefaults.StandardUserDefaults.BoolForKey(ManageNotificationsViewController.RedNotificationsEnabledKey);
    if (redEnabled)
    {
        // ...

Vínculos profundos de iOS a la pantalla de administración de notificaciones de una aplicación desde el Centro de notificaciones y la configuración de notificación de la aplicación en la aplicación Configuración. Para facilitar esto, una aplicación debe:

  • Indique que hay disponible una pantalla de administración de notificaciones pasando UNAuthorizationOptions.ProvidesAppNotificationSettings a la solicitud de autorización de notificación de la aplicación.
  • Implemente el método OpenSettings desde IUNUserNotificationCenterDelegate.

Solicitud de autorización

Para indicar al sistema operativo que está disponible una pantalla de administración de notificaciones, una aplicación debe pasar la opción UNAuthorizationOptions.ProvidesAppNotificationSettings (junto con cualquier otra opción de entrega de notificaciones que necesite) al método RequestAuthorization en el UNUserNotificationCenter.

Por ejemplo, en la aplicación de ejemploAppDelegate:

public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions)
{
    // Request authorization to send notifications
    UNUserNotificationCenter center = UNUserNotificationCenter.Current;
    var options = UNAuthorizationOptions.ProvidesAppNotificationSettings | UNAuthorizationOptions.Alert | UNAuthorizationOptions.Sound | UNAuthorizationOptions.Provisional;
    center.RequestAuthorization(options, (bool success, NSError error) =>
    {
        // ...

Método OpenSettings

El método OpenSettings, llamado por el sistema para vincular en profundidad a la pantalla de administración de notificaciones de una aplicación, debe navegar directamente al usuario a esa pantalla.

En la aplicación de ejemplo, este método realiza el cambio a laManageNotificationsViewController si es necesario:

[Export("userNotificationCenter:openSettingsForNotification:")]
public void OpenSettings(UNUserNotificationCenter center, UNNotification notification)
{
    var navigationController = Window.RootViewController as UINavigationController;
    if (navigationController != null)
    {
        var currentViewController = navigationController.VisibleViewController;
        if (currentViewController is ViewController)
        {
            currentViewController.PerformSegue(ManageNotificationsViewController.ShowManageNotificationsSegue, this);
        }

    }
}