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
entrue
. - 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
enExtensionContext
, 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, elAppDelegate
) puede responder a la interacción en el métodoDidReceiveNotificationResponse
:[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
enExtensionContext
, 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; }
Vínculos relacionados
- Marco de notificaciones de usuario en Xamarin.iOS
- UserNotifications (Apple)
- Novedades de las notificaciones de usuario (WWDC 2018)
- Procedimientos recomendados y novedades de las notificaciones de usuario (WWDC 2017)
- Notificaciones enriquecidas (WWDC 2017)
- Generación de una notificación remota (Apple)