알림 페이로드 처리
포그라운드와 백그라운드 알림에 응답합니다.
알림 페이로드 처리은(는) CoddyKit의 무료 Swift Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Swift Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Swift Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
페이로드 구조
원격 알림은 서버가 APNs로 보내는 JSON 딕셔너리입니다. 예약된 aps 키에는 알림, 사운드, 배지와 같이 사용자에게 표시되는 콘텐츠가 들어가고, 나란히 있는 다른 키에는 열 항목 ID와 같은 사용자 지정 데이터가 들어갑니다.
// Example payload JSON:
// {
// "aps": { "alert": { "title": "Hi", "body": "..." },
// "sound": "default", "badge": 1 },
// "itemId": "42"
// }aps 딕셔너리
aps 내부에서 alert는 문자열일 수도 있고 제목, 본문, 부제목으로 이루어진 객체일 수도 있습니다. sound, badge, content-available 및 mutable-content와 같은 플래그도 여기에 들어갑니다. aps 외부의 내용은 모두 직접 정의합니다.
// aps keys:
// alert: { title, subtitle, body }
// sound: "default" or critical sound object
// badge: Int
// content-available: 1 (silent / background)
// mutable-content: 1 (allow modification)포그라운드에서의 전달
기본적으로 앱이 포그라운드에 있을 때 도착한 알림은 표시되지 않습니다. 그래도 알림을 표시하려면 델리게이트의 willPresent를 구현하고 배너와 사운드처럼 원하는 표시 옵션을 반환합니다.
import UserNotifications
func userNotificationCenter(
_ center: UNUserNotificationCenter,
willPresent notification: UNNotification
) async -> UNNotificationPresentationOptions {
return [.banner, .sound, .badge]
}탭에 응답하기
사용자가 알림을 탭하면(앱이 백그라운드에 있었거나 종료된 상태였더라도) 델리게이트의 didReceive response가 실행됩니다. 여기서 페이로드를 읽고 올바른 화면으로 이동합니다.
import UserNotifications
func userNotificationCenter(
_ center: UNUserNotificationCenter,
didReceive response: UNNotificationResponse
) async {
let info = response.notification.request
.content.userInfo
if let id = info["itemId"] as? String {
print("open item", id)
}
}userInfo 읽기
사용자 지정 키를 포함한 전체 페이로드는 content.userInfo로 노출되며, 이는 [AnyHashable: Any] 딕셔너리입니다. 각 값을 신중하게 형 변환하세요. 잘못된 페이로드 때문에 앱이 중단될 수 있으므로 강제로 언래핑하면 안 됩니다.
import UserNotifications
func route(_ userInfo: [AnyHashable: Any]) {
guard let screen = userInfo["screen"] as? String
else { return }
switch screen {
case "profile": print("go to profile")
case "cart": print("go to cart")
default: break
}
}무음(백그라운드) 알림
content-available: 1을 설정하고 알림을 생략하면 앱을 백그라운드에서 깨워 UI 없이 데이터를 가져오는 silent 푸시가 됩니다. 이러한 푸시는 시스템에 의해 빈도가 제한되며 원격 알림 백그라운드 모드가 필요합니다.
// Silent payload — no alert, just a wake-up:
// { "aps": { "content-available": 1 }, "sync": true }
let silent = "content-available wakes app quietly"
_ = silent백그라운드 가져오기 처리기
무음 푸시는 앱 델리게이트의 didReceiveRemoteNotification 비동기 메서드에 도착합니다. 데이터를 가져온 다음 UIBackgroundFetchResult를 반환하면, 시스템이 새 데이터가 도착했는지 파악하고 이후 백그라운드 실행을 위한 리소스를 조정할 수 있습니다.
import UIKit
func application(
_ app: UIApplication,
didReceiveRemoteNotification userInfo: [AnyHashable: Any]
) async -> UIBackgroundFetchResult {
// fetch fresh data here
return .newData
}변경 가능한 콘텐츠와 서비스 확장
mutable-content: 1을 사용하면 알림 서비스 확장이 표시 전에 푸시를 가로챌 수 있습니다. 예를 들어 본문을 복호화하거나 이미지 첨부 파일을 다운로드하거나 제목을 수정할 수 있습니다. 확장이 작업을 완료할 수 있는 시간은 짧습니다.
// Service extension entry point (UNNotificationServiceExtension):
// override didReceive(_:withContentHandler:)
// modify bestAttemptContent, then call contentHandler
let mutable = "mutable-content enables interception"
_ = mutable알림 현지화
서버에서 텍스트를 현지화하려면 앱의 현지화 문자열에 있는 키를 참조하는 title-loc-key와 loc-key를 보내고, 대체 값에는 loc-args를 사용합니다. 기기가 미리 번역한 문구를 보내지 않아도 사용자의 언어로 이를 표시합니다.
// Localized alert payload:
// "alert": {
// "loc-key": "NEW_MESSAGE",
// "loc-args": ["Ada"]
// }
let localized = "loc-key resolves on device"
_ = localized배지 업데이트
badge 값은 앱 아이콘에 표시되는 숫자를 설정합니다. badge: 0을 보내면 숫자가 지워집니다. 사용자가 콘텐츠를 읽은 후 코드에서 setBadgeCount를 사용해 설정할 수도 있으며, 이렇게 하면 배지와 읽지 않은 상태를 일치시킬 수 있습니다.
import UserNotifications
func clearBadge() async {
try? await UNUserNotificationCenter.current()
.setBadgeCount(0)
}견고한 처리기
각 부분을 결합합니다. 포그라운드에서는 알림을 표시하고, 탭하면 이동하며, 모든 형 변환을 검증합니다. 처리기는 예상하지 못한 페이로드에서도 중단되지 않고 추출할 수 있는 내용을 항상 추출합니다.
import UserNotifications
func handleTap(_ response: UNNotificationResponse) {
let info = response.notification.request
.content.userInfo
guard let id = info["itemId"] as? String else {
print("no item id; open home")
return
}
print("navigate to item", id)
}빠른 확인
알림을 탭했을 때 어떻게 응답하는지 떠올려 보세요.
요약
페이로드를 처리하는 방법을 학습하셨습니다:
aps딕셔너리에는 사용자에게 표시되는 콘텐츠가 들어가고, 나란히 있는 키에는userInfo로 읽는 사용자 데이터가 들어갑니다.willPresent를 재정의해 포그라운드 알림을 표시하고,didReceive response로 탭을 처리합니다.content-available: 1은UIBackgroundFetchResult를 반환하는 무음 백그라운드 가져오기를 실행합니다.mutable-content는 서비스 확장을 활성화하고,loc-key는 기기에서 텍스트를 현지화합니다.
AI 튜터와 함께 Swift을(를) 배우세요 — 무료
브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.
- 코스
- 122
- 레슨
- 409
자주 묻는 질문
“알림 페이로드 처리” 강의는 무료인가요?
네 — “알림 페이로드 처리” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Swift Academy 강의 전체를 잠금 해제할 수 있습니다. Swift Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“알림 페이로드 처리”에서 뭘 배우나요?
포그라운드와 백그라운드 알림에 응답합니다. 브라우저에서 직접 실행하는 실습 코드로 Swift Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Swift Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Swift Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.
“알림 페이로드 처리” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Swift Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Swift Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 푸시 알림 등록하기
- 알림 페이로드 처리
- 백그라운드 작업과 새로 고침
- 알림 액션과 카테고리