Xamarin.iOS의 그룹화된 알림
기본적으로 iOS 12는 앱의 모든 알림을 그룹에 배치합니다. 잠금 화면 및 알림 센터에서 이 그룹을 스택으로 표시하고 가장 최근 알림이 맨 위에 표시됩니다. 사용자는 그룹을 확장하여 포함된 모든 알림을 확인하고 그룹 전체를 해제할 수 있습니다.
또한 앱은 사용자가 관심 있는 특정 정보를 더 쉽게 찾고 상호 작용할 수 있도록 스레드별로 알림을 그룹화할 수 있습니다.
권한 부여 요청 및 포그라운드 알림 허용
앱이 로컬 알림을 보내려면 먼저 권한을 요청해야 합니다. 샘플 앱 AppDelegate
에서 메서드는 FinishedLaunching
다음 권한을 요청합니다.
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
완료 처리기를 호출하여 들어오는 알림을 표시해야 하는지 여부를 결정하는 (위 설정)UNUserNotificationCenter
[Export("userNotificationCenter:willPresentNotification:withCompletionHandler:")]
public void WillPresentNotification(UNUserNotificationCenter center, UNNotification notification, System.Action<UNNotificationPresentationOptions> completionHandler)
{
completionHandler(UNNotificationPresentationOptions.Alert);
}
매개 변수는 UNNotificationPresentationOptions.Alert
앱이 경고를 표시해야 하지만 소리를 재생하거나 배지를 업데이트하지 않음을 나타냅니다.
스레드 알림
Alice가 있는 샘플 앱의 메시지를 반복해서 탭하여 Alice라는 친구와의 대화에 대한 알림을 보내도록 합니다. 이 대화의 알림은 동일한 스레드의 일부이므로 잠금 화면과 알림 센터에서 함께 그룹화합니다.
다른 친구와 대화를 시작하려면 새 친구 선택 단추를 탭합니다. 이 대화에 대한 알림은 별도의 그룹에 표시됩니다.
ThreadIdentifier
샘플 앱은 새 스레드를 시작할 때마다 고유한 스레드 식별자를 만듭니다.
void StartNewThread()
{
threadId = $"message-{friend}";
// ...
}
스레드 알림을 보내려면 샘플 앱:
- 앱에 알림을 보낼 수 있는 권한 부여가 있는지 확인합니다.
- 를 만듭니다.
UNMutableNotificationContent
알림의 콘텐츠에 대한 개체 및 해당 콘텐츠의 개체를 설정합니다.ThreadIdentifier
위에서 만든 스레드 식별자에 대한 입니다. - 요청을 만들고 알림을 예약합니다.
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);
// ...
}
동일한 스레드 식별자가 있는 동일한 앱의 모든 알림이 동일한 알림 그룹에 표시됩니다.
참고 항목
원격 알림에 스레드 식별자를 설정하려면 알림의 JSON 페이로드에 키를 추가 thread-id
합니다. 자세한 내용은 Apple의 원격 알림 생성 문서를 참조하세요.
SummaryArgument
SummaryArgument
알림이 속한 알림 그룹의 왼쪽 아래 모서리에 표시되는 요약 텍스트에 알림이 미치는 영향을 지정합니다. iOS는 전체 요약 설명을 만들기 위해 동일한 그룹의 알림에서 요약 텍스트를 집계합니다.
샘플 앱은 메시지의 작성자를 요약 인수로 사용합니다. 이 방법을 사용하면 Alice와 함께 6개의 알림 그룹에 대한 요약 텍스트가 Alice와 Me의 5개 추가 알림일 수 있습니다.
읽지 않은 알림
샘플 앱의 약속 미리 알림 단추를 탭할 때마다 다양한 약속 미리 알림 알림 중 하나가 전송됩니다. 이러한 미리 알림은 스레드되지 않으므로 잠금 화면 및 알림 센터의 애플리케이션 수준 알림 그룹에 표시됩니다.
읽지 않은 알림을 보내기 위해 샘플 앱의 ScheduleUnthreadedNotification
메서드는 위와 유사한 코드를 사용합니다.
그러나 개체에 ThreadIdentifier
대해 UNMutableNotificationContent
설정되지는 않습니다.