Interfaces utilisateur de notification interactive dans Xamarin.iOS
Les extensions de contenu de notification, introduites dans iOS 10, permettent de créer des interfaces utilisateur personnalisées pour les notifications. À compter d’iOS 12, les interfaces utilisateur de notification peuvent contenir des éléments interactifs tels que des boutons et des curseurs.
Fichier Info.plist de l’extension de contenu de notification
Dans l’exemple d’application, le fichier Info.plist dans le projet RedGreenNotificationsContentExtension contient la configuration suivante :
<!-- ... -->
<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>
<!-- ... -->
Notez les caractéristiques suivantes :
- Le
UNNotificationExtensionCategory
tableau spécifie le type de catégories de notification que l’extension de contenu gère. - Pour prendre en charge le contenu interactif, l’extension de contenu de notification définit la
UNNotificationExtensionUserInteractionEnabled
clétrue
sur . - La
UNNotificationExtensionInitialContentSizeRatio
clé spécifie le ratio de hauteur/largeur initial pour l’interface de l’extension de contenu.
Interface interactive
MainInterface.storyboard, qui définit l’interface d’une extension de contenu de notification, est un storyboard standard contenant un contrôleur d’affichage unique. Dans l’exemple d’application, le contrôleur de vue est de type NotificationViewController
et contient un affichage d’image, trois boutons et un curseur. Le storyboard associe ces contrôles aux gestionnaires définis dans NotificationViewController.cs :
Le gestionnaire de boutons Lancer l’application appelle la
PerformNotificationDefaultAction
méthode d’action surExtensionContext
laquelle l’application est lancée :partial void HandleLaunchAppButtonTap(UIButton sender) { ExtensionContext.PerformNotificationDefaultAction(); }
Dans l’application, le centre de notification utilisateur
Delegate
(dans l’exemple d’application, leAppDelegate
) peut répondre à l’interaction dans laDidReceiveNotificationResponse
méthode :[Export("userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler:")] public void DidReceiveNotificationResponse(UNUserNotificationCenter center, UNNotificationResponse response, System.Action completionHandler) { if (response.IsDefaultAction) { Console.WriteLine("ACTION: Default"); // ...
Le gestionnaire de boutons Ignorer la notification appelle
ExtensionContext
DismissNotificationContentExtension
, ce qui ferme la notification :partial void HandleDismissNotificationButtonTap(UIButton sender) { ExtensionContext.DismissNotificationContentExtension(); }
Le gestionnaire de boutons Supprimer la notification ignore la notification et la supprime du Centre de notification :
partial void HandleRemoveNotificationButtonTap(UIButton sender) { ExtensionContext.DismissNotificationContentExtension(); UNUserNotificationCenter.Current.RemoveDeliveredNotifications(new string[] { notification.Request.Identifier }); }
La méthode qui gère les modifications de valeur sur le curseur met à jour l’alpha de l’image affichée dans l’interface de la notification :
partial void HandleSliderValueChanged(UISlider sender) { Xamagon.Alpha = sender.Value; }