Uživatelská rozhraní interaktivního oznámení v Xamarin.iOS
Rozšíření obsahu oznámení představená v iOSu 10 umožňují vytvářet vlastní uživatelská rozhraní pro oznámení. Od iOSu 12 můžou uživatelská rozhraní oznámení obsahovat interaktivní prvky, jako jsou tlačítka a posuvníky.
Soubor s příponou obsahu oznámení Info.plist
V ukázkové aplikaci obsahuje soubor Info.plist v projektu RedGreenNotificationsContentExtension následující konfiguraci:
<!-- ... -->
<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>
<!-- ... -->
Všimněte si následujících funkcí:
- Pole
UNNotificationExtensionCategory
určuje typ kategorií oznámení, které rozšíření obsahu zpracovává. - Aby bylo možné podporovat interaktivní obsah, rozšíření obsahu oznámení nastaví
UNNotificationExtensionUserInteractionEnabled
klíč natrue
. - Klíč
UNNotificationExtensionInitialContentSizeRatio
určuje počáteční poměr výšky a šířky pro rozhraní rozšíření obsahu.
Interaktivní rozhraní
MainInterface.storyboard, který definuje rozhraní pro rozšíření obsahu oznámení, je standardní scénář obsahující jeden kontroler zobrazení. V ukázkové aplikaci je kontroler zobrazení typu NotificationViewController
a obsahuje zobrazení obrázků, tři tlačítka a posuvník. Scénář přidruží tyto ovládací prvky k obslužným rutinám definovaným v NotificationViewController.cs:
Obslužná rutina tlačítka Spustit aplikaci volá metodu
PerformNotificationDefaultAction
akce,ExtensionContext
která spustí aplikaci:partial void HandleLaunchAppButtonTap(UIButton sender) { ExtensionContext.PerformNotificationDefaultAction(); }
V aplikaci může centrum
Delegate
oznámení uživatele (v ukázkové aplikaciAppDelegate
) reagovat na interakci vDidReceiveNotificationResponse
metodě:[Export("userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler:")] public void DidReceiveNotificationResponse(UNUserNotificationCenter center, UNNotificationResponse response, System.Action completionHandler) { if (response.IsDefaultAction) { Console.WriteLine("ACTION: Default"); // ...
Volání obslužné rutiny
DismissNotificationContentExtension
ExtensionContext
tlačítka Zavřít oznámení , která zavře oznámení:partial void HandleDismissNotificationButtonTap(UIButton sender) { ExtensionContext.DismissNotificationContentExtension(); }
Obslužná rutina tlačítka Odebrat oznámení zavře oznámení a odebere ji z Centra oznámení:
partial void HandleRemoveNotificationButtonTap(UIButton sender) { ExtensionContext.DismissNotificationContentExtension(); UNUserNotificationCenter.Current.RemoveDeliveredNotifications(new string[] { notification.Request.Identifier }); }
Metoda, která zpracovává změny hodnot na posuvníku, aktualizuje alfa obrázku zobrazeného v rozhraní oznámení:
partial void HandleSliderValueChanged(UISlider sender) { Xamagon.Alpha = sender.Value; }