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

샘플 앱에는 Info.plist 파일을 RedGreenNotificationsContentExtension 프로젝트에는 다음 구성이 포함 되어 있습니다.: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: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.storyboard, 단일 뷰 컨트롤러를 포함 하는 표준 스토리 보드는 알림 콘텐츠 확장에 대 한 인터페이스를 정의 하는 합니다.MainInterface.storyboard, which defines the interface for a notification content extension, is a standard storyboard containing a single view controller. 샘플 앱에서 뷰 컨트롤러는 형식의 NotificationViewController, 이미지 뷰를, 세 가지 단추 및 슬라이더를 포함 합니다.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:

  • 합니다 앱 시작 처리기 호출 단추를 PerformNotificationDefaultAction 대 한 작업 메서드 ExtensionContext, 앱을 시작 하는: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");
            // ...
    
  • 합니다 해제 알림 처리기 호출 단추 DismissNotificationContentExtension 에서 ExtensionContext, 알림을 닫습니다는: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;
    }