티스토리 뷰
FCM 연결을 할때 AppDelegate 에 일부 코드를 넣어야하는데
이게 은근 할때마다 헷갈려서 제가 쓸려고 올려봅니다.
(FCM : Firebase Cloud Message 일종의 푸시 서비스 라고 생각하시면 됩니다.)
(순수 코드만 올릴거라 별도의 설명은 없습니다.)
import UIKit
import Firebase
import FirebaseMessaging
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
sleep(1)
FirebaseApp.configure()
Messaging.messaging().delegate = self
UNUserNotificationCenter.current().delegate = self
let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
UNUserNotificationCenter.current().requestAuthorization(options: authOptions) { _, _ in }
application.registerForRemoteNotifications()
return true
}
// MARK: UISceneSession Lifecycle
func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
// Called when a new scene session is being created.
// Use this method to select a configuration to create the new scene with.
return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
}
func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {
// Called when the user discards a scene session.
// If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions.
// Use this method to release any resources that were specific to the discarded scenes, as they will not return.
}
// fcm token
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
let deviceTokenString = deviceToken.reduce("", {$0 + String(format: "%02X", $1)})
print("[Log] deviceToken :", deviceTokenString)
Messaging.messaging().apnsToken = deviceToken
}
}
extension AppDelegate: UNUserNotificationCenterDelegate {
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
if #available(iOS 14.0, *) {
completionHandler([.banner, .list, .badge, .sound])
} else {
completionHandler([.alert, .badge, .sound])
}
}
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
completionHandler()
}
}
extension AppDelegate: MessagingDelegate {
func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String?) {
print("파이어베이스 토큰: \(fcmToken)")
// TODO: If necessary send token to application server.
}
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any],
fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
// TODO: Handle data of notification
completionHandler(UIBackgroundFetchResult.newData)
}
}
이 코드가 정답은 아니지만
혹시 저처럼 FCM 가이드보다가 헷갈리시는 분들을 위해 올려봅니다.
오늘도 파이팅입니다.
'iOS개발 > Swift 통신' 카테고리의 다른 글
Swift Alamofire 간단 서버에서 값 가져오기 기본편 (0) | 2022.12.27 |
---|---|
Swift ObjectMapper 사용해보기 (0) | 2022.12.26 |
Swift 날씨 api 연결해보기 Only 코드 (0) | 2022.12.01 |
Swift 날씨 api 연결해보기 3단계(완) (0) | 2022.12.01 |
Swift 날씨 api 연결해보기 2단계 (0) | 2022.12.01 |
댓글