Interaktive Benachrichtigungsbenutzeroberflächen in Xamarin.iOS
Benachrichtigungsinhaltserweiterungen, eingeführt in iOS 10, ermöglichen das Erstellen benutzerdefinierter Benutzeroberflächen für Benachrichtigungen. Ab iOS 12 können Benachrichtigungsbenutzeroberflächen interaktive Elemente wie Schaltflächen und Schieberegler enthalten.
Benachrichtigungsinhaltserweiterung Info.plist Datei
In der Beispiel-App enthält die Datei "Info.plist " im Projekt "RedGreenNotificationsContentExtension " die folgende Konfiguration:
<!-- ... -->
<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>
<!-- ... -->
Beachten Sie die folgenden Funktionen:
- Das
UNNotificationExtensionCategory
Array gibt den Typ der Benachrichtigungskategorien an, die die Inhaltserweiterung behandelt. - Um interaktive Inhalte zu unterstützen, legt die Benachrichtigungsinhaltserweiterung den
UNNotificationExtensionUserInteractionEnabled
Schlüssel auftrue
. - Der
UNNotificationExtensionInitialContentSizeRatio
Schlüssel gibt das anfängliche Höhen-/Breitenverhältnis für die Schnittstelle der Inhaltserweiterung an.
Interaktive Benutzeroberfläche
MainInterface.storyboard, das die Schnittstelle für eine Benachrichtigungsinhaltserweiterung definiert, ist ein Standard-Storyboard, das einen einzelnen Ansichtscontroller enthält. In der Beispiel-App ist der Ansichtscontroller vom Typ NotificationViewController
und enthält eine Bildansicht, drei Schaltflächen und einen Schieberegler. Das Storyboard ordnet diese Steuerelemente den in NotificationViewController.cs definierten Handlern zu:
Der Schaltflächenhandler "App starten" ruft die
PerformNotificationDefaultAction
Aktionsmethode aufExtensionContext
, für die die App gestartet wird:partial void HandleLaunchAppButtonTap(UIButton sender) { ExtensionContext.PerformNotificationDefaultAction(); }
In der App kann das Benutzerbenachrichtigungscenter
Delegate
(in der Beispiel-App)AppDelegate
auf die Interaktion in derDidReceiveNotificationResponse
Methode reagieren:[Export("userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler:")] public void DidReceiveNotificationResponse(UNUserNotificationCenter center, UNNotificationResponse response, System.Action completionHandler) { if (response.IsDefaultAction) { Console.WriteLine("ACTION: Default"); // ...
Der Schaltflächenhandler "Benachrichtigung schließen" wird aufgerufen
DismissNotificationContentExtension
ExtensionContext
, bei dem die Benachrichtigung geschlossen wird:partial void HandleDismissNotificationButtonTap(UIButton sender) { ExtensionContext.DismissNotificationContentExtension(); }
Der Schaltflächenhandler "Benachrichtigung entfernen" schließt die Benachrichtigung und entfernt sie aus dem Benachrichtigungscenter:
partial void HandleRemoveNotificationButtonTap(UIButton sender) { ExtensionContext.DismissNotificationContentExtension(); UNUserNotificationCenter.Current.RemoveDeliveredNotifications(new string[] { notification.Request.Identifier }); }
Die Methode, mit der Wertänderungen auf dem Schieberegler behandelt werden, aktualisiert das Alpha des Bilds, das auf der Benutzeroberfläche der Benachrichtigung angezeigt wird:
partial void HandleSliderValueChanged(UISlider sender) { Xamagon.Alpha = sender.Value; }