google-cloud-messaginggoogle-cloud-messaging 시작하기


비고

Google 클라우드 메시징 : 개요

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

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


건축 개요

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

건축 개요

이러한 구성 요소가 상호 작용하는 방식은 다음과 같습니다.

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

주요 개념

다음은 GCM과 관련된 주요 용어 및 개념을 요약 한 것입니다. 그것은 다음과 같은 범주로 나뉩니다 :

  • 구성 요소 - GCM에서 주요 역할을 수행하는 엔티티입니다.
  • 자격증 명 - 모든 당사자가 인증되었고 메시지가 올바른 위치로 전송되는지 확인하기 위해 GCM에 사용되는 ID와 토큰입니다.

GCM 구성 요소 및 자격 증명.

구성 요소

  • GCM 연결 서버 - 앱 서버와 클라이언트 앱간에 메시지를 보내는 데 관련된 Google 서버입니다.
  • 클라이언트 앱 - 앱 서버와 통신하는 GCM 지원 클라이언트 앱입니다.
  • App Server - GCM을 구현할 때 작성하는 앱 서버입니다. 앱 서버는 GCM 연결 서버를 통해 클라이언트 앱에 데이터를 전송합니다. 앱 서버가 XMPP 프로토콜을 구현하면 클라이언트 앱에서 업스트림으로 전송 된 메시지를 수신 할 수도 있습니다.

신임장

  • 보낸 사람 ID
    API 프로젝트를 구성 할 때 생성되는 고유 한 숫자 값입니다. 보낸 사람 ID는 등록 프로세스 에서 클라이언트 응용 프로그램에 메시지를 보낼 수있는 응용 프로그램 서버를 식별하는 데 사용됩니다.

  • 서버 키
    앱 서버에 저장되어 Google 서비스에 대한 액세스 권한이 부여 된 키입니다. HTTP에서 서버 키는 메시지를 보내는 POST 요청의 헤더에 포함됩니다. XMPP에서 서버 키는 SASL PLAIN 인증 요청에서 암호를 사용하여 연결을 인증합니다. 클라이언트 코드에 서버 키를 포함시키지 마십시오. API 프로젝트를 만들 때 서버 키를 얻습니다.

  • 응용 프로그램 ID
    메시지를 수신하도록 등록하는 클라이언트 앱입니다. 이것이 어떻게 구현되는지는 플랫폼에 따라 다릅니다.

    • Android : 앱 매니페스트의 패키지 이름을 사용합니다.
    • iOS : 앱의 번들 식별자를 사용합니다.
    • Chrome : Chrome 확장 프로그램 이름을 사용합니다.
  • 등록 토큰
    GCM 연결 서버가 클라이언트 앱에 발행하여 메시지를 수신 할 수있게하는 ID입니다. 등록 토큰은 비밀로 유지해야합니다.


라이프 사이클 흐름

  • GCM을 사용하려면 등록하십시오 . 클라이언트 응용 프로그램의 인스턴스가 메시지를 수신하도록 등록합니다. 자세한 내용은 클라이언트 응용 프로그램 등록을 참조하십시오.
  • 다운 스트림 메시지를 보내고받습니다 .
    • 메시지를 보내다. 앱 서버가 클라이언트 앱에 메시지를 보냅니다.
      1. 앱 서버가 GCM 연결 서버 로 메시지전송 합니다.
      2. GCM 연결 서버는 기기가 오프라인 상태 인 경우 메시지를 대기열에 넣고 저장합니다.
      3. 기기가 온라인 상태이면 GCM 연결 서버가 메시지를 기기로 전송합니다.
      4. 장치에서 클라이언트 응용 프로그램은 플랫폼 별 구현에 따라 메시지를받습니다. 자세한 내용은 플랫폼 별 설명서를 참조하십시오.
    • 메시지를받습니다. 클라이언트 앱이 GCM 연결 서버에서 메시지를받습니다. 해당 환경의 클라이언트 응용 프로그램이받은 메시지를 처리하는 방법에 대한 자세한 내용은 플랫폼 별 설명서를 참조하십시오.
  • 업스트림 메시지를 보내고받습니다 . 이 기능은 XMPP 연결 서버를 사용하는 경우에만 사용할 수 있습니다.
    • 메시지를 보내다. 클라이언트 앱은 앱 서버에 메시지를 보냅니다.
      1. 장치에서 클라이언트 응용 프로그램은 XMPP 연결 서버에 메시지를 보냅니다. 클라이언트 응용 프로그램이 XMPP를 통해 메시지를 보내는 방법에 대한 자세한 내용은 플랫폼 별 설명서를 참조하십시오.
      2. XMPP 연결 서버는 서버 연결이 끊어지면 메시지를 대기열에 포함하고 저장합니다.
      3. 응용 프로그램 서버가 다시 연결되면 XMPP 연결 서버가 메시지를 응용 프로그램 서버로 보냅니다.
    • 메시지를받습니다. 응용 프로그램 서버는 XMPP 연결 서버에서 메시지를 수신 한 다음 다음을 수행합니다.
      1. 클라이언트 응용 프로그램 보낸 사람 정보를 확인하기 위해 메시지 머리글을 구문 분석합니다.
      2. XMPP 연결 서버에 "ack"를 보내 메시지 수신을 확인합니다.
      3. 선택적으로 클라이언트 응용 프로그램에서 정의한대로 메시지 페이로드를 구문 분석합니다.

공식 문서 참조는 여기 에서 찾을 수 있습니다 .

Android에서 다운 스트림 메시지 처리

GCM 서버에서 보낸 알림을 catch하는 onMessageReceived 를 구현합니다.

  @Override
  public void onMessageReceived(String from, Bundle data) {
     String message = data.getString("message");
     Log.d(TAG, "From: " + from);
     Log.d(TAG, "Message: " + message);
     // Handle received message here.
  }
 

iOS에서 다운 스트림 메시지 처리

알림을 받으려면 application:didReceiveRemoteNotification:fetchCompletionHandler: (또는 iOS <8.0)의 경우 application:didReceiveRemoteNotification: 을 구현하고 GCMService:appDidReceiveMessage:message 에 대한 메시지 수신을 확인하는 GCMService:appDidReceiveMessage:message 를 호출합니다.

- (void)application:(UIApplication *)application
    didReceiveRemoteNotification:(NSDictionary *)userInfo {
  NSLog(@"Notification received: %@", userInfo);
  // This works only if the app started the GCM service
  [[GCMService sharedInstance] appDidReceiveMessage:userInfo];
  // Handle the received message
  // ...
}

- (void)application:(UIApplication *)application
    didReceiveRemoteNotification:(NSDictionary *)userInfo
    fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))handler {
  NSLog(@"Notification received: %@", userInfo);
  // This works only if the app started the GCM service
  [[GCMService sharedInstance] appDidReceiveMessage:userInfo];
  // Handle the received message
  // Invoke the completion handler passing the appropriate UIBackgroundFetchResult value
  // ...
}
 

클라우드에서 다운 스트림 메시지 보내기

GCM HTTP 연결 서버 프로토콜을 사용하여 메시지 보내기 :

  https://gcm-http.googleapis.com/gcm/send
  Content-Type:application/json
  Authorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA
  {
    "to": "/topics/foo-bar",
    "data": {
      "message": "This is a GCM Topic Message!",
     }
  }
 

우편 배달부 에서이 작업을 수행하려면 다음을 설정해야합니다 ( 일부 세부 사항은 위에서 언급 한 내용과 동일합니다 ).

  1. 요청 유형을 POST 설정하십시오.
  2. 머리글 에서 다음을 설정하십시오.
    • Content-Type = application / json
    • 인증 = <귀하의 GCM 서버 키>
  3. Body에 페이로드 매개 변수를 설정합니다 ( 이 예제에서는 raw 옵션을 사용했습니다. 스크린 샷 (2) 참조 ).
  4. https://gcm-http.googleapis.com/gcm/send로 요청을 보내주십시오.

스크린 샷 :

(1) 여기에 이미지 설명을 입력하십시오.

(2) 여기에 이미지 설명을 입력하십시오.

요청이 응답의 message_id 와 함께 성공한 것입니다.

추신 : 나는 아직 프로젝트를 만들지 않았더라도 다른 사람들이 그것을 시험해 볼 수 있도록 샘플 서버 키를 보여주고있다. 하지만 서버 키는 항상 비밀로 유지해야합니다.