본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[Android/안드로이드] GCM (Google Cloud Messaging service ) Framework 에 대해 알아본다.

by 돼지왕 왕돼지 2012. 7. 4.
반응형

 http://developer.android.com/guide/google/gcm/gcm.html 


GCM ( Google Cloud Messaging service ) 넌 뭐하는 녀석이냐?

- 3rd-party server 가 app.에 메세지를 보낼 수 있다.

- GCM 은 메세지의 전송과 메세지의 전송 순서를 보장하지 않는다.

- Android App 이 가동중이지 않아도 된다. msg 가 수신되면 알아서 broadcast 와 service 를 통해서 자동으로 wake up 시킨다. ( 물론 message 처리내용이 시간이 걸린다면, app 이 WakeLock 을 걸어주어야 한다. )

- GCM 은 UI 없이 단순히 raw msg 전달의 목적만을 갖는다.

- Android 2.2 이상의 단말이 필요하며, Google Play Store 가 install 되어 있어야 한다. ( emulator 사용시 Google API 가 함께 있어야 한다. )

- Android 3.0 이하의 버전에서는 Google account 가 단말에 set up 되어 있어야 하며, Android 4.0.4 이상에서는 필요가 없다.





 
 

GCM Architectural Overview

Components ( 구성요소 )

1. Android 단말

 - Android 2.2 이상 단말

 - Google Play Store 설치완료

 - Google account 에 log in. ( Android 4.0.4 이상에서는 log in 필요없음. )

 - Emulator 를 사용할 경우 Google API 포함된 Android 2.2 버전 이상


2. 3rd party app server

 - Google GCM server 를 통해서 android app 에 메세지 전송하는 기능


3. GCM server

 - google GCM server



Credentials ( 통신 및 인증을 위한 필요 key, id 등 )

1. SenderID

 - Google API Console 에 있는 project ID.


2. Application ID

 - manifest 의 package name 으로, GCM 에서 targeting 할 app 을 구분하는 용도로 쓰임.


3. Registration ID

 - GCM server 가 android app 에 assign 한 ID 로, 한번 단말이 ID 를 받으면, 이것을 3rd party app server 에 등록시켜야 한다. Registration ID 와 Application ID 를 통해서 특정 단말의 특정 앱을 구분한다. 


4. Google User Account


5. Sender Auth Token

 - Google Service 에 접속할 수 있는 API keyPOST header에 들어있어야 함.






Lifecycle Flow

1. Enabling GCM : App이 GCM 서버와 3rd-party server 에 ID 등록.

2. Sending a message : 3rd-party server 가 message 전송 through GCM Server

3. Receving a message : GCM 서버로부터 message 수신.

Enabling GCM

1. Messaging service 사용을 위해 GCM server 에 intent 를 날려야 한다. 이 intent 는 com.google.android.c2dm.intent.REGISTER extra 에 senderID 와 Android App ID 를 전달해야한다. 보통 이 작업은 앱의 onCreate 에서 한다.


2. 만약 등록이 성공적으로 이루어진다면, GCM server에서 com.google.android.c2dm.intent.REGISTERATION intent 를 registration ID 와 함께 전달한다. 앱은 이 아이디를 나중에 사용하기 위해 저장해야 한다. ( 이미 등록되었다면, 다시 등록하는 과정을 생략해도 되니깐. ) Google 이 주기적으로 registration ID 를 refresh 할 수 있기 때문에, com.google.android.c2dm.intent.REGISTRATION 이 여러번 불릴 수 있다는 사실을 기억해야 한다.


3. 등록완료를 위해서는 이 registration ID 를 3rd-party server 에 등록해야 한다. 이 registration ID 는 명시적으로 unregister 하기 전까지는 유효하다. 혹은 Google 이 registration ID 를 refresh 하기 전까지는..

( 앱이 uninstall 될때, 자동으로 GCM 을 unregister 하는 작업이 이루어지지 않으며, GCM server 가 message 를 보냈을 때 단말이 해당 app이 uninstall 되었다는 feedback 을 받아야 uninstall 되었고, unregister 해도 된다는 것을 알게 된다. NotRegistered error 를 받을 경우에 server 측에서 server 쪽에 등록된 ID를 unregister 를 해주어야 한다. )


[참고사항]

 







Sending a message

3rd party server 가 단말에 message 를 보내기 위해서는 android app 이 registration ID 를 부여받았어야 하며, 이 ID 를 서버도 알고 있어야 한다. 또한 Server 에서 GCM server 접속을 위해 API key 가 있어야 한다.


1. 3rd party server 가 GCM server 에 message 를 보낸다.

2. 단말이 offline 일 경우를 대비해 message 를 queue 에 넣고 저장해 놓는다.

3. 단말이 online 이라면 GCM server 가 단말에 메세지를 보낸다.

4. 단말에서 system 이 target app 에 permission 과 함께 message 를 보낸다. Android app 은 이 메세지를 받아 wake up 된다.

5. app 이 해당 message 를 처리한다. 이 때 만약 여러가지 작업을 한다면, PowerManager.WakeLock 을 통해 파워를 살리는 작업이 필요하다.



Receiving a Message

1. system 이 incoming message 를 받으면, key/value pair 를 추출해낸다.

2. system이 target app 에게 com.google.android.c2dm.intent.RECEIVE Intent 에 key/value pair 를 넣어서 전달한다.

3. app 에서 저 intent 를 받아서 data 를 처리한다.





[Android/안드로이드] GCM 앱 개발하기 ( Google Cloud Message service app developement )

[Android/안드로이드] GCM 서버 개발하기 ( Google Cloud Messaging service server development ) 

[Android/안드로이드] GCM ( Google Cloud Messaging Service ) 에 대해 알아본다.



도움이 되셨다면 손가락 꾸욱~








반응형

댓글