Xamarin.iOS'ta etkileşimli bildirim kullanıcı arabirimleri

iOS 10'da kullanıma sunulan bildirim içeriği uzantıları, bildirimler için özel kullanıcı arabirimleri oluşturmayı mümkün hale getirir. iOS 12'den başlayarak bildirim kullanıcı arabirimleri düğmeler ve kaydırıcılar gibi etkileşimli öğeler içerebilir.

Bildirim içerik uzantısı Info.plist dosyası

Örnek uygulamada, RedGreenNotificationsContentExtension projesindeki Info.plist dosyası aşağıdaki yapılandırmayı içerir:

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

Aşağıdaki özelliklere dikkat edin:

  • dizi, UNNotificationExtensionCategory içerik uzantısının işlediği bildirim kategorilerinin türünü belirtir.
  • Etkileşimli içeriği desteklemek için bildirim içeriği uzantısı anahtarı olarak trueayarlarUNNotificationExtensionUserInteractionEnabled.
  • anahtar, UNNotificationExtensionInitialContentSizeRatio içerik uzantısının arabirimi için ilk yükseklik/genişlik oranını belirtir.

Etkileşimli arabirim

Bildirim içerik uzantısı arabirimini tanımlayan MainInterface.storyboard, tek bir görünüm denetleyicisi içeren standart bir görsel taslaktır. Örnek uygulamada, görünüm denetleyicisi türündedir NotificationViewControllerve bir görüntü görünümü, üç düğme ve kaydırıcı içerir. Görsel taslak, bu denetimleri NotificationViewController.cs tanımlanan işleyicilerle ilişkilendirir:

  • Uygulamayı Başlat düğme işleyicisi, uygulamasını başlatan üzerinde ExtensionContexteylem yöntemini çağırırPerformNotificationDefaultAction:

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

    Uygulamada, kullanıcı bildirim merkezinin Delegate (örnek uygulamada AppDelegate) yöntemindeki DidReceiveNotificationResponse etkileşime yanıt verebilir:

    [Export("userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler:")]
    public void DidReceiveNotificationResponse(UNUserNotificationCenter center, UNNotificationResponse response, System.Action completionHandler)
    {
        if (response.IsDefaultAction)
        {
            Console.WriteLine("ACTION: Default");
            // ...
    
  • Bildirimi Kapat düğmesi işleyicisi, bildirimi kapatan öğesini ExtensionContextçağırırDismissNotificationContentExtension:

    partial void HandleDismissNotificationButtonTap(UIButton sender)
    {
        ExtensionContext.DismissNotificationContentExtension();
    }
    
  • Bildirimi Kaldır düğme işleyicisi bildirimi kapatıp Bildirim Merkezi'nden kaldırır:

    partial void HandleRemoveNotificationButtonTap(UIButton sender)
    {
        ExtensionContext.DismissNotificationContentExtension();
        UNUserNotificationCenter.Current.RemoveDeliveredNotifications(new string[] { notification.Request.Identifier });
    }
    
  • Kaydırıcıdaki değer değişikliklerini işleyen yöntem, bildirimin arabiriminde görüntülenen görüntünün alfasını güncelleştirir:

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