푸시(push) 정복(feat. FCM, APNS, TOKEN..)

2023. 1. 10. 17:57iOS/iOS

728x90
반응형

FCM 푸시 구현을 회고하면서 푸시 구현 원리에 대해 이해하기 위해 포스팅한 내용입니다.

내용은 추후 보완될 수 있습니다.

 

 

 

 


push이해에 도움되는 사전지식

push notification이란?

아래 캡쳐와 같은 알림

Device token 이란?

푸시가 전송되는 앱의 주소이며, 애플에서 정한 고유한 식별자를 포함시킨 NSData 형태임. APNs만 해독 가능

 

APNS란?

Apple Push Notification service의 약자로 APN이라고도 부르며, 앱에 notification을 보낼 수 있도록 만든 애플 서비스이다.

 

 

식별ID(identification) = 토큰 = 키 = 키값

 

 

애플의 푸시서비스 종류 세가지

1. 로컬에서 개발자가 직접 보내는 푸시

2. FCM(firebase cloud messaging)

3. 서버에서 보내는 APNS(Apple Push Notification service) 푸시

- 로컬 notification이 아닌, remote notification의 경우 무조건 이 APNS를 거치는데 그 이유는 내가 보내려는 notification을 APNS가 사용자 기기로 전달하는 역할을 하기 때문이다.

 

 

 


푸시 알람을 위한 필수 동작 세가지

1) 앱이 apns에게 device token(푸시가 전송되는 앱의 주소)을 요청함

2) apns가 app에게 device token을 알려줌

3) app이 푸시 서버(provider)에게 device token을 보내줌

 

 

APNS 푸시 발생 동작 방식

1) 푸시 서버(provider)는 푸시를 보내고 싶을때, apns에게 device token과 메세지 데이터를 보냄

(이때 APNS와 푸시서버는 TLS통신을 하고, push server에 인증서가 준비되어 있어야함)

2) APNs는 해당 device token으로 데이터를 보냄

3) 내 device에 푸시 알람이 뜬다

 

1. FCM 동작원리

1) 모바일에 앱이 설치되는 순간 Firebase 서버에 토큰 획득을 위한 요청을 보내고, 모바일앱이 토큰을 획득한다

2) 획득한 토큰을 서버로 전송하여 서버 db에 저장한다. (이 토큰은 서버가 Firebase 서버에 메시지 전송을 요청할때 어디로 보내는지 구분하기 위한 용도로 사용)

3) 서버는 전달받은 토큰을 db에 저장하여 타겟 모바일의 identification으로 사용

 

2. Firebase서버에서 메시지데이터를 스마트폰에 전달하는 절차

1) 서버에서 메세지데이터를 타겟 모바일에 전달하기 위해 DB에서 키를 획득

2) 서버에서 DB 토큰과 메세지 데이터를 HTTP 통신을 통해 Firebase 서버로 전달

3) Firebase 서버에서는 전달받은 키값을 확인해 어떤 모바일, 어떤 앱인지를 식별

4) 식별된 모바일의 식별된 앱을 실행하여 앱 단말기에 푸시 전송

- 타겟 모바일의 앱은 백그라운드에 있는 상태에서도 리스너로 이벤트를 감지함

 

1번과 2번을 합친 FCM 흐름도

*식별된 모바일의 실행된 앱을 -> 식별된 모바일의 식별된 앱을

 


부연 지식

  • 서버에서 어떤 데이터를 앱에 전달하려면 네트워크 연결은 필수이다. 앱은 서버에서 데이터가 언제 송신될지 모르기 때문에 서비스 컴포넌트로 네트워크에 항상 연결되어 있어야 하며, 백그라운드 제약때문에 앱이 포그라운드 상황이 아니라면 서버와 연결을 지속할 수 없다. 하지만 클라우드 메시징은 서버의 데이터를 앱에 직접 전달하지 않고 FCM 서버를 거쳐서 앱에 전달하는 방식이기 때문에 클라우드 메시징을 이용하면 서버와 앱이 네트워크 연결을 지속해서 유지하지 않아도 되며 앱이 포그라운드 상황이 아니라고 해도 데이터를 받을 수 있다.
  • 사용자에게 push notification을 보내주는 Push server가 존재하며 이 push server는 우리 app에 알림을 보내서 사용자에게 메시지를 보여주는것임
  • apple 기기로 알림을 보내려면 APNS는 필수이며 FCM과 같이 사용하는 경우 Apple develop에서 key를 등록하고 APN인증키를 받아서 FCM 설정에 넣어줘야합니다.
  • APNS와 FCM은 서버로 토큰값을 보내서 서버측에서 해당 사용자의 토큰을 관리함.
  • FCM을 이용중이라면 이 토큰값은 구글로 보내고, 구글에서 반환하는 키를 기준으로 AOS, IOS 동시에 푸시를 보냄.
  • 애플의 APNS서버에서는 푸시 발송을 위해 인증서와 팀아이디, 앱아이디, 번들아이디의 정보를 가지고 해당 단말을 타겟으로 푸시를 보내는 역할을 함(최근 HTTP/2 이슈로 이전에 사용하던 서버 IP를 더이상 지원하지 않는다고 함.

 

로컬푸시와 APNS의 가장 큰 차이점: 토큰 필요의 유무

  로컬푸시 APNS FCM
토큰유무 필요 X 필요 O 필요 O
인증서 필요 X 필요 O 필요 O
Capability(Push Notifications) 설정 필요 X 필요 O 필요 O

 

 

p8인증키와 p12인증서의 차이

  p12(private key) - 과거 p8(public key) - 최신
갱신필요 1년마다 갱신필요 영구적(유효기간X)
사용 범위 앱마다 고유한 CSR 발급 필요 한개의 키로 여러앱에 등록 가능

 

p12 -> 인증서

p8 -> 인증키

 

 

포스팅 작성에 큰 도움을 주신 블로거분들

1. https://tttap.tistory.com/156

2. https://babbab2.tistory.com/57 

3. https://woongsios.tistory.com/51

4. https://zeddios.tistory.com/1373

5. https://sweetdev.tistory.com/476

6. https://maruzzing.github.io/study/etc/FCM(Firebase-Cloud-Messaging)%EC%9D%B4%EB%9E%80/ 

7. https://codinghero.tistory.com/50 

8. https://pgnt.tistory.com/117

728x90
반응형