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 sutrue
. - 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 NotificationViewController
e 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 inExtensionContext
, che avvia l'app:partial void HandleLaunchAppButtonTap(UIButton sender) { ExtensionContext.PerformNotificationDefaultAction(); }
Nell'app il centro notifiche utente (nell'app
AppDelegate
diDelegate
esempio ) può rispondere all'interazione nelDidReceiveNotificationResponse
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
suExtensionContext
, 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; }