[IOS] UNNotificationServiceExtension을 사용하여 앱이 포그라운드(Foreground) 또는 백그라운드(Background) 상태일 때 푸시 알림의 메시지를 다르게 표시 하는 방법
UNNotificationServiceExtension
을 사용하여 앱이 포그라운드(Foreground) 또는 백그라운드(Background) 상태일 때 푸시 알림의 메시지를 다르게 표시할 수 있습니다. 포그라운드와 백그라운드에서 다르게 처리하는 방법은 다음과 같습니다:
- Foreground 상태에서의 처리: 포그라운드 상태에서 푸시 알림이 도착하면
didReceive(_:withContentHandler:)
메서드가 호출됩니다. 이 메서드 안에서 푸시 알림의 내용을 변경하고, 변경된 내용을 사용하여 사용자에게 알림을 표시할 수 있습니다.
`override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
// 포그라운드에서의 처리 예시: 제목을 변경하고 내용을 그대로 유지
let modifiedContent = request.content.mutableCopy() as! UNMutableNotificationContent
modifiedContent.title = "포그라운드 제목"
contentHandler(modifiedContent)
}`
- Background 상태에서의 처리: 백그라운드 상태에서 푸시 알림을 받을 때에는 사용자에게 직접적으로 표시되지 않습니다. 따라서 푸시 알림의 내용을 변경하거나 추가적인 처리를 하려면 백그라운드에서 수행되어야 하는 작업을
didReceive(_:withContentHandler:)
메서드 안에서 처리하는 것이 아닌, 해당 내용을 기반으로한 백그라운드 작업을 직접 관리해야 합니다.
`override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
// 푸시 알림 내용을 변경하지 않고, 백그라운드 작업을 시작
startBackgroundTask {
// 백그라운드 작업이 완료되면 변경된 내용을 전달
contentHandler(request.content)
}
}
func startBackgroundTask(completion: @escaping () -> Void) {
// 백그라운드 작업을 시작하고 완료 시 호출될 completion을 설정
let taskId = UIApplication.shared.beginBackgroundTask {
// 백그라운드 작업 종료
UIApplication.shared.endBackgroundTask(taskId)
}
// 실제 백그라운드 작업 수행
DispatchQueue.global().async {
// 백그라운드 작업 처리
// 작업이 완료되었음을 알림
completion()
// 백그라운드 작업 종료
UIApplication.shared.endBackgroundTask(taskId)
}
}`
백그라운드 작업을 수행하는 startBackgroundTask(completion:)
메서드를 사용하여 백그라운드에서 실행될 작업을 관리하고, 작업이 완료되면 해당 내용을 푸시 알림에 전달하는 방식으로 백그라운드 상태에서의 작업을 처리할 수 있습니다.