Compartir a través de


Interfaces de usuario de notificación interactiva en Xamarin.iOS

Las extensiones de contenido de notificación, introducidas en iOS 10, permiten crear interfaces de usuario personalizadas para las notificaciones. A partir de iOS 12, las interfaces de usuario de notificación pueden contener elementos interactivos, como botones y controles deslizantes.

Archivo Info.plist de extensión de contenido de notificación

En la aplicación de ejemplo, el archivo Info.plist del proyecto RedGreenNotificationsContentExtension contiene la siguiente configuración:

<!-- ... -->
<key>NSExtension</key>
<dict>
    <key>NSExtensionAttributes</key>
    <dict>
        <key>UNNotificationExtensionCategory</key>
        <array>
            <string>red-category</string>
            <string>green-category</string>
        </array>
        <key>UNNotificationExtensionUserInteractionEnabled</key>
        <true/>
        <key>UNNotificationExtensionDefaultContentHidden</key>
        <true/>
        <key>UNNotificationExtensionInitialContentSizeRatio</key>
        <real>0.6</real>
    </dict>
    <key>NSExtensionMainStoryboard</key>
    <string>MainInterface</string>
    <key>NSExtensionPointIdentifier</key>
    <string>com.apple.usernotifications.content-extension</string>
    <key></key>
    <true/>
</dict>
<!-- ... -->

Tenga en cuenta las siguientes características:

  • La matriz UNNotificationExtensionCategory especifica el tipo de categorías de notificación que controla la extensión de contenido.
  • Para admitir contenido interactivo, la extensión de contenido de notificación establece la clave UNNotificationExtensionUserInteractionEnabled en true.
  • La clave UNNotificationExtensionInitialContentSizeRatio especifica la relación inicial de alto y ancho para la interfaz de la extensión de contenido.

Interfaz interactiva

MainInterface.storyboard, que define la interfaz de una extensión de contenido de notificación, es un guión gráfico estándar que contiene un único controlador de vista. En la aplicación de ejemplo, el controlador de vista es de tipo NotificationViewController y contiene una vista de imagen, tres botones y un control deslizante. El guión gráfico asocia estos controles a los controladores definidos en NotificationViewController.cs:

  • El controlador del botón Iniciar aplicación llama al método de acción PerformNotificationDefaultAction en ExtensionContext, que inicia la aplicación:

    partial void HandleLaunchAppButtonTap(UIButton sender)
    {
        ExtensionContext.PerformNotificationDefaultAction();
    }
    

    En la aplicación, el Delegate del centro de notificaciones del usuario (en la aplicación de ejemplo, el AppDelegate) puede responder a la interacción en el método DidReceiveNotificationResponse:

    [Export("userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler:")]
    public void DidReceiveNotificationResponse(UNUserNotificationCenter center, UNNotificationResponse response, System.Action completionHandler)
    {
        if (response.IsDefaultAction)
        {
            Console.WriteLine("ACTION: Default");
            // ...
    
  • El controlador del botón Descartar notificación llama a DismissNotificationContentExtension en ExtensionContext, que cierra la notificación:

    partial void HandleDismissNotificationButtonTap(UIButton sender)
    {
        ExtensionContext.DismissNotificationContentExtension();
    }
    
  • El controlador del botón Quitar notificación descarta la notificación y la quita del Centro de notificaciones:

    partial void HandleRemoveNotificationButtonTap(UIButton sender)
    {
        ExtensionContext.DismissNotificationContentExtension();
        UNUserNotificationCenter.Current.RemoveDeliveredNotifications(new string[] { notification.Request.Identifier });
    }
    
  • El método que controla los cambios de valor en el control deslizante actualiza el alfa de la imagen que se muestra en la interfaz de la notificación:

    partial void HandleSliderValueChanged(UISlider sender)
    {
        Xamagon.Alpha = sender.Value;
    }