안드로이드2011.03.30 10:58
원문 : http://code.google.com/intl/ko-KR/android/c2dm/

Android Cloud to Device Messaging Framework

Android Cloud to Device Messaging (C2DM) 은 개발자가 서버를 이용하여 안드로이드 디바이스들에게 메시지를 전달할 수 있도록 도와주는 서비스이다. 업데이트된 어플리케이션 설치나 사용자 데이터를 서버로부터 직접적으로 연결하여 가져갈 수 있도록 간단하고 가벼운 메카니즘을 제공한다. C2DM 서비스는 메시지 저장과 대상 단말에게 메시지 전달하는 모든 면을 처리한다.  

Note : C2DM은 궁극적으로 모든 개발자들이 사용 가능하다. 하지만 현재는 테스트 단계이며 모든 상황에서 가능하지 않다. 만약 당신의 안드로이드 어플리케이션에 C2DM을 사용하길 원한다면, 가입자 페이지에서 접근을 요청해라. 요청이 승인되면 Google이 당신에게 연락할 것이다.


  Contents


  Introduction
  Architectural Overview
    Lifecycle Flow
    What Does the User See?
  Writing Android Applications that use C2DM
    Creating the Manifest 
    Registering for C2DM
    Unregistering from C2DM
    Handling Registration Results
    Handling Received Data
    Developing and Testing Your Applications
  Role of the Third-Party Application Server
    How the Application Server Sends Messages
  Examples
  Limitations

  Introduction


다음은 C2DM 의 주요 특징 들이다.
  • Third-party 어플리케이션 서버가 경량의 데이터를 안드로이드 어플리케이션에게 전달할 수 있도록 한다. 메시지 서비스는 많은 양의 데이터를 전달하도록 설계되지 않았다. 대신 간단한 데이터를 안드로이드 어플리케이션에게 전달해서 서버에서 가져갈 데이터가 있다는 것을 알려주는 정도로 사용될 수 있다.
  • C2DM은 메시지의 전달이나 전달 순서를 보장하지 않는다. 그래서 개발자들은 이 기능을 실제 데이터를 전달하기 보다는 새로운 데이터가 있다는 것을 알리는 용도로 사용해야 한다. 
  • 안드로이드의 어플리케이션은 메시지를 수신하기 위해 동작하고 있을 필요가 없다. 어플리케이션이 적절한 브로드캐스트 리시버와 퍼미션을 가지고 있다면, 안드로이드 시스템은 메시지가 도착하면 Intent를 이용하여 해당 어플리케이션을 동작 시킬 것이다.
  • C2DM은 수신된 메시지 데이터를 처리할 사용자 인터페이스나 처리 방법을 제공하지 않는다. 단지 수신된 메시지를 어플리케이션에게 곧바로 전달 한다. 그래서 어플리케이션은 메시지를 받은 뒤 노티피케이션을 노출시키거나 사용자 인터페이스를 표시하거나 아니면 그냥 조용히 데이터를 처리하고 종료할 수 있다.
  • 안드로이드 2.2 이상의 디바이스에서 동작한다. 또한 마켓 어플리케이션이 설치되어 있어야 한다. 하지만 안드로이드 마켓을 통해 어플리케이션을 배포해야만 하는 것은 아니다.
  • C2DM은 기존의 구글 서비스 컨넥션을 사용한다. 따라서 단말기에 사용자의 로그인 가능한 구글 계정이 등록되어 있어야 한다.

  Architectural Overview


이 섹션에서는 C2DM 이 어떻게 동작하는지 살펴본다.

 아래 표는 C2DM과 연관된 주요 용어와 컨셉을 요약한다. 아래 카테고리로 구분된다.
  • Components - C2DM에서 동작하는 물리적 항목들
  • Credentials - 인증된 메시지가 올바른 단말로 전달되도록 보장하는 각 단계에 사용되는 ID와 토큰들. 

Components
Mobile Device C2DM을 사용하는 안드로이드 어플리케이션이 동작하는 단말기. 안드로이드 버젼 2.2 이상에 안드로이드 마켓 어플리케이션이 설치되고 적어도 하나의 구글 계정이 로그인 되어 있어야 한다. 
Third-Party Application Server 개발자가 어플리케이션에 C2DM을 구현하기 위해 설치해야하는 어플리케이션 서버. C2DM 서버를 통해서 사용자에게 메시지를 전달한다.  
C2DM Servers 3rd-party 어플리케이션 서버로 부터 메시지를 전달 받아, 안드로이드 단말기들에게 메시지를 전달하는 구글 서버. 
Credentials
Sender ID 어플리케이션 개발자의 이메일 주소. Sender ID는 디바이스로 메시지를 보내도록 허락된 안드로이드 어플리케이션을 구분하기 위해 등록절차에서 사용된 ID 이다. 보통 이 ID는 개인용 계정을 사용하는 것 보다는 특정한 역할을 위한 계정을 사용한다. 예를 들면 my-app@gmail.com 같은.
Application ID 메시지를 수신하기위해 등록하는 어플리케이션.  어플리케이션 구분은 manifest 의 패키지 이름으로 구분된다. 이것은 정확한 어플리케이션에 메시지가 전달 되는것을 보장한다.
Registration ID C2DM 서버가 메시지 수신이 허락된 안드로이드 어플리케이션에게  발급하는 ID. 일단 어플리케이션이 등록 ID를 받으면, 3rd-party 어플리케이션 서버에게 전송한다. 어플리케이션 서버는 각각의 디바이스를 구분하는데 ID를 사용한다. 하나의 Registration ID는 특정 디바이스에서 동작하는 특정 어플리케이션과 연결되어 있다.
Google User Account C2DM이 동작하기 위해선 적어도 하나의 로그인된 구글 계정이 필요하다. 
Sender Auth Token 3rd-party 어플리케이션 서버에 저장되는 ClientLogin 인증 토큰. 이것이 있어야 어플리케이션 서버가 구글 서버에 접근할 수 있다. 메시지 전송 요청의 POST 헤더에 포함된다. ClientLogin 인증 토큰에 대한 더 많은 논의는 ClientLogin for Installed Applications 를 참고.

 

Lifecycle Flow

Cloud-to-device 메시징을 사용하기 위한 우선 작업: 

  • C2DM 활성화. 모바일 디바이스에서 동작하는 안드로이드 어플리케이션이 메시지를 받기위해 등록함. 
  • 메시지 보내기. 3rd-party 어플리케이션 서버가 디바이스에게 메시지를 보냄.
  • 메시지 수신. C2DM 서버로부터 안드로이드 어플리케이션이 메세지를 수신함.
위 프로세스들이 아래에 설명되어 있다.

 

C2DM 활성화
아래는 메시지를 수신하기 위해 모바일 디바이스의 안드로이드 어플리케이션이 등록시점에 일어나는 이벤트 순서이다:
  1. 어플리케이션이 메시지 서비스를 사용하기 위해 우선 C2DM 서버에 등록 Intent 를 전송한다. 
    이 등록 Intent (com.google.android.c2dm.intent.REGISTER) 는 sender ID (보통, 어플리케이션 개발자가 메시지 전송을 위해서 등록한 이메일 계정) 와 어플리케이션 ID를 포함한다.
  2. 등록이 성공하면, C2DM 서버는 REGISTRATION 인텐트를 이용해서 어플리케이션에게 등록 ID를 전달 한다. 
    어플리케이션은 이 ID를 이후에 사용하기 위해 저장해 두어야 한다. 구글이 주기적으로 등록 ID를 갱신할 수 있다는 점에 주의하라. 따라서 어플리케이션 디자인시 REGISTRATION 인텐트가 여러번 호출될 수 있다는 점을 반영해라. 어플리케이션이 그에 맞춰 응답할 필요가 있다.
  3. 등록절차를 완료하기 위해서, 어플리케이션은 등록 ID를 어플리케이션 서버에 등록한다. 어플리케이션 서버는 이 등록 ID를 데이타베이스에 저장한다. 
이 등록 ID는 어플리케이션이 명백히 등록해제를 하거나, 구글이 등록 ID를 갱신할 때 까지 유지되어야 한다. 


Sending a Message
어플리케이션 서버가 메시지를 보내기 위해서 다음 절차가 수행되어야 한다 :
  • 어플리케이션이 특정 디바이스에 전달되는 메시지를 수신할 수 있도록 등록 ID를 가져야 한다. 
  • 3rd-party 어플리케이션 서버가 등록 ID를 저장하고 있어야 한다. 
어플리케이션 서버가 메시지를 전송하기 위해서 한가지 더 필요한 것이 있다 : ClientLogin authorization token
어플리케이션을 위해서 개발자가 미리 어플리케이션 서버의 설정을 해야 한다. (Role of the 3rd-party Application Server  참고) 

ClientLogin 토큰은 특정 안드로이드 어플리케이션에게 메시지를 전송하는 어플리케이션 서버를 인증한다. 하나의 어플리케이션 서버는 하나의 ClientLogin 토큰을 가진다. 이 ClientLogin 토큰은 특정 앱의 여러개 등록 ID에 대응한다. 각각의 등록 ID는 메시징 서비스를 사용하도록 등록된 각각의 디바이스를 대표한다.  

어플리케이션 서버가 메시지를 전송할 때에는 다음과 같은 순서를 따른다 :
  1. 어플리케이션 서버가 메시지를 C2DM 서버에게 전달한다.
  2. 만약 디바이스가 활성화되어 있지 않다면 구글 서버는 메시지를 큐에 저장한다.
  3. 디바이스가 온라인이 되면 구글서버가 메시지를 디바이스에게 전달한다.
  4. 디바이스 시스템은 적절한 퍼미션을 포함한 인텐트 브로드 캐스트를 통해 메시지를 브로드캐스팅 해서, 메시지를 수신하도록 설정된 어플리케이션이 메시지를 수신하도록 한다. 이 인텐트는 어플리케이션을 실행시킨다. 어플리케이션은 메시지를 수신하기 위해 상단에 실행되고 있을 필요는 없다.
  5. 어플리케이션이 메시지를 처리한다. 만약 어플리케이션이 중요한 프로세스를 처리하는 중이라면, wake lock 를 발생시킨뒤 서비스 형태로 다른 작업을 처리할 수 있다.
어플리케이션은 더이상 메시지를 수신하고 싶지 않을때 C2DM 등록을 해제 할 수 있다.


Receiving a Message
안드로이드 단말에서 동작하는 어플리케이션이 메시지를 받으면 아래 순서로 동작한다 :
  1. 시스템이 메시지를 수신하면 페이로드에 담겨 있는 키/밸류 쌍을 추출한다. 
  2. 시스템은 com.google.android.c2dm.intent.RECEIVE 인텐트를 포함하는 안드로이드 어플리케이션에게 키/밸류 쌍을 extra로 전달한다.
  3. 안드로이드 어플리케이션은 RECEIVE 인텐트로부터 키값을 이용하여 데이터를 추출하고 처리한다.

What Does the User See?
사용자가 C2DM을 사용하는 어플리케이션을 설치하려 하면, 안드로이드 마켓은 어플리케이션이 C2DM을 포함하고 있다는 퍼미션 정보를 노출한다. 사용자는 어플리케이션을 설치하려면 이 기능을 승인해야 한다. 어플리케이션을 구현하는 방법에 따라, 사용자에게 메시지 수신을 해제할 수 있는 기능을 옵션으로 제공할 수 있다. 어플리케이션을 삭제하면 메시지 수신을 해제하는 것과 동일한 효과를 갖는다.


  Writing Android Applications that Use C2DM


C2DM을 사용하는 어플리케이션을 개발하려면, Role of the 3rd-party Application Server 에 기술된 기능을 수행하는 어플리케이션 서버가 필요하다. 이 섹션에서는 C2DM을 사용하는 어플리케이션을 개발하는 단계를 설명한다.

C2DM 프레임워크와 관련해서 제공되는 사용자 인터페이스가 없다는 것을 기억해라. 어플리케이션에서 메시지를 처리하는 방법은 모두 개발자에게 달려있다.

클라이언트 어플리케이션을 개발하는 두가지 기본 단계 :
  • C2DM 을 사용하기 위한 퍼미션을 매니페스트에 생성한다.
  • 자바코드를 개발한다. C2DM을 사용하기 위해 다음 두가지가 반드시 포함되어야 한다.
    • 등록 서비스를 시작하거나 멈출 수 있는 코드.
    • com.google.android.c2dm.intent.C2D_MESSAGE 와 
      com.google.android.c2dm.intent.REGISTRATION 의 리시버.

Creating the Manifest
모든 안드로이드 어플리케이션은 AndroidManifest.xml을 갖고있다. 메니페스트 파일은 어플리케이션의 필수 정보들을 안드로이드 시스템에 제공한다. C2DM 기능을 사용하려면, 아래 항목이 메니페스트에 포함되어야 한다 : 
  • 어플리케이션 등록 및 메시지 수신을 위한 퍼미션 com.google.android.c2dm.permission.RECEIVE .
  • android.permission.INTERNET 써드파티 서버에게 수신자 키를 보내기 위한 퍼미션.
  • applicationPackage + ".permission.C2D_MESSAGE 다른 어플리케이션이 메시지를 등록하거나 수신하는 것을 방지하기 위한 퍼미션.
  • 메시지 수신을 위한 com.google.android.c2dm.intent.RECEIVE 퍼미션과,  applicationPackage 이름으로 카테고리가 설정된 com.google.android.c2dm.intent.REGISTRATION 퍼미션
    수신자도 com.google.android.c2dm.SEND 퍼미션이 필요하다. C2DM 프레임워크가 메시지를 전송할 수 있다. 메시지 등록과 수신모두 Intents 에 구현되어 있다. 
  • 메 C2DM기능이 어플리케이션 기능에 필수적인 기능이라면 메니페스트에 android:minSdkVersion="8" 를 반드시 설정하라. 이것은 어플리케이션이 제대로 동작하지 않는 환경에 설치되는 것을 막아준다. 







Posted by Dr.Kein

댓글을 달아 주세요