BE/Web

[웹][FCM,GCM] Firebase 클라우드 메시징 HTTP 프로토콜

coding_jelly 2018. 11. 27. 13:11

Firebase 클라우드 메시징이란? 

서버에서 클라이언트 애플리케이션으로 메시지(알림)를 안정적으로 보낼 수 있는 교차 플랫폼 메시징 솔루션이다.

모든 사용자에게 알림을 전송할수도있고, 그룹을 지어 알림을 전송할 수 있다. 

 Firebase 클라우드 메시징 HTTP 프로토콜

Firebase 클라우드 메시징을 통해  서버에서 클라이언트 앱으로 메시지를 전달한다.

서비스 워커(service-worker)란?  자바스크립트로 실행되는 백그라운드 스크립트이다.

 

1)GCM(google cloud messaging) 과 FCM(firebase cloud messaging)

GCM (google cloud messaging) 

  • 구글에서 제공하는 서버에서 애플리케이션으로 푸시 메시지를 보낼 수 있는 서비스이다.
  • Android, IOS를 지원한다.
  • 전송 주소 : https://android.googleapis.com/gcm/send  

FCM (firebase cloud messaging) 

 

2) GCM 개요

FCM 새버전의 GCM이다.

 GCM 구현 방법

  • GCM 서버와의 통신에 필요한 추가 패키지 설치
  • GCM 서버에 대한 액세스 권한 구성
  • Google Play 서비스의 존재 여부를 확인하는 코드 구현
  • GCM 등록 토큰에 대한 협상하는 등록의도 서비스 구현
  • GCM 등록 토큰 업데이트를 수신하는 인스턴스 ID 수신기 서비스 구현
  • GCM 통해  서버에서 원격 메시지 수신하는 GCM 수신기 서비스 구현

3) FCM 개요

전송라우팅  서버 응용 프로그램  모바일 클라이언트  사이 메시지 큐를 처리하는 플랫폼이다.

 FCM 등록

  • 사용자는 FCM 사용하기 전에 등록해야한다.
  • 클라이언트  FCM 보낸사람 ID, API ID 전달하는 등록 토큰을 가져오기 위해 FCM ㅏ연결
  • FCM등록 토큰을 리턴 (클라이언트 앱에)
  • 클라이언트 앱은 서버에 등록 토큰을 전달

4) 다운 스트림 HTTP 메시지 구문 (JSON)

  서버 보내기 요청 작성

FCM 앱 서버 프로토콜을 사용하여 다음과 같은 타겟 유형으로 전송 가능

  • 주제이름
  • 조건
  • 기기등록 토큰
  • 기기그룹 이름

HTTP 통해 메시지를 보내려면 FCM v1 엔드포인트로 HTTP POST요청을 보낸  send 메소드를 지정한다.

▶ 특정 기기에 메시지 전송 

전송은 다음과 같이 한다.

POST https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send HTTP/1.1

요청 헤더에는 다음이 포함되어 있어야한다.

Content-type: application/json

Authorization: Bearer <valid Oauth 2.0 token for the service account of the Firebase project>

본문은 다음과 같다.

https://fcm.googleapis.com/fcm/send Content-Type:application/json Authorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA { "data": {     "score": "5x1",     "time": "15:10"   },   "to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1..." }

요청 본문에서 message객체의 token 키를 타겟팅할 특정  인스턴스의 등록 토큰으로 설정한다.

  

5) FCM 다운 스트림 메시징 과정

1) 앱 서버는 FCM 메시지 전달

2) 클라이언트 장치에서 FCM 사용이 불가한 경우큐에 메시지 저장

3) 클라이언트 장치 사용가능한 경우, FCM 클라이언트 앱에 메시지 전달

4) 클라이언트 앱은 FCM 메시지를 받고처리한  사용자에게 보여줌

 

6) 안드로이드에 PHP통해 메시지 전달하는 구문 

$this->fcm_send(json_encode(array("registration_ids" => $device_identifiers, "notification" => $data, "data" => $data, "priority" => "high")));

 

 

참조 : https://firebase.google.com/docs/cloud-messaging/send-message?hl=ko

 

앱 서버 전송 요청 작성  |  Firebase

Firebase Admin SDK 또는 FCM 앱 서버 프로토콜을 사용하여 메시지 요청을 작성하고 다음과 같은 유형의 대상으로 전송할 수 있습니다. 주제 이름 조건 기기 등록 토큰 기기 그룹 이름(기존 프로토콜 및 Node.js용 Firebase Admin SDK만 해당) 사전 정의된 필드로 구성된 알림 페이로드 또는 사용자가 직접 정의한 필드로 구성된 데이터 페이로드와 함께 메시지를 보내거나 2가지 유형의 페이로드를 모두 포함하는 메시지를 보낼 수 있습

firebase.google.com

여기까지 읽어주셔서 감사합니다. 

오늘도 좋은하루 되세요 :)