티스토리 뷰

안녕하세요 :]

Fury입니다 ㅎㅎ

 

오늘 다뤄볼 내용은 FCM입니다!

실제로 몇 번 구현을 해보면서 정리를 해야지 했는데

이제야 정리하게 되네요 ㅎㅎ

 

FCM을 사용하는 법을 알아보기 전에!

 

준비물 1.

"애플 개발자 계정"

 

FCM을 사용하기 위해서는 애플 개발자 계정이 필요합니다.

1년에 129,000원짜리

그 계정!!!

없으면 아쉽지만 뒤로가기를..ㅠㅠ

 

자, 이제 시작해 보겠습니다.

 

1. 프로젝트 생성, Firebase 연동

 

먼저, 파이어 베이스를 연동해주세요.

모르시는 분은 아래 글 참조!

 

https://developer-fury.tistory.com/10

 

[Swift] iOS 파이어베이스에 연동하기

iOS 파이어베이스에 연동하기 Record 작성일 2019. 06. 08 (토) Swift 버전 Swift 5 Xcode 버전 10.2.1 안녕하세요. Fury에요 :] 오늘은 "iOS 파이어베이스에 연동하기"를 해보도록 할게요. 1. 파이어베이스 프로..

developer-fury.tistory.com

 

pod 'Firebase/Messaging' 추가하고 설치해주세요!

 

 

2. AppDelegate.swift 코드 추가

 

다음으로 AppDelegate.swift 파일을 수정할게요.

AppDelegate의 didFinishLaunchingWithOptions 메서드부터 볼게요.

 

 

 

Messaging의 delegate와

UNUserNotificationCenter의 delegate를

선언해주세요.

 

그리고 인증 요청을 위한

UNAuthorizationOptions 타입의 options를 생성합니다.

옵션에는 여러 가지가 있는데

기본적으로 badge, sound, alert을 많이 사용해요.

(badge는 카톡에 숫자를 생각하시면 됩니다)

 

그리고

application.registerForRemoteNotifications() 메서드를 호출해

APNS 등록을 진행해주세요.

 

 

다음으로, didRegisterForRemoteNotificationsWithDeviceToken 메서드를 작성할게요.

 

 

remoteNotifications를 등록하면 해당 메서드가 호출이 되는데

그 매개변수로 deviceToken을 가지고 있어요.

 

실제로 deviceToken 값을 보고 싶다면

format을 바꿔서 보셔야 해요.

 

그리고 messaging의 apnsToken에 deviceToken을 넣어주세요.

 

자 이제

UNUserNotificationCenterDelegate를 구현해 볼게요.

 

 

먼저, willPresent를 살펴볼게요.

willPresent는 앱이 포그라운드에 있을 때 호출되는 메서드예요.

completionHandler로

UNNotificationPresentationOptions 타입을 반환하고 있네요.

 

 

다음으로는 didReceive입니다.

Notification의 응답에 대한 처리를 해줄 수 있는 메서드예요.

UNNotificationResponse 타입의 response를 매개변수로 받는데요.

UNNotificationResponse를 살펴볼게요.

 

 

아하..

actionIdentifier default로

1. 사용자가 노티피케이션을 종료하였을 때,

2. 사용자가 노티피케이션을 열었을 때(클릭했을 때)

 

위 두 가지 동작을 기본적으로 처리해줄 수 있겠네요!

 

자 다음 델리게이트~

MessagingDelegate를 구현해 볼게요.

 

 

먼저,

didReceiveRegistrationToken을 파람으로 가지는 Messaging 메서드입니다.


이 메서드는 토큰의 새로고침(갱신)을 모니터링합니다.

단 토큰이 새로 만들어지는 경우는 3가지이다.

 

1. 새 기기에서 앱 복원

2. 사용자가 앱 삭제/재설치

3. 사용자가 앱 데이터 소거

 

이제 코드 부분은 준비가 끝났습니다!!

 

3. 인증 키 생성 

 

애플 개발자 사이트로 이동할게요.

 

https://developer.apple.com/

 

Apple Developer

Submit your apps today. Build your apps using Xcode 11, test them on devices running the latest OS, and submit them to the App Store. Learn more

developer.apple.com

 

이곳에서

Certificates, Identifiers & Profiles로 이동하시고요.

Keys로 들어가셔서 추가하기 버튼을 눌러주세요.

 

 

Key Name 입력하시고요.

Apple Push Notifications service (APNs) 체크해주세요.

 

 

그리고 Continue -> Register 차례대로 눌러주세요.

그러면 Key를 다운로드할 수 있어요.

다운로드하시고요.

 

Key ID가 있습니다.

일단 어디 적어두세요~


(Key ID는 게시물 게시 후 Revoke 할 겁니다.

제 Key는 사용하실 수 없어요)

 

 

그리고 Done 버튼을 눌러주세요.

 

4. App ID 만들기

 

할거 참 많아요 ㅋㅋ

App ID 만들러 가볼게요.

Certificates, Identifiers & Profiles로 이동하시고요.

Identifiers 눌러주세요.

 

어라?

내 앱이 자동으로 추가되어 있네??

 

그렇다면 안의 내용만 수정할 거고요.

앱이 자동으로 추가되어 있지 않다면

수동으로 추가해 주겠습니다.

 

Description 작성해 주시고요.

explicit으로 체크한 곳에 Bundle ID도 작성해주세요.

 

"Push Notifications" 체크해주세요.

 

 

Continue -> Register 인가요?

위에 쭉 해주세요.

그리고 생성된 것 확인해주세요.

 

 

5. Capabilities 추가

 

자, 이제 정말 마지막입니다.

프로젝트로 돌아오셔서

"Signing & Capabilities"로 이동해주세요.

 

 

그리고 "+ Capability"를 눌러서

"Push Notifications""Background Modes"를 추가해주세요.

 

 

 

그러면 아래처럼 나타납니다.

Background Modes에서

"Remote notifications"를 필수로 체크해주세요.

 

 

6. Firebase Console 설정

 

어느덧 마지막 단계입니다!

 

 파이어 베이스 콘솔로 이동합니다.

 

"파이어 베이스 콘솔 -> 프로젝트 설정 -> 클라우드 메시징" 탭으로 이동하세요.

그러면 APN 인증 키를 업로드하는 화면이 있어요.

 

 

APN 인증서 말고!

APN 인증 키!!

아까 다운로드한 거 있죠??

그걸 업로드해주세요.

 

 

그리고 키 ID 아까 적어두라고 했죠?

아 근데 저도 깜빡하고 안 적어둠..ㅋㅋ

 

아까 키 만든 페이지 가면 키 ID 그대로 있어요.

적어주세요.

 

 

그리고, 팀 ID는

물음표에 마우스 가져가시면 링크 하나가 있어요.

클릭하시면 팀 ID 위치로 이동해요!

 

 

멤버십 디테일이 쫙 나올 텐데

Team ID도 있어요.

작성해주세요.

 

그리고 업로드 버튼 꾸욱!!

 

그럼 준비는 끝났습니다.

 

7. 테스트 FCM 전송하기

 

파이어 베이스 콘솔 왼쪽 하단에 보면

"Cloud Messaging" 보이시죠?

들어갑니다!

 

 

"새알림" 버튼 누르시고요.

알림 제목알림 텍스트를 입력해주세요.

그리고 다음 버튼!

 

 

 

내가 FCM을 보낼 Target 앱을 선택해주세요.

 

 

언제 보낼지도 설정해주세요.

반복적으로 보낼 수도 있고

예약을 할 수도 있습니다!

 

테스트를 위해서 "지금" 보내도록 할게요.

 

추가 옵션도 필요한 게 있다면

설정해주세요.

 

 

그리고 "검토" 버튼을 누르면??

 

 

짠~

메시지가 잘 오는 것을 확인할 수 있다!

 

저도 공부를 하면서 정리는 하는 중이에요~

혹시 잘못된 부분이 있으면 언제든지 말씀해주세요!

 

끝!!

 

댓글