본문 바로가기
Android

[Android GCM] 0. GCM

by GGoris 2015. 7. 11.
반응형

[Android GCM] 0. GCM


이번 글에서는 간단한 용어들과


GCM의 동작 방식을 제가 아는 대로 적어볼까합니다.


아는 대로라는게...

문서 보고 이해하고 거의 옮겨 적은 것 같네요..ㅋㅋ


https://developers.google.com/cloud-messaging/

여기서 GCM의 모든 내용을 확인하실 수 있을 겁니다.

GCM을 처음 접한 분들 이라면

이 다음 글들을 쉽게 이해 하기위해

문서를 읽어보시면 되겠습니다.






GCM은 App Server와 Application 간의 메시지 전달을 위한

Google에서 제공해주는 서비스를 말합니다.

처음에는 C2DM (Cloud to Device Message(?))로 시작을 했고

이후 GCM이라는 이름으로 변경되었습니다.



1. 용어


GCM Connection Server

앱서버와 어플리케이션간의 메시지 전송을 도와주는 구글 서버입니다.


Client App

Gcm을 이용할 수 있도록 권한 설정과 앱 서버와의 통신코드 등이 되어있는 어플리케이션을 말합니다.
서버가 특정 디바이스에게 메시지를 전송 할 수 있도록 하기위해

앱서버가 자신의 Registration Token저장 할 수 있도록 Token값을 보내주어야합니다.


App Server

클라이언트의 Registration Token값을 알고 있어야 하며,

이는 어플리케이션으로 부터 전달 받아야합니다.

Registration Token을 이용해 GCM Connection Server에게

메시지 전송 요청을 합니다.


Sender ID

개발자 콘솔에서 생성된 프로젝트의 Project Number를 의미합니다.

Client App은 이것을 이용해 GCM Connection Server로부터

Registration Token을 받아 올 수 있습니다.


Sender Auth Token

개발자 콘솔에서 생성된 프로젝트에서 발급 받을 수 있는 API Key입니다.

API Key는 App Server에서 GCM Connection Server로 메시지 전송을 요청할 때

헤더에 추가해 주어야 합니다.


Application ID

Manifest에 보이는 패키지 이름을 사용합니다.

올바른 앱으로 메시지를 보낼 수 있도록 하기위한 값입니다.


Registration Token

GCM connection Server로부터 발급 받는 키 값입니다.

App Server는 이 값을 이용해 GCM Connection Server에게 

해당 토큰 값을 가진 디바이스로 메시지 전송을 요청하게 됩니다.



문서에서 보면 DownStream, UpStream이라는 말이 나오는데

DownStream은 App Server ->Client로의 메시지 전송을 의미하고

UpStream은 Client->App Server로의 메시지 전송을 의미합니다.



2. 동작


Downstream messaging

1. 앱서버는 GCM Connection Server로 메시지 전송을 요청합니다.

2. 만약 (client app이 설치된)Device가 offline상태라면

GCM Connection Server는 해당 요청을

대기열에 포함 시키고 메시지를 저장합니다.

3. (client app이 설치된)Device가 online상태가 되었을 때,

GCM Connection Server는 해당 Device에게 메시지를 보냅니다.

4. Client App은 구현된 방식에 따라서 메시지를 수신 하게 됩니다.

(수신을 하면 noti를 보여준다거나, 특정 행동을 하도록)


Upstream messaging

* upstream은 XMPP로만 가능한 기능입니다.

Client App에서 송신

1. Client App은 XMPP Connection Server로 메시지 전송을 요청합니다.

2. XMPP Connection Server와 App Server와의 연결이 끊어져있다면,

해당 요청을 대기열에 넣고 메시지를 저장합니다.

3. AppServer와 다시연결된 XMPP Connection Server는

AppServer로 해당 메시지를 보냅니다.


App Server에서 수신

1. Client App이 보낸 메시지의 헤더를 피싱합니다.

2. 메시지를 수신한 App Server는 XMPP Connection서버로 'ack'를 보냅니다.

3. 추가로 들어온 data와 같은 payload를 파싱합니다.





위의 내용들은 문서에 보여지는 것들로

간단하게 메시지의 동작을 보여줍니다.


아래의 그림을 통해 전체적인 흐름을 보도록 하겠습니다.


잘 안보이신다면 클릭해주세



1. Client App은 GCM Connection Server에게

Regist요청을 합니다.


2. 요청을 받은 GCM Connection Server는

Client App에게 Registration Token을 발급해 줍니다.


3. Client App은 발급 받은 Token을

App Server에게 보내줍니다.


4. Client App으로부터 전달받은 Token을 DB로 저장해 둡니다.


5. 서버측에서 메시지 송신이 필요한 상황 발생시

특정 사용자의 Registration ID를 읽어와


6. GCM Connection Server로 메시지 전송을 요청합니다.


7. 요청을 받은 GCM Connection Server는 

해당 Registration Token을 갖는 디바이스에게 메시지를 전달 합니다.


8. 메시지를 받은 Client App은 그에 맞는 처리를 해줍니다.



여기서 2번과 7번을 제외한 모든부분을 직접 작성 해주셔야합니다.





여기까지 GCM에 관한 간단한 정보들이었습니다.



---------------------------------


[Android GCM] 0. GCM


[Android GCM] 1. 준비


[Android GCM] 2. GCM 안드로이드 앱!


[Android GCM] 3. C언어로 GCM 메시지를 보내자!





참고 내용


http, xmpp의 내용 구성을 위한 레퍼런스

https://developers.google.com/cloud-messaging/server-ref


제가 읽어본 안드로이드 관련 부분 링크입니다.

도입부

https://developers.google.com/cloud-messaging/android/start

App Server설명

https://developers.google.com/cloud-messaging/server

App Server에서의 http

https://developers.google.com/cloud-messaging/http

Client App에서의 등록에 관한 기본설명

https://developers.google.com/cloud-messaging/registration

안드로이드 Client App에서 해주어야 할 일

https://developers.google.com/cloud-messaging/android/client



반응형

댓글