Xamarin.ios의 대화형 알림 사용자 인터페이스Interactive notification user interfaces in Xamarin.iOS

IOS 10에 도입 된 알림 콘텐츠 확장은 알림에 대 한 사용자 지정 사용자 인터페이스를 만들 수 있도록 합니다.Notification content extensions, introduced in iOS 10, make it possible to create custom user interfaces for notifications. IOS 12부터 알림 사용자 인터페이스에는 단추 및 슬라이더와 같은 대화형 요소가 포함 될 수 있습니다.Starting with iOS 12, notification user interfaces can contain interactive elements such as buttons and sliders.

샘플 앱: RedGreenNotificationsSample App: RedGreenNotifications

RedGreenNotifications 샘플 앱에는 대화형 사용자 인터페이스를 사용 하는 알림 콘텐츠 확장이 포함 되어 있습니다.The RedGreenNotifications sample app contains a notification content extension with an interactive user interface.

이 가이드의 코드 조각은이 샘플에서 제공 됩니다.Code snippets in this guide come from this sample.

알림 콘텐츠 확장 정보. info.plist 파일Notification content extension Info.plist file

샘플 앱에서 RedGreenNotificationsContentExtension 프로젝트의 info.plist 파일에는 다음 구성이 포함 됩니다.In the sample app, the Info.plist file in the RedGreenNotificationsContentExtension project contains the following configuration:

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

다음 기능에 유의 하십시오.Note the following features:

  • UNNotificationExtensionCategory 배열은 콘텐츠 확장에서 처리 하는 알림 범주의 유형을 지정 합니다.The UNNotificationExtensionCategory array specifies the type of notification categories the content extension handles.
  • 대화형 콘텐츠를 지원 하기 위해 알림 콘텐츠 확장 프로그램은 UNNotificationExtensionUserInteractionEnabled 키를 true으로 설정 합니다.In order to support interactive content, the notification content extension sets the UNNotificationExtensionUserInteractionEnabled key to true.
  • UNNotificationExtensionInitialContentSizeRatio 키는 콘텐츠 확장의 인터페이스에 대 한 초기 높이/너비 비율을 지정 합니다.The UNNotificationExtensionInitialContentSizeRatio key specifies the initial height/width ratio for the content extension's interface.

대화형 인터페이스Interactive interface

알림 콘텐츠 확장에 대 한 인터페이스를 정의 하는 Maininterface는 단일 뷰 컨트롤러를 포함 하는 표준 스토리 보드입니다.MainInterface.storyboard, which defines the interface for a notification content extension, is a standard storyboard containing a single view controller. 샘플 앱에서 뷰 컨트롤러는 NotificationViewController유형이 며 이미지 뷰, 3 개의 단추 및 슬라이더를 포함 합니다.In the sample app, the view controller is of type NotificationViewController, and it contains an image view, three buttons, and a slider. 스토리 보드는 NotificationViewController.cs에 정의 된 처리기와 이러한 컨트롤을 연결 합니다.The storyboard associates these controls with handlers defined in NotificationViewController.cs:

  • 앱 시작 단추 처리기는 ExtensionContext에서 PerformNotificationDefaultAction 작업 메서드를 호출 하 여 앱을 시작 합니다.The Launch App button handler calls the PerformNotificationDefaultAction action method on ExtensionContext, which launches the app:

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

    앱에서 사용자 알림 센터의 Delegate (샘플 앱에서는 AppDelegate)가 DidReceiveNotificationResponse 메서드에서 상호 작용에 응답할 수 있습니다.In the app, the user notification center's Delegate (in the sample app, the AppDelegate) can respond to the interaction in the DidReceiveNotificationResponse method:

    [Export("userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler:")]
    public void DidReceiveNotificationResponse(UNUserNotificationCenter center, UNNotificationResponse response, System.Action completionHandler)
    {
        if (response.IsDefaultAction)
        {
            Console.WriteLine("ACTION: Default");
            // ...
    
  • 알림 해제 단추 처리기는 ExtensionContext에서 DismissNotificationContentExtension를 호출 하 여 알림을 닫습니다.The Dismiss Notification button handler calls DismissNotificationContentExtension on ExtensionContext, which closes the notification:

    partial void HandleDismissNotificationButtonTap(UIButton sender)
    {
        ExtensionContext.DismissNotificationContentExtension();
    }
    
  • 알림 제거 단추 처리기는 알림을 해제 하 고 알림 센터에서이를 제거 합니다.The Remove Notification button handler dismisses the notification and removes it from Notification Center:

    partial void HandleRemoveNotificationButtonTap(UIButton sender)
    {
        ExtensionContext.DismissNotificationContentExtension();
        UNUserNotificationCenter.Current.RemoveDeliveredNotifications(new string[] { notification.Request.Identifier });
    }
    
  • 슬라이더에서 값 변경을 처리 하는 메서드는 알림 인터페이스에 표시 된 이미지의 알파를 업데이트 합니다.The method that handles value changes on the slider updates the alpha of the image displayed in the notification's interface:

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