iOS 앱에서 push로 전달되는 메시지의 내용을 앱에서 변경하려면, 앱에서 push notification의 내용을 수정하는 방법과 서버 측에서 push notification을 보낼 때 커스텀 데이터를 추가하여 앱에서 이를 활용하는 방법 두 가지가 있습니다.
-
앱에서 push notification의 내용을 수정하는 방법: iOS에서는 기본적으로 push notification의 내용은 서버에서 생성되고 전달되지만, 앱에서 push notification을 받기 전에 알림을 처리하는
UNUserNotificationCenterDelegate
를 사용하여 알림을 수정할 수 있습니다. 이를 통해 받은 push notification의 내용을 변경하거나 특정 조건에 따라 처리를 추가할 수 있습니다.예를 들어, Foreground 상태에서 push notification을 받았을 때 아래와 같이
UNUserNotificationCenterDelegate
를 구현하여 내용을 수정할 수 있습니다.
import UserNotifications
class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate {
// ...
// Foreground 상태에서 알림 도착 시 호출되는 메서드
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
// push notification의 내용을 변경하고 처리할 작업 수행
let content = notification.request.content.mutableCopy() as! UNMutableNotificationContent
content.title = "변경된 제목"
content.body = "변경된 내용"
// 변경된 내용으로 새로운 알림을 구성합니다.
let newNotification = UNNotificationRequest(identifier: notification.request.identifier, content: content, trigger: notification.trigger)
// 새로운 알림을 발송합니다.
UNUserNotificationCenter.current().add(newNotification) { (error) in
// 알림 추가 완료 시의 처리
}
}
// ...
}
-
서버 측에서 push notification에 커스텀 데이터 추가하기: 또 다른 방법은 서버에서 push notification을 보낼 때 커스텀 데이터를 추가하는 것입니다. 이렇게 하면 서버에서 push notification의 내용을 자유롭게 구성할 수 있으며, 앱에서는 커스텀 데이터를 읽어와서 원하는 방식으로 처리할 수 있습니다.
예를 들어, 서버에서 JSON 형식의 커스텀 데이터를 추가하여 아래와 같이 push notification을 전송할 수 있습니다.
{
"aps": {
"alert": {
"title": "Notification Title",
"body": "Notification Body"
},
"sound": "default"
},
"custom_data_key": "Custom Data Value"
}
앱에서는 UNUserNotificationCenterDelegate
를 통해 받은 push notification의 커스텀 데이터를 읽어올 수 있습니다.
import UserNotifications
class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate {
// ...
// Foreground, Background, 백그라운드 또는 종료된 상태에서 알림 도착 시 호출되는 메서드
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
let userInfo = response.notification.request.content.userInfo
// 커스텀 데이터 읽어오기
if let customData = userInfo["custom_data_key"] as? String {
// 커스텀 데이터를 이용한 작업 수행
print("받은 커스텀 데이터: \(customData)")
}
completionHandler()
}
// ...
}
서버에서 push notification에 커스텀 데이터를 추가하는 방법을 사용하면, 앱에서는 push notification을 받을 때 커스텀 데이터를 활용하여 원하는 작업을 수행할 수 있습니다.
UNNotificationServiceExtension
를 사용하면, iOS에서 수신한 원격 알림의 내용을 변경하거나 추가 작업을 수행할 수 있습니다. UNNotificationServiceExtension
은 기존의 원격 알림을 수정하여 처리하며, 이를 통해 푸시 알림에 추가 정보를 추가하거나 레이아웃을 변경할 수 있습니다.
아래는 UNNotificationServiceExtension
를 사용하여 푸시 알림의 내용을 변경하는 간단한 예제입니다.
- Xcode에서 새로운 “Notification Service Extension” 타겟을 추가합니다.
- 생성된
NotificationService
클래스를 열고,didReceive(_:withContentHandler:)
메서드를 구현합니다.
import UserNotifications
class NotificationService: UNNotificationServiceExtension {
override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
// 원본 알림의 내용
let content = request.content.mutableCopy() as! UNMutableNotificationContent
// 알림 내용 변경
content.title = "새로운 알림 제목"
content.body = "새로운 알림 내용"
// 추가 작업 수행
// ...
// 변경된 내용으로 알림을 업데이트합니다.
contentHandler(content)
}
override func serviceExtensionTimeWillExpire() {
// 서비스의 제한 시간이 다 된 경우 호출됩니다.
// 이 시점까지 변경된 내용으로 알림을 업데이트해야 합니다.
super.serviceExtensionTimeWillExpire()
}
}
위의 예제에서는 didReceive(_:withContentHandler:)
메서드를 구현하여 원본 알림의 내용을 변경하고 추가 작업을 수행한 뒤, 변경된 내용으로 알림을 업데이트하고 있습니다. 추가적으로 serviceExtensionTimeWillExpire()
메서드를 사용하여 서비스의 제한 시간이 다 된 경우에 대비하여 변경된 내용으로 알림을 업데이트할 수도 있습니다.
이렇게 UNNotificationServiceExtension
을 사용하면 원격 알림의 내용을 변경하거나 추가 작업을 수행할 수 있으며, 수정된 내용으로 알림이 사용자에게 표시됩니다.