티스토리 뷰

 C2DM이 Google Cloud Messaging(GCM)으로 변경되었습니다. 지난 28일 구글 I/O 발표 때 나왔던 내용입니다. 찾아 보니 26일부터 변경되었다고 하네요.


Google Cloud Messaging API

  http://bit.thdev.net/KN25Kc


아래 내용은 안드로이드 개발자 페이지의 GCM 문서를 가져온것입니다.

  http://bit.thdev.net/LKThQf


마이그레이션

 구글에서는 더이상 C2DM의 신규 서비스 및 활당량을 제공하지 않는다고 합니다. 그렇다고 기존에 사용하던 C2DM을 지금처럼 사용하지 못하는 것은 아니지만, GCM으로 변경하길 권장한다고 합니다. 장기적으로 C2DM의 사용량을 줄이기 위해서 권고사항으로 GCM을 사용하라고 합니다.


GCM의 장점

더 이상 서비스를 사용하기 C2DM 신청을 하지 않아도 됩니다.

제한되는 활당량이 사라졌습니다. 기존에는 문서를 통해서 신청을 해야 했고, 100개면 100개 500개면 500개 동시에 전송 해야 하는 푸쉬의 수를 신청해서 구글의 승인을 받아야 했지만 더이상 필요 없어지는거죠.

C2DM과 GCM의 통계 정보는 Android Developer Console에서 확인이 가능합니다.(개발자 등록이 되어있어야 합니다.)

    http://play.google.com/apps/publish

배터리 사용량이 줄어들었고, 더 많은 API도 제공한다고 합니다.


GCM과 C2DM의 차이점

Simple API Key

 GCM 서비스를 사용하려면 애플의 푸쉬와 동일하게 구글 안드로이드 콘솔 페이지에서 API키를 받아야 한다고 합니다. 개발자 등록이 되어 있어야 GCM을 테스트 할 수 있다는것 같네요. GCM은 Simple API Key를 제외하고 ClientLogin 또는 OAuth2로는 동작하지 않는다고 합니다.


Sender ID

 C2DM에서는 보내는 사람의 email 주소를 전송했지만 GCM에서 보내는 ID는 Android 콘솔에서 받은 project ID를 전송 하면 됩니다.


JSON format

 GCM은 HTTP 요청에 일반 텍스트 이외에 JSON 형식도 지원한다고 합니다. API는 아래 링크를 참고하세요.

   http://bit.thdev.net/Np4shz


Multicast messages

 GCM은 동시에 여러 단말기에 메시지를 전송 할 수 있는데 동일한 ID로 최대 1000개의 메시지를 전송 할 수 있습니다. 이 때 JSON 으로 전송 요청해야 한다고 합니다. API는 아래 링크를 참고하세요.

  http://bit.thdev.net/Np4shz


Multiple senders

 동일한 ID를 가진 동일한 응용프로그램에 메시지 전송을 할 수 있습니다. 지금과 동일한 서비스를 이야기 하는군요. API를 참고하세요.

http://bit.thdev.net/KWkkwL


Time-to live Messages

 실시간 비디오 채팅앱과 달력 앱은 만기일자를 함께 전송 할 수 있습니다. 0 and 4 weeks의 값을 전송 가능합니다. GCM 메시지에 0또는 4 Weeks의 값에 의해 저장이 되어 지는데 0의 값이 전송이 된다면 저장되지 않습니다.

 동영상이 있는 채팅 (Gtalk의 영상 통화 등), 만기 초대 이벤트가 있을 경우, 캘린더 이벤트가 있을 경우에 해당 API를 사용하면 됩니다.

원문 : Apps like video chat and calendar apps can send expiring invitation events with a time-to-live value between 0 and 4 weeks. GCM will store the messages until they expire. A message with a time-to-live value of 0 will not be stored on the GCM server, nor will it be throttled. For more information, see Advanced Topics.

  http://bit.thdev.net/P0bQYk


Messages with payload

 애플리케이션은 "messages with payload"를 사용하여 메시지를 전송하는데 최대 4Kb의 용량까지 가능합니다. 이걸 활용하여 영상 채팅 응용프로그램에 활용이 가능하다고 합니다. 이기능을 활용하기 위해서는 collapse_key를 넘겨주지 않으면 된다고 설명되어 있습니다. 무슨 기능인진..... GCM 최대 100개의 메시지를 저장하고 있는다고 합니다. 100개라는 숫자가 넘어가게 되면 GCM에 등록된 모든 메시지는 삭제가 되지만 특별한 메시지가 발생한다고 합니다. 무슨 메시지인진 설명이...

 그렇기에 응용프로그램에서 메시지를 받으면 서버와 동기화를 해야 합니다. 결국 기존에는 C2DM을 사용하기 위해서는 서버를 제작하는 곳에서 메시지 관리까지 같이 해줘야 했지만 100개까지의 메시지를 허용하기 때문에 GCM을 개발하는 개발자는 그 역할을 해줄 필요가 없다는 말 같네요. 해석이 잘못된건 지적부탁드립니다.^^; API 참고하세요.

  http://bit.thdev.net/LSCTn6


Canonical registration ID

 동일한 장치에서 2개의 동일한 ID가 전송되는 경우가 있을 수 있습니다. 이럴 경우 중복된 ID를 GCM에 보내지 않아도 된다는 말입니다. GCM 서버와 클라이언트 예제 링크입니다.

서버 libraries : http://developer.android.com/guide/google/gcm/server-javadoc/index.html

클라이언트 libraries : http://developer.android.com/guide/google/gcm/client-javadoc/index.html

API 참고

  http://developer.android.com/guide/google/gcm/adv.html#canonical


기존 C2DM에서 GCM으로 변경하기 위한 코드

클라이언트 코드 예제

Intent registrationIntent = new Intent("com.google.android.c2dm.intent.REGISTER");
// sets the app name in the intent
registrationIntent.putExtra("app", PendingIntent.getBroadcast(this, 0, new Intent(), 0));
registrationIntent.putExtra("sender", senderID);
startService(registrationIntent);

위의 예제 코드를 사용하면 GCM에서 응답을 받은 후 응용프로그램 서버로 전송하면 됩니다.


서버 코드 예제

 응용프로그램 서버가 GCM 등록 ID를 받으면 저장을 해둬야 합니다. 그리고 GCM 장치로 메시지를 전송하는 부분을 변경해야 합니다.

 새로운 endpoint로 전송해야 합니다. 주소는 : https://android.googleapis.com/gcm/send

 요청시 인증 헤더에 생성된 API 키를 포함해야 합니다.

 기존 Auth token을 대체합니다.

Content-Type:application/json
Authorization:key=AIzaSyB-1uEai2WiUapxCs2Q0GZYzPu7Udno5aA

{
  "registration_id" : "APA91bHun4MxP5egoKMwt2KZFBaFUH-1RYqx...",
  "data" : {
    "Team" : "Portugal",
    "Score" : "3",
    "Player" : "Varela",
  },
}


마무리

 구글 번역을 이용하고, 제가 아는 것과 합쳐서 번역을 해봤습니다. 오류가 있을태니 꼭 태클 걸어주시기 바랍니다.

 기존 C2DM과의 가장큰 차이점은 구글에서 메시지를 보관을 해주고, 관리를 해준다는 것입니다. Apple push에서는 그 기능을 제공하였기에 개발자 누구나 간단하게 푸쉬를 사용할 수 있습니다. 구글도 이제 그 기능을 추가하였기에 기존 C2DM을 사용하는 것보다 훨씬 싼 개발비가 들것으로 생각됩니다. 다음 리뷰에 GCM 을 적용하는 방법을 살펴보려고 합니다. 일단 문서부터 정리해봤습니다.

 그리고 구글 문서에는 json을 잘 활용하라고 합니다.





댓글