[iOS/Swift] Firebase FCM 구현하기 (푸시알림) - APNs

SoyoungLee·2022년 11월 9일
0

iOS/스위프트

목록 보기
1/6

💌 [iOS/Swift] Firebase FCM 구현하기 (푸시알림)

안드로이드와는 다르게 아이폰은 FCM 을 구현하는데 조금 까다롭다.
Firebase APNs 인증서 방식도 기존 p12 에서 보완한 p8이 추가되었다.

검색하면서 알게된 개념을 정리

📌 FCM 셋팅 방식

💜 .p12 키

  • 1년 마다 갱신되는 인증서

💜 .p8 키

  • 영구적으로 사용가능
  • 한번 발급 시 다시 다운로드 불가능하므로 잘 보관해야 함
  • 한 개의 키로 여러 앱에 등록 가능

=> p8 키를 사용하자 ~!

📌 Key 생성

(1) Apple Developer 접속

https://developer.apple.com/account/

(2) 키 클릭

(3) 키 생성 (+버튼 클릭)

(4) Apple Push Notification services (APNs) 체크

키는 한 아이디당 두개만 생성이 가능해서 두개를 생성한 저는 비활성화가 되어있음

(5) 생성 후 다운로드

한번 다운로드를 받으면 다시 다운받지 못하므로, 잘 보관하기 !

📌 App ID 생성

(1) Certificates, Identifiers & Profiles > Identifiers

(2) App IDs 체크 후 Continue

(3) Continue

(4) Description Bundle ID 입력 후 Continue

(5) Capabilities > Push Notifications 체크 후 Continue

생성 하면 목록에서 확인할 수 있는데 생성된 아이를 클릭하면

Team ID 를 확인 할 수 있음 (Firebase 에 등록시 사용되니 적어두기!)

📌 Firebase 에 프로젝트 추가


프로젝트 갯수가 제한적이므로 기존 생성해둔 프로젝트가 있다면 앱추가 권장

💜 Apple 앱에 Firebase 추가

(1) 앱 등록

번들 ID 입력 나머지는 선택

(2) 구성 파일 다운로드

(3) xCode > 프로젝트 > 파일추가

📌 Firebase SDK 추가

(1) xCode > File > Add Packages.. > URL 입력

https://github.com/firebase/firebase-ios-sdk

(2) FirebaseMessaging 체크 후 Add Packages

AppDelegate 에 추가

(1) AppDelegate 에 Firebase 초기화

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
    }
    
    ...

(2) 푸시 기능 추가

프로젝트 > Signing & Capabilities > +Capability

Push Notification 추가

(3) 알림 등록 권한 체크

		// 델리게이트 설정
        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)")
          }
        }
    }
profile
Android Developer..+ iOS 슬쩍 🌱 ✏️끄적끄적,,개인 기록용 👩🏻‍💻

0개의 댓글