안드로이드와는 다르게 아이폰은 FCM 을 구현하는데 조금 까다롭다.
Firebase APNs 인증서 방식도 기존 p12 에서 보완한 p8이 추가되었다.
검색하면서 알게된 개념을 정리
=> p8 키를 사용하자 ~!
https://developer.apple.com/account/
키는 한 아이디당 두개만 생성이 가능해서 두개를 생성한 저는 비활성화가 되어있음
한번 다운로드를 받으면 다시 다운받지 못하므로, 잘 보관하기 !
생성 하면 목록에서 확인할 수 있는데 생성된 아이를 클릭하면
Team ID 를 확인 할 수 있음 (Firebase 에 등록시 사용되니 적어두기!)
프로젝트 갯수가 제한적이므로 기존 생성해둔 프로젝트가 있다면 앱추가 권장
번들 ID 입력 나머지는 선택
https://github.com/firebase/firebase-ios-sdk
import UIKit
import UserNotifications
import FirebaseCore
import FirebaseMessaging
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
FirebaseApp.configure()
return true
}
...
프로젝트 > Signing & Capabilities > +Capability
Push Notification 추가
// 델리게이트 설정
Messaging.messaging().delegate = self
// 알림 등록 권한 체크
if #available(iOS 10.0, *) {
// iOS 10 디스플레이 알림용(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()
private func logRegToken() {
Messaging.messaging().token { token, error in
if let error = error {
print("FCM 등록 토큰을 가져오는 동안 오류가 발생했습니다 : \(error)")
} else if let token = token {
print("FCM 등록 토큰 : \(token)")
}
}
}