2013년 7월 11일 목요일

GCM의 주요 개발자 기능


About GCM

용어 정의


  • GCM
    • Google Cloud Messaging for Android

GCM Overview

Google Cloud Messaging for Android(GCM)는(은) 개발자가 서버에서 Android Device에 있는
Android Application으로 Data를 전송하거나, 사용자의 Device에서 Cloud로 Upstream Message를 전송할 수 있도록 돕는 무료 서비스 이다.

Key Developer Features

Send data from your server to users' Android-powered devices

Send-to-Sync Message

e-mail이나 매번 Update되는 마지막 점수를 Sync하는 Application 처럼 Sync를 위한 Message가 수신될 때
이들은 서로 연관된 종류의 Message끼리 묶여 Collapse되어 관리된다.
그로인해 새로운 메일을 동시에 여러 개 받거나 점수가 연속적으로 Update되었을 때
마지막에 최종적으로 수신된 Message로 인한 Noti.가 발생한다는 것이다.

이는 임의로 발급된 "collepse_key"라는 Parameter를 사용해 관리되며,
Device가 꺼져있다든가하는 등의 경우 Message Collepsing을 위한 Group을 구성하는데 사용된다.

GCM은 최대 4개의 서로 다른 collepse_key를 사용할 수 있도록 허용한다.
즉 동시에 4개의 서로 다른 Send-to-Sync Message만 허용한다는 뜻이며,
4개를 초과할 경우 GCM은 어떤 메세지가 될지 보장할 수 없지만 딱 4개만 유지한다는 것이다.

Send message with payload

Send-to_Sync와 달리 매 "message with payload"(non-collapsible message) 마다 전달되며
Message의 최대 크기는 4KB이다.
아래 예는 경기관중들이 어떤 스포츠 경기에 대해 대화 중인 IM Application에서 사용하는
JSON-formatted 메세지이다.


{
  "registration_id" : "APA91bHun4MxP5egoKMwt2KZFBaFUH-1RYqx...",
  "data" : {
    "Nick" : "Mario",
    "Text" : "great match!",
    "Room" : "PortugalVSDenmark",
  },
}

이 "message with payload"는 Mobile Application이 Server의 상태를 알기위해 접속하는 단순한 "ping"이 아니다.

앞서 소개한 IM Application의 경우, 매번 보내는 대화 내용이 다르기 때문에 모든 Message가 전달되어야 할 것이다.
non-collapsible message를 명시할 때는 그냥 "collapse_key"를 생략하면된다.
그러면 GCM은 매번 Message를 개별적으로 전달할 것이다.(단, 전달 순서는 보장할 수 없다.)

GCM는 100개의 non-collapsible message를 저장할 수 있어 이 후 전달되는 모든 Message는 버려지게 된다.
그래서 100개 이후 몇 개의 Message가 버려졌는지를 Client에게 보내게 되며,
다음을 포함하는 정규 com.google.android.c2dm.intent.RECEIVE intent를 통해 전달된다.

  • message_type
    • String Type의 "deleted_message"라는 값만 갖는다.
  • total_deleted
    • String Type의 삭제된 Message의 수
따라서 Application은 Server와의 Syncing을 통해 삭제된 Message에 대한 대응을 해야한다.

Which should I use?



non-collapsible message가 요구되지 않는다면, Performance 관점에서
Device의 베터리 부담을 적게 주는 collapsible message를 사용하는 쪽이 좀더 효과적이다.