Condividi tramite


Interfacce utente di notifica interattive in Xamarin.iOS

Le estensioni del contenuto delle notifiche, introdotte in iOS 10, consentono di creare interfacce utente personalizzate per le notifiche. A partire da iOS 12, le interfacce utente di notifica possono contenere elementi interattivi, ad esempio pulsanti e dispositivi di scorrimento.

File Info.plist dell'estensione del contenuto di notifica

Nell'app di esempio il file Info.plist nel progetto RedGreenNotificationsContentExtension contiene la configurazione seguente:

<!-- ... -->
<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>
<!-- ... -->

Nota le seguenti funzionalità:

  • La UNNotificationExtensionCategory matrice specifica il tipo di categorie di notifica gestite dall'estensione del contenuto.
  • Per supportare il contenuto interattivo, l'estensione del contenuto di notifica imposta la UNNotificationExtensionUserInteractionEnabled chiave su true.
  • La UNNotificationExtensionInitialContentSizeRatio chiave specifica il rapporto di altezza/larghezza iniziale per l'interfaccia dell'estensione del contenuto.

Interfaccia interattiva

MainInterface.storyboard, che definisce l'interfaccia per un'estensione del contenuto di notifica, è uno storyboard standard contenente un singolo controller di visualizzazione. Nell'app di esempio il controller di visualizzazione è di tipo NotificationViewControllere contiene una visualizzazione immagine, tre pulsanti e un dispositivo di scorrimento. Lo storyboard associa questi controlli ai gestori definiti in NotificationViewController.cs:

  • Il gestore del pulsante Avvia app chiama il PerformNotificationDefaultAction metodo di azione in ExtensionContext, che avvia l'app:

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

    Nell'app il centro notifiche utente (nell'app AppDelegatedi Delegate esempio ) può rispondere all'interazione nel DidReceiveNotificationResponse metodo :

    [Export("userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler:")]
    public void DidReceiveNotificationResponse(UNUserNotificationCenter center, UNNotificationResponse response, System.Action completionHandler)
    {
        if (response.IsDefaultAction)
        {
            Console.WriteLine("ACTION: Default");
            // ...
    
  • Il gestore del pulsante Ignora notifica chiama DismissNotificationContentExtension su ExtensionContext, che chiude la notifica:

    partial void HandleDismissNotificationButtonTap(UIButton sender)
    {
        ExtensionContext.DismissNotificationContentExtension();
    }
    
  • Il gestore del pulsante Rimuovi notifica ignora la notifica e la rimuove dal Centro notifiche:

    partial void HandleRemoveNotificationButtonTap(UIButton sender)
    {
        ExtensionContext.DismissNotificationContentExtension();
        UNUserNotificationCenter.Current.RemoveDeliveredNotifications(new string[] { notification.Request.Identifier });
    }
    
  • Il metodo che gestisce le modifiche del valore nel dispositivo di scorrimento aggiorna l'alfa dell'immagine visualizzata nell'interfaccia della notifica:

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