Partager via


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é truesur .
  • 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 NotificationViewControlleret 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 sur ExtensionContextlaquelle 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, le AppDelegate) peut répondre à l’interaction dans la DidReceiveNotificationResponse 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 ExtensionContextDismissNotificationContentExtension , 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;
    }