FCM 사용법(iOS)

  • 파이어베이스 문서에 잘(?) 설명이 되어 있으나 한국어인데도 알아듣지 못하겠어서 직접 해보고 최근(18.10.15) 기준으로 작성한다.
  • FCM의 작동 방법이나 원리 등을 각자 알아보도록 하자.
  • FCM을 사용하기 위해서는 크게 콘솔 설정과 클라이언트 설정 2가지를 해야한다.
  • FCM의 정상 작동 확인을 위해서는 꼭 실 기기가 있어야만 한다.
  • 또한 애플 개발자 계정도 필요하다.

사전 준비

  • 우선 파이어베이스에 접속한다.
  • 계정이 있다면 로그인, 그렇지 않은 경우는 생성한다.
  • 로그인 후 우측 상단 콘솔로 이동 클릭.



  • 새 프로젝트 생성



  • 프로젝트 이름을 적절히 입력



  • 프로젝트가 생성되면 iOS 앱 추가 시작



  • 만들어질 혹은 만들어진 앱의 번들 ID를 입력



  • GoogleService-info.plist 다운로드하여 프로젝트 파일에 넣기



  • 프로젝트에 pod 추가하기

pod 'Firebase/Core'
pod 'Firebase/Messaging' // 우리는 FCM을 이용하려고 하기 때문에 Messaging을 추가한다.



  • 초기화 코드 추가



  • AppDelegate.swift 는 다음과 같은 모습이 된다.
import UIKit

import Firebase



@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?


    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        FirebaseApp.configure() // <--- 추가된 부분
        return true
    }

    func applicationWillResignActive(_ application: UIApplication) {
        // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
        // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game.
    }

    func applicationDidEnterBackground(_ application: UIApplication) {
        // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
        // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
    }

    func applicationWillEnterForeground(_ application: UIApplication) {
        // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.
    }

    func applicationDidBecomeActive(_ application: UIApplication) {
        // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
    }

    func applicationWillTerminate(_ application: UIApplication) {
        // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
    }

}



  • 여기까지 정상적으로 됐다면 앱을 실행했을때 다음처럼 정상 등록 여부를 확인할 수 있다. (여기까진 시뮬레이터로 실행해도 확인 가능)



  • 이제 사전 준비 사이클이 끝났다.👏

콘솔 설정

  • 콘솔 설정을 위해서는 APN 인증키 파일(.p8), 키 ID, 팀 ID가 필요하다.
  • 우선 애플 개발자 사이트 로 접속하자.
  • 그 다음 Certificates, Identifiers & Profiles 로 이동
  • 좌측 메뉴에서 Keys 선택 후 우측 상단 + 버튼 클릭.



  • 키에 대한 설명을 적고, APNs 에 체크 그리고 Continue를 눌러 과정을 끝낸다.



  • 키 생생성은 끝났고, 여기서 키 ID를 따로 복사해두고, APN 인증키 파일을 다운로드 하여 저장해둔다.



  • 다음은 좌측 메뉴에서 App IDs를 선택하고 마찬가지로 + 버튼을 누른다.



  • 여기에 App ID Descriptio을 적고, 팀 ID를 따로 복사해둔다.
  • 그리고 번들 ID는 아까 만든 번들 ID를 그대로 적는다.



  • 그리고 밑으로 쭉 내려서 Push Notifications에 체크 후 Continue를 클릭.



  • 이제 다시 파이어베이스로 돌아와서 클라우드 메시징 메뉴에서 APN 인증키를 업로드 해야한다.



  • 아까 저장했던 APN 인증키 파일을 업로드하며 미리 복사해두었던 앱 ID와 팀 ID를 적으면 끝.



  • 이제 콘솔 설정 사이클도 끝이다.👏

클라이언트 설정

  • 우선 Push Notifications 옵션을 ON 으로 설정한다.



  • 그 다음 AppDelegate.swift에 UserNotifications를 import 한다.
import UserNotifications
  • 그리고 ‘UNUserNotificationCenterDelegate’ 와 ‘MessagingDelegate’를 채택한다.
class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate, MessagingDelegate {...}
  • 다음 코드를 복사해서 알림을 등록하자
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        /// 👇추가된 코드
        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()
        /// 👆추가된 코드
        
        FirebaseApp.configure()
        
        return true
    }
  • 그리고 앱을 실행하면 다음과 같이 알림을 허용할 거냐고 물어본다.



  • 정상작동 하는지 테스트하기 위해서 파이어베이스 콘솔에서 메시지를 보내본다.



  • 그러면 정상적으로 알림이 온다.



  • 알림을 받고난 후의 처리나, 토큰 등 추가적인 내용은 알아서 학습하도록…👋