Xamarin.ios의 그룹화 된 알림Grouped notifications in Xamarin.iOS

기본적으로 iOS 12는 모든 앱의 알림을 그룹에 배치 합니다.By default, iOS 12 places all of an app's notifications in a group. 잠금 화면 및 알림 센터는이 그룹을 맨 위에 가장 최근의 알림이 있는 스택으로 표시 합니다.The lock screen and Notification Center display this group as a stack with the most recent notification on top. 사용자는 그룹을 확장 하 여 포함 된 모든 알림을 표시 하 고 그룹 전체를 해제할 수 있습니다.Users can expand the group to see all the notifications it contains and dismiss the group as a whole.

앱은 스레드를 기준으로 알림을 그룹화 할 수도 있으므로 사용자가 관심 있는 특정 정보를 쉽게 찾고 상호 작용할 수 있습니다.Apps can also group notifications by thread, making it easier for users to find and interact with the specific information they're interested in.

샘플 앱: GroupedNotificationsSample app: GroupedNotifications

Xamarin.ios를 사용 하 여 그룹화 된 알림을 사용 하는 방법에 대 한 자세한 내용은 Groupednotifications 샘플 앱을 참조 하세요.To learn how to use grouped notifications with Xamarin.iOS, take a look at the GroupedNotifications sample app.

이 샘플 앱은 다양 한 친구와의 대화를 시뮬레이션 하 여 각 메시지에 대 한 알림을 보내고 스레드별로 그룹화 합니다.This sample app simulates conversations with various friends, sending a notification for each message and grouping them by thread. 또한 응용 프로그램 수준 그룹에서 스레드 알림이 발생 하지 않도록 하는 방법도 보여 줍니다.It also demonstrates how unthreaded notifications land in an application-level group.

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

권한 부여 요청 및 포그라운드 알림 허용Request authorization and allow foreground notifications

앱이 로컬 알림을 보낼 수 있기 전에이에 대 한 권한을 요청 해야 합니다.Before an app can send local notifications, it must request permission to do so. 샘플 앱의 AppDelegate에서 메서드는이 FinishedLaunching 사용 권한을 요청 합니다.In the sample app's AppDelegate, the FinishedLaunching method requests this permission:

public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions)
{
    UNUserNotificationCenter center = UNUserNotificationCenter.Current;
    center.RequestAuthorization(UNAuthorizationOptions.Alert, (bool success, NSError error) =>
    {
        // Set the Delegate regardless of success; users can modify their notification
        // preferences at any time in the Settings app.
        center.Delegate = this;
    });
    return true;
}

Delegate 대한(위WillPresentNotification설정)는에 전달 된 완료 처리기를 호출 하 여 포그라운드 앱에서 들어오는 알림을 표시할지 여부를 결정합니다.UNUserNotificationCenterThe Delegate (set above) for a UNUserNotificationCenter decides whether or not a foreground app should display an incoming notification by calling the completion handler passed to WillPresentNotification:

[Export("userNotificationCenter:willPresentotification:withCompletionHandler:")]
public void WillPresentNotification(UNUserNotificationCenter center, UNNotification notification, System.Action<UNNotificationPresentationOptions> completionHandler)
{
    completionHandler(UNNotificationPresentationOptions.Alert);
}

매개 UNNotificationPresentationOptions.Alert 변수는 앱에서 경고를 표시 하지만 소리를 재생 하거나 배지를 업데이트 하지 않음을 나타냅니다.The UNNotificationPresentationOptions.Alert parameter indicates that the app should show the alert but not play a sound or update a badge.

스레드 알림Threaded notifications

Alice 단추가 있는 샘플 앱의 메시지 를 반복적으로 탭 하 여 alice 라는 friend가 있는 대화에 대 한 알림을 보냅니다.Tap the sample app's Message with Alice button repeatedly to have it send notifications for a conversation with a friend named Alice. 이 대화의 알림은 동일한 스레드에 속해 있으므로 잠금 화면과 알림 센터는 함께 그룹화 됩니다.Since this conversation's notifications are part of the same thread, the lock screen and Notification Center group them together.

다른 친구와 대화를 시작 하려면 새 친구 선택 단추를 누릅니다.To start a conversation with a different friend, tap the Choose a new friend button. 이 대화에 대 한 알림은 별도의 그룹에 나타납니다.Notifications for this conversation appear in a separate group.

ThreadIdentifierThreadIdentifier

샘플 앱은 새 스레드를 시작할 때마다 고유한 스레드 식별자를 만듭니다.Any time the sample app starts a new thread, it creates a unique thread identifier:

void StartNewThread()
{
    threadId = $"message-{friend}";
    // ...
}

스레드 알림을 보내기 위해 샘플 앱은 다음과 같습니다.To send a threaded notification, the sample app:

  • 앱에 알림을 보낼 수 있는 권한이 있는지 여부를 확인 합니다.Checks whether the app has authorization to send a notification.
  • 을 만듭니다.UNMutableNotificationContentCreates a UNMutableNotificationContent 알림 콘텐츠에 대 한 개체입니다.ThreadIdentifierobject for the notification's content and sets its ThreadIdentifier 위에서 만든 스레드 식별자입니다.to the thread identifier created above.
  • 요청을 만들고 알림을 예약 합니다.Creates a request and schedules the notification:
async partial void ScheduleThreadedNotification(UIButton sender)
{
    var center = UNUserNotificationCenter.Current;

    UNNotificationSettings settings = await center.GetNotificationSettingsAsync();
    if (settings.AuthorizationStatus != UNAuthorizationStatus.Authorized)
    {
        return;
    }

    string author =  // ...
    string message = // ...

    var content = new UNMutableNotificationContent()
    {
        ThreadIdentifier = threadId,
        Title = author,
        Body = message,
        SummaryArgument = author
    };

    var request = UNNotificationRequest.FromIdentifier(
        Guid.NewGuid().ToString(),
        content,
        UNTimeIntervalNotificationTrigger.CreateTrigger(1, false)
    );

    center.AddNotificationRequest(request, null);

    // ...
}

동일한 스레드 식별자를 가진 동일한 앱의 모든 알림이 동일한 알림 그룹에 표시 됩니다.All notifications from the same app with the same thread identifier will appear in the same notification group.

참고

원격 알림에서 스레드 식별자를 설정 하려면 알림의 JSON 페이로드에 thread-id 키를 추가 합니다.To set a thread identifier on a remote notification, add the thread-id key to the notification's JSON payload. 자세한 내용은 Apple의 원격 알림 생성 문서를 참조 하세요.See Apple's Generating a Remote Notification document for more details.

SummaryArgumentSummaryArgument

SummaryArgument알림이 속한 알림 그룹의 왼쪽 아래 모서리에 표시 되는 요약 텍스트에 알림이 영향을 주는 방법을 지정 합니다.SummaryArgument specifies how a notification will impact the summary text that appears on the lower-left corner of a notification group to which the notification belongs. iOS는 동일한 그룹의 알림에서 요약 텍스트를 집계 하 여 전체 요약 설명을 만듭니다.iOS aggregates summary text from notifications in the same group to create an overall summary description.

샘플 앱은 메시지 작성자를 요약 인수로 사용 합니다.The sample app uses the message's author as the summary argument. 이 방법을 사용 하는 경우 Alice와의 6 가지 알림 그룹에 대 한 요약 텍스트는 alice 및 Me에서 5 개 이상의 알림을받을 수 있습니다.Using this approach, the summary text for a group of six notifications with Alice might be 5 more notifications from Alice and Me.

스레드 없음 알림Unthreaded notifications

샘플 앱의 약속 미리 알림 단추를 누를 때마다 다양 한 약속 미리 알림 알림 중 하나가 전송 됩니다.Each tap of the sample app's Appointment reminder button sends one of various appointment reminder notifications. 이러한 미리 알림은 스레드 되지 않으므로 잠금 화면과 알림 센터의 응용 프로그램 수준 알림 그룹에 표시 됩니다.Since these reminders are not threaded, they appear in the application-level notification group on the lock screen and in Notification Center.

스레드가 없는 알림을 보내기 위해 샘플 앱의 ScheduleUnthreadedNotification 메서드는 위와 비슷한 코드를 사용 합니다.To send an unthreaded notification, the sample app's ScheduleUnthreadedNotification method uses similar code as above. 그러나 ThreadIdentifier 개체UNMutableNotificationContent 에는를 설정 하지 않습니다.However, it does not set the ThreadIdentifier on the UNMutableNotificationContent object.