본문 바로가기

의역과 오역/Dev

GCM 서버 구현하기 (Implementing GCM Server)


 GCM의 서버사이드는 2개의 컴포넌트로 구성되어있습니다 :


- Google이 제공하는 GCM Connection 서버는 3rd 파티 애플리케이션 서버로부터 메시지를 가져오고 이것을 기기에서 동작 중인 GCM이 사용가능한 안드로이드 애플리케이션으로 보냅니다. 그 예로 Google은 connection 서버를 HTTP와 CSS(XMPP)를 제공합니다. 

- 3rd 파티 애플리케이션 서버는 당신이 구현해해야만 합니다. 이 애플리케이션 서버는 당신이 선택한 GCM Connection 서버를 통해 GCM이 사용가능한 안드로이드 애플리케이션에 데이터를 보냅니다.


 다음은 3rd 파티 앱을 구현하기 위해 따라야할 기본 단계들입니다.


- 사용하고자하는 GCM connection 서버(들)를 결정합니다. 클라이언트 애플리케이션에서 upstream메시징을 사용하려고 한다면 CCS를 사용해야만 합니다. 이에 관해 좀 더 상세한 논의를 보고 싶다면 Choosing GCM Connection 서버를 살펴보십시오. 

- 앱 서버를 어떻게 구현할지를 결정하여야 합니다. 예를 들어 :

  - HTTP connection 서버를 사용할 지를 결정했다면, GCM 서버 helper 라이브러리와 앱 서버 구현을 돕기 위한 데모 앱을 사용할 수 있습니다. 

  - Google AppEngine은 CCS로의 연결을 지원하지 않습니다. 


 완전한 GCM 구현은 클라이언트 구현과 서버 구현을 모두 필요로 합니다. 클라이언트 사이드 구현에 관한 더 많은 정보를 얻고 싶다면, Implementing GCM Client를 참조하세요. 



 GCM Connection 서버 선택하기


 현재 GCM은 두가지 connection  서버를 제공합니다 : HTTP 와 CCS(XMPP). 당신은 이것을 분리해서 사용할 수도 있고, 동시에 사용할 수도 있습니다. CCS 메시징은 GCM HTTP 메시징과 다음과 같은 부분에서 차이가 있습니다. 


- Upstream / Downstream 메시지 

   - GCM HTTP : Downstream만 가능합니다. cloud-to-device

   - CCS : Upstream과 Downstream 모두 가능합니다. (device-to-cloud, cloud-to-device)


- 비동기 메시징 

   - GCM HTTP : 3rd 파티 앱 서버는 HTTP POST  요청을 통해 메시지를 보내고 응답을 기다립니다. 이 메카니즘은 동기적이며 전송자가 다른 메시지를 보내기 전에 블락을 유발합니다. 

   - CCS : 3rd 파티 앱 서버는 지속적인 XMPP 연결을 통해서 Google infrastructure에 연결을 하고, full line speed로 모든 기기들로부터 메시지를 받거나 / 모든 기기들에 메시지를 보내게 됩니다. CCS는 승인 또는 실패 알림을 (특별한 ACK와 NACK JSON 인코딩된 XMPP 메시지의 형식으로) 비동기적으로 보냅니다. 


- JSON

   - GCM HTTP : JSON 메시지들은 HTTP POST로 보내딥니다.

   - CCS : JSON 메시지는 XMPP 메시지로 캡슐화되서 보내집니다. 



 3rd 파티 애플리케이션 서버의 역할


 GCM 기능을 사용하는 클라이언트 안드로이드 애플리케이션을 작성하기 전에, 다음을 만족하는 애플리케이션 서버가 준비되어 있어야 합니다.

- 클라이언트와 커뮤니케이션이 가능해야한다. 

- GCM 서버로 적절한 포멧의 request를 날릴 수 있어야한다. 

- 필요에 따라 exponential back-off.를 사용해서 request를 조작하고, 이를 재전송 할 수 있어야한다. 

- API key와 클라이언트 registration ID를 저장할 수 있어야한다. API key는 메시지를 보내는 POST 요청의 header에 포함되어있다.

- 각 메시지를 보낼 때 이들을 유니크하게 구분할 수 있는 메시지 id를 생성할 수 있어야 한다. 메시지 ID들은 senderID 별로 유니크해야한다.



메시지 보내기 


 다음은 3rd 파티 애플리케이션 서버에서 메시지를 보낼 때 일반적으로 발생하는 이벤트들의 순서입니다.


1. 애플리케이션 서버가 GCM 서버들로 메시지를 보냅니다. 

2. Google은 메시지를 큐에 추가하고, 기기가 오프라인일 때에는 이를 저장해놓습니다.

3. 기기가 온라인일 때, Google은 메시지를 기기로 보냅니다. 

4. 기기 상에서 시스템은 적절한 퍼미션을 가지고 있는 Intent broadcast를 통해서 해당 안드로이드 애플리케이션에 메시지를 보냅니다. 이것은 안드로이드 애플리케이션을 wake up 시킵니다. 안드로이드 애플리케이션은 메시지를 받기 위해 미리 실행되어야할 필요는 없습니다.

5. 안드로이드 애플리케이션이 메시지를 처리합니다.


아래 섹션은 메시지를 보낼 때 기본적인 요구사항에 대해 설명하고 있습니다.


Target


필수입니다. 앱 서버가 GCM의 형태로 메시지를 보낼 때 target이 명시되어야 합니다.


HTTP는 반드시 target을 다음 중 하나로 명시해야 합니다. 

- registration_ids : 1 또는 그 이상의 기기들(1000개 까지)에 대해 사용됩니다. 복수의 registration ID들로 메시지를 보낼 때, 이를 multicast 메시지라고 부릅니다. 

- notification_key : 한 명의 유저가 소유하고 있는 복수의 기기들에 대해 사용됩니다. 


CCS(XMPP) :

- 반드시 target을 "to" 필드에 명시해야 합니다. "to" 필드는 하나의 registration ID 또는 notification key를 포함하고 있어야합니다. CCS는 multicast 메시징을 지원하지 않습니다. 


Payload

 부가적입니다. 메시지에 payload를 포함시키려고 한다면, data 파리미터를 payload 안에 포함해야합니다. 이것은 HTTP와 CCS를 모두 지원합니다. 


Message parameters

 아래의 표는 3rd 파티앱 서버가 connection 서버로 보내는 JSON 메시지 안에 포함해야 하는 파라미터들을 열거하고 있습니다. "Where Supported" 열을 보면 특정 파라미터를 지원하는 connection 서버가 어느 것인지 알 수 있습니다.