KeyID, TeamID, Device Token으로 발송 테스트 할 수 있는 어플리케이션 https://apps.apple.com/kr/app/swifty-pusher/id1618221326?mt=12
애플 공식 문서 https://developer.apple.com/documentation/usernotifications
1. Apple Developers Key 등록
https://developer.apple.com/account/resources/authkeys/list
2. 인증 키 다운로드
3. 디벨로퍼스 푸시 알림 설정
"2. 인증 키 다운로드"에서 받은 AuthKey_XXXXXXXX.p8 파일과 Key ID
그리고 https://developer.apple.com/ > Account > Membership에서 확인할 수 있는 Team ID를 설정합니다.
4. XCode 푸시 알림 설정
Background Modes의 Remote notification과 PushNotification을 추가합니다.
참고. https://help.apple.com/xcode/mac/current/#/devdfd3d04a1
import UserNotifications
@main
class AppDelegate: UIResponder, UIApplicationDelegate, MessagingDelegate, UNUserNotificationCenterDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
Messaging.messaging().delegate = self
if #available(iOS 10.0, *) {
// For iOS 10 display notification (sent via APNS)
UNUserNotificationCenter.current().delegate = self
let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
UNUserNotificationCenter.current().requestAuthorization(
options: authOptions,
completionHandler: { _, _ in }
)
} else {
let settings: UIUserNotificationSettings =
UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
application.registerUserNotificationSettings(settings)
}
application.registerForRemoteNotifications()
return true
}
// [START receive_message]
func application(_ application: UIApplication,
didReceiveRemoteNotification userInfo: [AnyHashable: Any],
fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult)
-> Void) {
// If you are receiving a notification message while your app is in the background,
// this callback will not be fired till the user taps on the notification launching the application.
// TODO: Handle data of notification
// With swizzling disabled you must let Messaging know about the message, for Analytics
// Messaging.messaging().appDidReceiveMessage(userInfo)
// Print message ID.
if let messageID = userInfo[gcmMessageIDKey] {
print("Message ID: \(messageID)")
}
// Print full message.
print(userInfo)
completionHandler(UIBackgroundFetchResult.newData)
}
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
Messaging.messaging().apnsToken = deviceToken
print("APNs token retrieved: \(deviceToken)")
}
}
5. 테스터로 푸시 알림 테스트
※ 개발환경에서 로그로 확인한 deviceToken은 Sandbox APN Server로 발송 가능합니다.
※ 동일한 앱이라도 앱스토어에서 다운로드 받은 앱은 deviceToken이 다르고 스토어에서 앱 재설치해도 deviceToken이 달라집니다.
※ 앱스토어에서 설치한 앱으로 받은 deviceToken만 Production APN Server로 발송 가능합니다.
6. 카카오 푸시 알림 API 호출
(1) 푸시 토큰 등록 하기 - 공식문서
헤더에 Admin Key 를 Authorization 설정하고 push_token과 device_id에 deviceToken 값을 설정합니다.
(2) 푸시 알림 보내기 - 공식문서
{
"for_apns":{
"badge":3,
"sound":"sound_file",
"push_alert":true,
"message":"홍길동님 외 2명이 댓글을 달았습니다.",
"custom_field":{
"article_id":"111",
"comment_id":"222"
}
}
}
디벨로퍼스 가이드에 있는 내용 그대로 발송
'카카오 REST API & SDK > 푸시 알림' 카테고리의 다른 글
카카오 디벨로퍼스 푸시알림 사용자 Firebase Cloud Messaging API(HTTP V1)로 마이그레이션 방법 안내 (0) | 2024.05.15 |
---|---|
node.js 예제 - [푸시 알림] 푸시 알림 보내기 (0) | 2021.09.02 |
android(kotlin) + fcm + Postman 예제 - 푸시 알림 (3) | 2021.03.30 |
푸시 알림 자주하는 질문 (0) | 2021.01.19 |
댓글