Xamarin.iOS에서 그룹화 된 알림Grouped notifications in Xamarin.iOS

기본적으로 12 iOS 앱의 알림 모든 그룹에 배치를 합니다.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. 또한 응용 프로그램 수준 그룹에 알림을 land를 프레임인된 하는 방법을 보여 줍니다.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 (설정 위에서)는 UNUserNotificationCenter 전경 앱 전달할완료처리기를호출하여는들어오는알림을표시할지여부를결정WillPresentNotification:The 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 라는 친구를 사용 하 여 대화에 대 한 알림을 보내는 것을 표시 합니다.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.

다른 친구와 함께 대화를 시작 하려면 다음을 탭 합니다 새 friend를 선택 단추입니다.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.

참고

원격 알림 스레드 식별자를 설정 하려면 추가 thread-id 알림의 JSON 페이로드를 키입니다.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와 m에서 자세한 알림을 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. 하지만 설정 하지 않습니다 합니다 ThreadIdentifierUNMutableNotificationContent 개체입니다.However, it does not set the ThreadIdentifier on the UNMutableNotificationContent object.