[iOS] FCM(Firebase Cloud Messaging) + APNs - 푸쉬 알림 등록 (2)

2021. 2. 21. 14:08iOS

반응형

저번 시간에는 푸쉬 알림을 등록하기 위해 필요한 배경지식들을 알아보았습니다.

 

이번에는 직접 iPhone으로 푸쉬알림이 가는 테스트를 진행해보려고 합니다.

 

오늘은 Firebase Cloud Messaging(FCM)을 이용해서 인증서를 등록하고 간단한 테스트 메세지를 핸드폰으로 전송해보겠습니다.

 

 

FCM + APNs

이전 포스팅에서 말했듯이, Provider - APNs 사이에 신뢰되는 사이인지를 확인하기 위해 인증서가 필요한데요.

우선은 이 인증서를 발급받아볼게요. 

 

저희가 이번 실습에서 해볼 인증서 방식은 p8, p12 방식 중에 p12 방식입니다.

(p12 방식은 1년마다 인증서를 갱신시켜주어야하고 프로젝트마다 다른 인증서를 등록해주어야 해요 😢, 요즘 자주 사용하는 방식은 p8 방식이라고 합니다.)

 

우선 Apple Developer 사이트로 이동해서 다음과 같은 화면으로 들어가주세요. (로그인은 필수이고 애플 개발자 계정도 필수입니다.)

 

우선 앱 프로젝트에 해당하는 Identifiers를 생성할 거에요.

이거를 하는 이유는 APNs에서 Bundle Identifier로 프로젝트를 식별하는데 여기서 사용할 서비스와 프로젝트를 식별하기 위함..!!

 

이제 + 버튼을 눌러서 밑의 그림과 같이 생성해줄건데요.

여기서 입력해야하는 사항은 Bundle Identifier + 앱에서 어떤 서비스를 이용할지는 명시하면 됩니다.

 

+ 버튼을 누르면 밑의 사진과 같은 화면이 나오고 그림처럼 설정해주시면 됩니다.

그리고 다음에서 App을 선택해주시고,

이제 여기서 Bundle ID에 본인의 프로젝트 Bundle Identifier를 설정해주세요. 

Description에는 그냥 프로젝트를 설명하는 문장을 자유롭게 입력해주세요.

 

그리고 중요...‼️

밑의 Capabilities에서 저희는 앱에서 Push Notification을 사용할 것이기 때문에, 꼭 체크해주셔야 합니다.

스크롤을 내리면 있습니다. (여기서 나중에 In-App Purchase, Apple Login을 사용하게 될 시, 체크하면 됩니다.)

그리고 생성을 하고 등록해주세요.

여기까지하면 이제 Bundle Identifier에 대해 등록이 완료되었습니다.

 

다음으로 이제 Provider 측에서 사용할 증명서를 발급해야합니다.

그렇게 발급해야만 Provider에서 APN으로 메세지를 보내고 APN에서 각 Device로 푸시 메세지를 보낼 수 있습니다.

 

방금 만든 Identifier 메뉴로 이동해서 p12 인증서를 개발자 인증용과 APNs 인증용 두 가지를 발급받을 것입니다.

Firebase에 등록할 때, 두 가지를 등록하여야 인증할 수 있습니다.

 

방금 만든 Identifier를 눌러서 들어가면 다음과 같은 메뉴의 Configuration 버튼 또는 Edit 버튼이 있는데 이를 눌러줍니다.

그럼 이와 같은 메뉴를 확인할 수 있는데, 전부 다운로드하고 다운받은 파일들을 실행시켜주세요.

아마 다운받고 실행을 하게 되면 개발용 인증서, Production용 인증서가 맥의 Keychain에 등록이 되었을 것입니다.

 

✏️ 아 등록을 하기 위해 먼저 Mac에서 등록을 위한 인증서를 발급받아야 저 위의 두 가지 인증서를 발급받을 수 있습니다. 

 

우선 Keychain으로 들어가주세요.

그리고 밑의 그림처럼 인증 기관에서 인증서 요청 메뉴를 클릭하고 

이메일 계정을 본인이 사용할 것으로 입력하고 디스크에 저장됨, 본인이 키 쌍 저장 두 가지 메뉴를 클릭해서 생성하고 저장해줍니다.

 

그리고 위의 그림에서 인증서를 신청할 때, 인증서를 제출하는 란에 이 파일을 제출하면 됩니다.

 

 

자 이제 인증서를 준비하기 위한 모든 절차는 완료되었습니다....‼️

 

다음으로 FCM을 이용하기 때문에, Firebase Project를 생성해야 합니다.

Firebase 홈페이지로 이동해서, iOS 프로젝트를 하나 생성해줍니다.

 

여기서 프로젝트의 Bundle Identifier를 입력합니다.

 

그리고 차례대로 안내를 따라서 진행을 해주면됩니다.

여기 부분은 어렵지 않기 때문에, 그냥 넘어갈게요 🙌

 

(아, Cocoapods를 설치하는데 저희는 Firebase/Messaging 만을 설치하면 됩니다.)

 

자 이제 프로젝트를 생성했다면, 이제 아까 이전에 생성했던 인증서를 등록해주어야겠죠.

만든 프로젝트의 설정메뉴로 이동해서 클라우드 메세징을 설정하는 탭이 있습니다.

 

그 곳에서 인증서를 등록할 것인데, 저희는 p12 방식의 인증서를 선택했죠..?

그러면 저기 위의 APN 인증키 방식 말고 밑의 APN 인증서 창에 아까 Production용 인증서, 개발용 인증서 두 가지를 업로드해줍니다.

이제 정말 얼마 남지 않았습니다.

 

이제는 생성한 Xcode 프로젝트로 이동해서 간단한 설정을 해볼게요..‼️

밑의 그림처럼 프로젝트 설정의 Signing & Capabilities로 이동하면 여러가지의 사용할 기능을 등록할 수 있습니다.

 

저희는 Push Notification, Background Modes(Remote notification) 두 가지를 등록할 거에요. ㅎㅎㅎ

Background Modes는 앱을 실행하지 않아도 푸쉬 알림을 받기 위해 설정하는 것입니다.

(왼쪽 위의 + Capability 를 눌러서 원하는 메뉴를 드래그해서 추가하면 됩니다.)

 

이제 프로젝트에서도 설정을 했고, FCM 설정과 APN으로부터 알림을 받기 위한 설정을 코드로 해줄게요.

AppDelegate.swift에서 코드를 작성할 것입니다.

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, error in
        if granted {
            print("알림 등록이 완료되었습니다.")
        }
    }
    application.registerForRemoteNotifications()
    return true
}

그리고 이제 Delegate로 등록을 해주면 이벤트를 처리할 메소드들을 구성해야겠죠..?!

이제 구성하는 메소드에서는 APN으로부터 받은 Device Token을 FCM으로 보내주는 작업을 할 것입니다.

 

지금은 FCM Token 값을 확인해서 직접 Firebase에 등록해서 테스트 메세지를 송신하지만, 실제 개발용 서버에서는 저희의 서버로 FCM Token을 보내고 서버에서는 이 토큰과 함께 Firebase로 푸쉬알림을 송신해야겠죠..?!

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

extension AppDelegate: MessagingDelegate {
    func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String?) {
        // 이 받은 값을 서버로 보내주어야함.
        print("FCM Token: \(fcmToken)")
    }
}

자 이제 정말 모든 설정이 완료되었습니다....☺️

 

Send your first message를 클릭해서 저희의 앱으로 푸쉬메세지를 송신해보겠습니다.

버튼을 누르게 되면 다음과 같은 화면을 볼 수 있습니다.

여기서 보내고 싶은 제목과 텍스트를 입력하고 전송을 하면 됩니다.

 

아.. 그 전에 하나 아까 AppDelegate.swift에서 Device Token을 발급받고 이를 바탕으로 FCM에서 fcmToken을 발급받는 메소드가 있었습니다.

여기서 fcmToken을 등록해서 테스트를 해주어야합니다.

 

저기 테스트 메세지 전송 버튼을 클릭해서 앱을 실행시켜서 fcmToken을 확인해보고 그 값을 입력해주면 됩니다.

이제 전송을 해볼까요...⁉️

 

아마 설치가되어 있는 Device로 푸쉬알림이 오는 것을 확인할 수 있을 것입니다.

지금은 간단한 테스트라 Firebase에서 테스트 메세지를 보내주었는데요.

 

만약, 개발용으로 정말 서비스에 쓰기 위해서는 fcmToken을 발급 받은 키를 실제 배포용 서버로 보내주고 그 서버에서 Firebase로 fcmToken을 저장해주는 역할이 필요하겠죠~~

 

 

오늘은 처음으로 Push Notification 설정에 대해 등록 절차를 공부해보고, 

실제로 적용해보면서 간단하게 실습해보았습니다.

 

도움이 됐으면 좋겠습니다 :)

반응형