Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

개발자의 삽질

[iOS, Firebase] Firebase 이용해서 푸시 알림 받기! 본문

iOS

[iOS, Firebase] Firebase 이용해서 푸시 알림 받기!

uniqueimaginate 2022. 5. 4. 11:22

Firebase를 이용해서 원격으로 푸시 알림을 받아보자!

목차

  1. Firebase 프로젝트 생성 및 iOS 프로젝트에 SDK 적용
  2. Apple Push Services 인증서 생성
  3. iOS 프로젝트에 Firebase Push Notification 을 위한 세팅
  4. 테스트를 통해 푸시 정상 확인하기!

 

1. Firebase 프로젝트 생성

프로젝트 이름을 설정해주세요
구글 애널리틱스는 켜줍니다.
위와 같이 프로젝트가 만들어집니다. 조금만 기다려주세요
다 만들어지면 위와 같은 화면이 생성됩니다. 이제 iOS 앱을 추가해주세요!
앱에 대한 정보를 적어주세요
저는 위와 같이 적어두었습니다. 앱 닉네임은 없어도 되요~
파일을 다운받아서 프로젝트에 넣어둡니다. 꼭 넣어야 해요!
이제 Firebase SDK를 프로젝트에 넣어야 합니다. 저는 CocoaPods를 사용할 예정입니다.

CocoaPods 설치는 개인의 몫으로 두겠습니다.

해당 프로젝트 경로에 가서 CocoaPods을 초기화 한 후에 아래와 같이 Podfile을 수정해 둡니다.

딱 한 줄 추가했습니다.

pod 'Firebase/Messaging'

Podfile

프로젝트에 Pod을 추가하면 최종적으로 아래와 같은 프로젝트 구조가 됩니다.

프로젝트 구조

단순히 추가만 하면 Firebase를 쓸수 있는게 아니라,

AppDelegate.swift를 아래와 같이

import Firebase

FirebaseApp.configure()

두 줄을 위치에 맞게 추가함으로써 Firebase가 프로젝트에서 사용될 수 있게끔 만들어줍니다.

import UIKit
import Firebase

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

  var window: UIWindow?

  func application(_ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions:
      [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    FirebaseApp.configure()

    return true
  }
}

여기까지 Firebase 프로젝트 세팅을 마무리했습니다.

이제 Apple Push Service 인증서에 대해 알아보겠습니다.

 

2. Apple Push Services 인증서 생성

먼저 이게 왜 필요한지 부터 알아야 합니다.

다시 Firebase 로 갑니다.

프로젝트 설정에서 Cloud Messaging 탭으로 가면 위와 같은 화면을 보여준다.

아래로 조금 스크롤을 하면 바로 밑에

APNS Authentication Key, APNS Certificates를 업로드하는 곳이 있습니다

여기에 Apple 에서 발급받은 Key 또는 Certificates를 넣어야만 원격 푸시가 정상적으로 작동합니다.

둘 중에 하나만 넣어도 됩니다.

일단 이글에서는 APNS Key, Certificates가 무엇인지는 다루지 않겠습니다. 이건 추후에 다시 다루어볼 예정입니다.

 

APNS Key는 .p8 형태를 띄고 하나만 업로드 하면 되고,

APNS Certificates 는 .p12 형태를 띄고 개발용, 배포용 인증서가 따로 있습니다.

참고로 .p12는 일년마다 갱신해야 합니다.

그렇다면 이제 Apple 개발자 사이트에 들어가서 인증서를 발급받으로 갑시다.

저 같은 경우 이미 APNS Key를 2개 다 만들었기에(2개까지가 제한임) APNS Certificates로 만들어보겠습니다.

 

먼저 만든 앱에 대한 Identifier 부터 생성하자. 더하기 버튼을 누르자!
App IDs 로 선택하고 Continue
App 으로 선택하고 Continue
앱에 대한 설명과 Bundle ID를 적어둡니다.
아래로 스크롤해서 Push Notifications를 꼭 선택해줍니다.

이제 continue를 하고 register를 하면 앱 Identifier 등록이 마무리 됩니다.

위의 사진과 같이 등록이 되었습니다.

이제 인증서를 생성하고 해당 Identifier에 등록해주어야 합니다.

해당 프로젝트를 클릭해줍니다. 그리고 아래로 스크롤해서 Push Notifications를 찾아줍니다.

이제 Configure를 눌러주세요
이제 인증서를 만들어주세요

인증서 만드는 방법은 이전에 쓴 글

2021.12.05 - [iOS] - [iOS] 협업시에 필요한 프로비저닝, 인증서 생성하기 - 1 을 참고해주세요.

인증서 생성 후, 등록이 되면 아래와 같은 모습을 띄게 됩니다.

인증서를 다운받아서 키체인에 등록해줍니다.

주의할 점은, 시스템 키체인이 아니라 로그인 키체인, 내 인증서에 이렇게 떠야 합니다. 인증서를 더블 클릭하기 보다는 드래그 앤 드롭으로 가져와주세요.

이제 위의 인증서들을 오른쪽 클릭해서 내보내기를 해주세요. .p12 포맷으로 하면 됩니다.

내보내기를 완료하면 위와 같은 형태의 파일을 볼 수 있습니다. 

명칭은 자유롭게 하시면 됩니다.

 

이제 아까전에 보여드린 파이어베이스 프로젝트 설정창으로 가서 위의 키를 업로드 하시면 됩니다.

이렇게 업로드를 하면 됩니다.

 

3. iOS 프로젝트에 Firebase Push Notification을 위한 세팅

다시 iOS 프로젝트에 와서 Background Modes, Push Notifications 를 가능하게 해야한다.!

여기에 와서 + 버튼을 누릅니다
Push Notifications를 추가해줍니다
Background Modes도 추가해줍니다
Background Modes에서 Remote notifications를 체크해줍니다

 

Firebase 원격 알림을 받기 위해서 AppDelegate.swift 코드를 아래와 같이 변경해 줍니다.

한글 주석들을 읽어보면 좋습니다!

import UIKit
import Firebase
import FirebaseMessaging

@main
class AppDelegate: UIResponder, UIApplicationDelegate {

	// Firebase 원격 알림을 가능하게 해주는 코드 이다.
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.

        FirebaseApp.configure()
        Messaging.messaging().delegate = self

        UNUserNotificationCenter.current().delegate = self
        let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
        UNUserNotificationCenter.current().requestAuthorization(options: authOptions) { granted, _ in
                if granted {
                    print("알림 등록이 완료되었습니다.")
                }
            }
        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.
    }

}

extension AppDelegate: UNUserNotificationCenterDelegate {
    func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
        Messaging.messaging().apnsToken = deviceToken
    }

	// foreground 상에서 알림이 보이게끔 해준다.
    func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
        completionHandler([.banner, .sound, .badge])
    }
}

extension AppDelegate: MessagingDelegate {

    func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String?) {
        // 여기서 이제 서버로 다시 fcm 토큰을 보내줘야 한다!
        // 그러나 서버가 없기 때문에 이렇게 token을 출력하게 한다.
        // 이 토큰은 뒤에서 Test할때 필요하다!
        print("FCM Token: \(fcmToken)")
    }
}

이제 빌드를 하고 출력된 토큰을 복사해둡니다.

토큰 복사하자!

4. 테스트를 통해 푸시 정상 확인하기!

다시 Firebase 화면으로 가서 왼쪽 목록에서 Cloud Messaging 탭으로 간다.

여기서 이제 Send your first message 클릭!

위의 화면에서 이제 title과 text를 작성해준다.

본인은 둘다 test로 적어두겠다.

그러면 이제 오른쪽에 Send test message 버튼이 활성화가 될 것이다.

눌러주자

이제 아까 출력해둔 token 을 가져와야 할 때이다.
테스트를 눌러보자
알림이 정상적으로 오는 것을 확인했다.

길고 긴 과정이 끝났습니다.

여기까지 Firebase를 이용해 원격 알림을 날리는 법에 대해 알아봤습니다.

추후에 알림에 이미지를 담는 법을 알아보겠습니다.

Comments