노블의 개발이야기

[Android] Google Cloud Messaging (GCM): Overview 본문

Android

[Android] Google Cloud Messaging (GCM): Overview

더플러스 2018. 4. 2. 21:16

Google Cloud Messasing (GCM) 은 개발자가 서버와 클라이언트 앱 간에 메시지를 보낼 수 있는 무료 서비스입니다. 서버에서 클라이언트 응용프로그램까지의 다운스트림 메시지와 클라이언트 응용프로그램에서 서버로의 업스트림 메시지가 포함됩니다.

예를 들어, 경량 다운스트림 메시지는 클라이언트 응용프로그램에 "새 전자 메일" 알림의 경우 처럼 서버에서 새 데이터가 있음을 알릴 수 있습니다. 인스턴스 메시징과 같은 사용 사례의 경우 GCM 메시지는 최대 4KB의 페이로드를 클라이언트 앱에 전송할 수 있습니다.

Architectural Overview

GCM 구현에는 Google 연결 서버, HTTP 또는 XMPP 프로토콜을 통해 연결 서버와 상호 작용하는 사용자 환경의 앱 서버 및 클라이언트 앱이 포함됩니다.


  • Google GCM Connection Servers는 앱 서버의 다운 스트림 메시지를 수락하고 클라이언트 앱으로 전송합니다. XMPP 연결 서버는 클라이언트 응용 프로그램의 업스트림으로 보낸 메시지를 받아 들여 응용프로그램 서버로 전달할 수도 있습니다.
  • App Server에서 HTTP 및/또는 XMPP 프로토콜을 구현하여 GCM 연결 서버와 통신합니다. 앱 서버는 다운 스트림 메시지를 GCM 연결 서버로 보냅니다. 연결 서버는 메시지를 대기열에 넣고 저장 한 다음 클라이언트 응용프로그램으로 보냅니다. XMPP를 구현하면 앱 서버는 클라이언트 응용프로그램에서 보낸 메시지를 받을 수 있습니다.
  • 클라리언트 앱은 GCM을 지원하는 클라이언트 앱입니다. GCM 메시지를 보내고 받으려면 앱이 GCM에 등록하고 등록 토큰이라는 고유 식별자를 가져야합니다.

주요 개념

이 표에는 GCM과 관련된 주요 용어 및 개념이 요약되어 있습니다.

  • Components - GCM에서 주요 역할을 수행하는 엔티티.
  • Credentials - 모든 당사자가 인증되었고 메시지가 올바른 위치로 전송되는지 확인하기 위해 GCM에 사용되는 ID와 토큰.
Components
GCM
Connection
Servers
앱 서버와 클라이언트 앱 간에 메시지를 보내는 데 관련된 Google 서버
Client App 서버 앱과 통신하는 GCM 지원 클라리언트 앱입니다.
App Server GCM 구현의 일부로 작성하는 앱 서버입니다.
앱 서버는 GCM connection Server를 통해 클라이언트 앱에 데이터를 전송합니다.
앱 서버가 XMPP 프로토콜을 구현하면 클라이언트 앱에서 업스트림으로 전송된 메시지를 수신할 수도 있습니다.
Credentials
Sender ID API 프로젝트를 설정할 때 생성되는 고유한 숫자 값입니다.
Sender ID는 등록 프로세스에서 클라이언트 앱에 메시지를 보내는 것이 허용된 앱 서버를 식별하는데 사용됩니다.
Server Key Google 서비스에 대한 액세스 권한이 부여된 앱 서버에 저장된 키입니다.
HTTP에서 서버 키는 메시지를 보내는 POST 요청의 헤더에 포함됩니다.
XMPP에서 서버 키는 SASL PLAIN 인증 요청에서 암호를 사용하여 연결을 인증합니다.
클라이언트 코드에 서버 키를 포함하면 안됩니다.
Application ID 메시지를 수신하도록 등록하는 클라이언트 앱입니다.
- Android: 앱 매니페스트의 패키지 이름을 사용합니다.
- iOS: 앱의 번들 식별자(bundle identifier)를 사용합니다.
- Chrome: 확장 프로그램 이름을 사용합니다.
Registration Token GCM 연결 서버가 클라이언트 앱에 발행하여 메시지를 수신할 수 있게 하는 ID입니다.
등록 토큰은 비밀로 유지해야합니다.

Lifecycle Flow

1. GCM을 사용하기 위해 등록합니다.

  • 클라이언트 응용프로그램의 인스턴스가 메시지를 수신하도록 등록합니다.

2. 다운 스트림 메시지를 보내고 받습니다.

메시지를 보냅니다.

  • 앱 서버는 클라이언트 앱에 메시지를 보냅니다.
    1. 앱 서버는 GCM 연결 서버로 메시지를 보냅니다.
    2. GCM 연결 서버는 기기가 오프라인 상태인 경우 메시지를 대기열에 넣고 저장합니다.
    3. 기기가 온라인 상태이면 GCM 연결 서버가 메시지를 기기로 전송합니다.
    4. 장치에서 클라이언트 앱은 플랫폼 별 구현에 따라 메시지를 받습니다.

메시지를 받습니다.

  • 클라이언트 앱이 GCM 연결 서버에서 메시지를 받습니다.

3. 업 스트림 메시지를 보내고 받습니다.

이 기능은 XMPP 연결 서버를 사용하는 경우에만 사용할 수 있습니다.

메시지를 보냅니다.

  • 클라이언트 앱은 앱 서버로 메시지를 보앱니다.
    1. 장치에서 클라이언트 응용프로그램은 XMPP 연결 서버에 메시지를 보냅니다.
    2. XMPP 연결 서버는 서버 연결이 끊어지면 메시지를 대기열에 포함하고 저장합니다.
    3. 앱 서버가 다시 연결되면 XMPP 연결 서버가 메시지를 앱 서버로 보냅니다.

메시지를 받습니다.

  • 앱 서버는 XMPP 연결 서버에서 메시지를 수신한 다음 다음을 수행합니다.
    1. 클라이언트 앱 sender 정보를 확인하기 위해 메시지 헤더 구문을 분석합니다.
    2. XMPP 연결 서버에 "ack"를 보내 메시지 수신을 확인합니다.
    3. 선택적으로 클라이언트 앱에서 정의한대로 메시지 페이로드 구문을 분석합니다.


Comments