FCM을 이용해 안드로이드 앱으로 메시지 전송 (3) (http://zeany.net/28) 까지 FCM 클라우드 메시지를 수신할 수 있는 앱을 만들고 그 앱으로 FCM console의 Notifications 메뉴를 통해 FCM 클라우드 메시지를 보내봤습니다.
하지만, 그 글에서 봤듯이 notification없이 data 부분만 보낸다거나, 또는 notification에 icon을 지정한다거나 하는 FCM 메시지를 마음대로 만들어서 보낼 수 없는 제약 사항이 있습니다.
또 상황마다 대상이나 메시지가 달라야 하는 경우가 실제 상황에서는 다반사이기 때문에 일반적으로는 메시지를 보내는 서버를 구현해야 합니다.
https://firebase.google.com/docs/cloud-messaging/server?hl=ko 에 보면 클라우드 메시지를 보낼 수 있는 프로토콜은 HTTP와 XMPP 2가지 방식이 있고, 앱에서 업스트림 메시지를 보내려면 XMPP 방식으로만 해야한다는 이야기가 나와 있습니다.
앱에서 메시지를 보내는 것에는 아직 관심이 없으니 여기에서는 우선 HTTP 프로토콜로 메시지 보내는 것에 대해서 살펴 보겠습니다.
또 HTTP 메시지를 보낼 때 동일한 내용을 JSON을 통해서 보낼 수도 있고 일반 텍스트로도 보낼 수 있다고 하는데 여기서는 지난 글에서도 계속 다뤄왔듯이 JSON으로 보내는 것만 살펴 보겠습니다.
1. FCM 클라우드 메시지의 흐름
HTTP를 통해 FCM 클라우드 메시지가 처리되는 과정을 그림으로 그려보면 다음과 같습니다.
1) FCM 홈페이지에서 앱 서버라고 부르는 개발할 서버에서는 단순히 HTTP Post Request 메시지를 요청하게 되고
2) 이것을 구글의 FCM 연결 서버에서 보고 메시지가 이상 유무에 따라 적절한 응답을 하게 됩니다. (비동기 통신)
3) 이후 구글 FCM 연결 서버에서 여러가지(우선 순위, 앱과의 통신 가능 여부 등등)를 고려하여 실제 클라우드 메시지를 기기로 보내게 됩니다.
4) 기기에서는 받은 메시지를 적당히 처리하고 응답 메시지를 보내게 됩니다.
한마디로 요약하면 제대로된 메시지만 만들어 주면 그것을 실제 기기로 전달하는 것은 구글에서 해주겠다.. 정도일 것 같습니다.
2. HTTP 메시지의 구조
구글 FCM 연결 서버로 전송해야 할 HTTP 메시지를 살펴 보도록 하겠습니다.
1) HTTP URL
https://fcm.googleapis.com/fcm/send 가 구글 FCM의 연결 서버이고 이곳으로 요청을 보내면 됩니다.
2) HTTP Method
POST 방식으로 명확히 결정되어 있습니다.
3) HTTP Headers
Header의 Authorization을 통해 FCM에 등록된 프로젝트인지 인증을 하게 됩니다.
이 때 필요한 서버 키를 보는 방법은 FCM console에서 해당 프로젝트의 설정을 클릭한 후 두번째 탭인 클라우드 메시징을 누르면 됩니다.
※ 이 서버 키가 외부로 노출되지 않도록 반드시 주의하세요.
그 외에 Content-type을 설정해야 하는데 여기서는 JSON만 한다고 했으니 application/json 으로 보내면 됩니다.
즉, Header 2줄은 다음과 같습니다.
"Authorization: key='해당 프로젝트의 서버 키'"
"Content-Type: application/json"
4) HTTP Body
여기는 FCM 클라우드 메시지의 형식에 맞는 JSON을 보내면 됩니다.
그에 대한 설명은 FCM 메시지 정보 (https://firebase.google.com/docs/cloud-messaging/concept-options?hl=ko) 에 잘 나와 있으니 참조 바랍니다.
여기서는 이전 글에서 전송했던 메시지를 그대로 보내도록 하겠으니 필요한 부분이 있으면 수정하면 됩니다.
1 2 3 4 5 6 7 8 9 10 11 12 | { "to" : "dzs3phj...", "priority" : "high", "notification" : { "body" : "Background Message", "title" : "BG Title" }, "data" : { "title" : "FG Title", "message" : "Foreground Message" } } |
이 항목들을 정리해서 표로 나타내 보면 다음과 같습니다.
이렇게 해서 어떤 메시지를 보내야 하는지는 확인했으니 다음 글에서 어떻게 보낼 것인지를 살펴보도록 하겠습니다.
'Android' 카테고리의 다른 글
Postman을 이용한 FCM 클라우드 메시지 전송 (2) | 2017.01.13 |
---|---|
cURL을 이용한 FCM 클라우드 메시지 전송 (2) | 2017.01.12 |
FCM을 이용해 안드로이드 앱으로 메시지 전송 (2) (3) | 2017.01.10 |
FCM을 이용해 안드로이드 앱으로 메시지 전송 (1) (1) | 2017.01.10 |
안드로이드 앱에 Firebase 추가하기 (5) | 2017.01.09 |