[컴][안드로이드] firebase cloud message 사용하기 - server side






server key

Firebase Cloud Message(FCM) 에 project 를 등록하고 나서, 설정으로 가면 server key 를 확인할 수 있다.






App server 의 역할

Role of the App Server 에서 app server 가 아래 조건을 만족해야 한다고 한다.

  1. client 와 통신할 수 있어야 한다.
  2. 알맞은 형식으로 된 request 들을 FCM connection server 로 보낼 수 있어야 한다.
  3. request 를 처리하고 재전송할 때 exponential back-off 를 사용해야 한다.(한번 실패 하면 제곱씩 latency 를 주는 것으로 이해하면 됨.)
  4. Server key 와 client registration token 들을 안전하게 저장해야 할 수 있어야 한다. 주의 : 절대 client code 에 server key 를 넣지 마라
  5. XMPP에선, 서버는 서버가 보내는 message 를 구별하기 위해서, 고유한 message ID 들을 만들 수 있어야 한다.(FCM HTTP 연결 서버는 message ID 들을 생성하고 response 에 그것들을 return 한다.)XMPP message ID들은 sender ID 내에서 유일하면 된다.



FCM connection server protocol

FCM connection server protocol(FCM 과 연결할 때 사용하는 protocol) 에는 아래 2가지가 있다.

  • XMPP: 
    • upstream/downstream 이 된다.(최대 4kb data)
    • Asynchronouse : 비동기다. App server 가 메시지를 모든 기기에서 보내고, 받을 때 지속적인 XMPP connection들 (persistent XMPP connections)을 이용한다. 이 XMPP connection server 는 비동기적으로 ACK 를 보내거나 failure noti 를 보낸다.(json 이 XMPP message 형태로 encoded 된 형태) 
    • 여러 registration token 에게 Multicast downstream send : 지원안함
  • HTTP: 
    • downstream 만 된다.(최대 4kb data)
    • Synchronous : App server 는 client 에서 HTTP Post request 를 보내고 response 를 기다릴 때 message 를 보낸다.  이 과정이 synchronous 하게 이뤄진다. 그래서 한쪽에 보내는 작업이 끝나야 다른 곳에 보낼 수 있다.
    • 여러 registration token 에게 Multicast downstream send : JSON format 으로 지원함



구현


connection server

아래 그림에서 빨간색 박스 안에 있는 부분이 connection server 이다. 이 녀석을 google 에서 제공하는 것이고, 우리는 app server 를 만들어서 이 connection server 에 message 를 보내면, 이 connection server 가 client 에 push 를 날려주는 것이다.



구현은, 자신의 app server 에서 FCM connection server 와 protocol 만 잘 맞춰 주면 된다.






여러기 기기로 message 보내기

FCM 은 다음 2가지 방법을 제공한다.

  1. Topic messaging
  2. Device group messaging



device group 에 메시지 보내기[ref. 3]

이것은 한 user 가 여러개의 기기를 사용하는 경우 사용될 수 있다. 그러니까, 예를 들면, 구글 뮤직 같은 것을 보면 같은 계정으로 여러기기에 설치가 된다. 이 경우에 구글 뮤직에서 어떤 noti 를 줄 때 여러기기에 전부 같은 noti 를 줘야 할 것이다. 이런 경우에 이 device group messaging 이 사용될 수 있겠다.

제한은 iOS 는 2KB 이고, 안드로이드는 4KB 이다.

그룹은 notification_key 라는 것을  공유하게 되고, 이것을 이용해서 FCM 이 message 를 group 내에 있는 모든 device 에 보내게 된다.

이녀석을 만드려면, FCM 에 아래 처럼 보내면 RCM 이 notification key 를 return 해준다.

https://android.googleapis.com/gcm/notification
Content-Type:application/json
Authorization:key=API_KEY
project_id:SENDER_ID

{
   "operation": "create",
   "notification_key_name": "appUser-Chris",
   "registration_ids": ["4", "8", "15", "16", "23", "42"]
}


{
   "notification_key": "APA91bGHXQBB...9QgnYOEURwm0I3lmyqzk2TXQ"
}  


자세한 사항은 ref. 3 를 참고하자.




Reference

  1. About Firebase Cloud Messaging Server  |  Firebase
  2. Send Messages to Multiple Devices  |  Firebase
  3. Device Group Messaging on Android  |  Firebase



댓글 없음:

댓글 쓰기