본문 바로가기

Android

[버섯] GCM 관련 기초 자료 5 - 간단한 테스트 프로그램(서버측)


안녕하세요 버섯돌이 유재성입니다.


당분간은 제 계정 정보로도 테스트가 가능하겠지만 반드시 자신의 정보에 맞는 값으로 설정하시기 바랍니다.


지금까지 여러 과정을 거쳐서 간단하게나마 Server & Client를 구축하였으며,

웹 페이지에서 메시지를 전송해서 스마트폰이 정상적으로 메시지를 수신하는 과정을 확인하였습니다.

하지만, 제공되는 Demo의 경우 단순히 GCM으로부터 메시지를 수신했다는 아래와 같은 내용만 출력됩니다.


"From GCM: you got message!"


이는 클라이언트(모바일 앱)쪽 소스에서 어떤 메시지를 수신하든 무조건 위 처럼 출력하도록 설정되어 있어서 그렇습니다.

GCM을 좀 더 제대로 이해하려면 송신한 내용이 폰에서 제대로 출력되는지도 확인해야 겠지요?


기존 웹 서버 소스를 수정해도 되지만 제 경우 서드파티 서버를 개발해야 하기때문에

간단히 GCM으로 메시지를 송신하는 샘플을 만들도록 하겠습니다.


그리고, 해당 내용을 클라이언트(안드로이드 앱)에서 출력하기 위해 Demo를 아주 조금 수정해 보도록 하겠습니다.


이클립스에 등록하고 Build하는 세부 절차와 이미지등을 넣으면 좋겠지만

중요한 부분도 아닌데다 제가 여유 시간이 없다보니 급하신 분들을 위해 일단 현 상태로만 일부 공개 합니다.

나중에 여건이되면 세부적인 내용은 보충하도록 하겠습니다.


1. 이클립스에 간단히 Java Project를 하나 생성 합니다.

    제 경우 프로젝트 명을 "GCMServerSendExample"로 했습니다.


2. 테스트를 위한 Class를 하나 생성합니다.

    제 경우에는 test 패키지 밑으로해서 SimpleTest로 만들었습니다.


[SimpleTest.java]

package test;
import java.io.IOException;

import com.google.android.gcm.server.Constants;
import com.google.android.gcm.server.Message;
import com.google.android.gcm.server.Result;
import com.google.android.gcm.server.Sender;

public class SimpleTest {

 static String myApiKey = "자신의 API키를 입력하세요.";
 static String regId = "테스트로 전송 받을 폰의 등록ID를 입력하세요.";

 /**
  @param args
  */
 public static void main(String[] args) {
  Sender sender = new Sender(myApiKey);
//  Message message = new Message.Builder(regId).build();
//  Result result = sender.send(message, 5);

        String registrationId = regId;
//        Message message = new Message.Builder().build();
        Message message = new Message.Builder()
        .collapseKey("collapseKey"+System.currentTimeMillis())
        .timeToLive(3)
        .delayWhileIdle(true)
        .addData("message""이곳에 전달할 메시지를 작성하면 됨.")
        .build();

        Result result;
  try {
   result = sender.send(message, registrationId, 5);

   System.out.println("======= Send ======");

   if (result.getMessageId() != null) {
    String canonicalRegId = result.getCanonicalRegistrationId();
    System.out.println("canonicalRegId : " + canonicalRegId);
    if (canonicalRegId != null) {
     // same device has more than on registration ID: update database
     System.out.println("same device has more than on registration ID: update database");
    }
   } else {
    String error = result.getErrorCodeName();
    System.out.println("[ERROR]"+error);
    if (error.equals(Constants.ERROR_NOT_REGISTERED)) {
     // application has been removed from device - unregister
     // database
    }
   }
  } catch (IOException e) {
   e.printStackTrace();
  }

  System.out.println("======= END ======");
 }
}


GCM 튜토리얼의 기본 제공되는 소스를 아주 조금 수정했습니다.


참고로, regId에 입력 할 등록ID라는건 스마트 폰에서 클라이언트 앱을 실행하면

GCM 서비스에 폰을 등록하면서 발급받은 ID를 서버 샘플쪽에도 전송하도록 되어 있습니다.

Server를 실행 한 경우 콘솔 화면에 출력되는데 해당 값을 의미 합니다.


이 값은 폰 마다 유일한 값이기때문에 테스트 할 폰의 값을 입력하시면 됩니다.

(예를들면, 제 폰의 경우 APA91bGVltt...QCjg 형태의 163글자 입니다.)


위 소스에서 살펴볼 부분은 아래와 같은 메시지 부분입니다.

.addData("message""이곳에 전달할 메시지를 작성하면 됨.")


일단, 저는 "message"라는 필드에 원하는 내용을 전달하도록 하였습니다.

따라서, 모바일 클라이언트 앱에서도 해당 필드의 값을 출력하도록 수정하시면 됩니다.



[Build]

위 소스를 컴파일 하기 위해서는 최소한 gcm-server.jar파일과 json 라이브러리(예:json_simple-1.1.jar)가 필요합니다.

해당 파일을 이클립스 프로젝트에 복사후 build path에 추가 하시기 바랍니다.

제 경우에는 lib폴더를 만들어서 해당 폴더에 복사 후 build path를 설정했습니다.



1.gcm-server.jar 구하기

GCM 라이브러리에서 제공되는 소스를 빌드해서 gcm-server.jar 을 생성해서 프로젝트에 추가 하셔야 합니다.

해당 소스는 android-sdks\extras\google\gcm\gcm-server에 존재하며,

gcm-server.jar파일 생성은 cmd창에서 위 폴더로 이동 후 "ant jar" 명령으로 생성하시면 됩니다.


   


   위 처럼하면 gcm-server의 dist 폴더에 gcm-server.jar파일이 생성되어 있으니 이클립스 프로젝트에 추가 하시면 됩니다.



2.json 라이브러리 구하기

GCM 내부적으로 JSON을 지원하기때문에 json관련 라이브러리가 필수 입니다.

해당 파일은 android-sdks\extras\google\gcm\gcm-server의 lib폴더에

json_simple-1.1.jar 파일이 존재하니 이클립스 프로젝트에 추가 하시면 됩니다.




테스트용 파일 추가)

워낙 간단해서 간단히 적용하시면 되겠지만 jar파일 빌드 방법을 모르겠거나...

간단한 소스지만 환경 구축하는게 귀찮은 분들은 첨부된 파일을 이클립스에서 Import 하셔서 테스트하시기 바랍니다.

제가 사용하는 JDK 환경이 다를 수 있기 때문에 JDK버전등은 본인의 환경에 맞게 설정하시면 되리라 봅니다. 


이클립스 사용법은 인터넷상의 이클립스와 관련된 강좌등을 참고 하시고 간단히 설명 드리면 아래와 같습니다.


1. 압축을 아무 폴더에나 해제 함.(예:d:루트)

    d:\GCMServerSendExample  폴더가 생성 됨.


2. 이클립스 실행 후 좌측 창인 패키지 익스플로러에서 마우스 우클릭 > Import를 선택 합니다.

    또는 File > Import를 선택 하시면 됩니다.


3. 아래처럼 "Existing Projects into Workspace"를 선택 하신 후 Next를 클릭하세요.

    



4. "Browse..." 버튼을 클릭해서 첨부된 파일의 압축이 해제된 폴더를 선택 합니다.

   1. 번에서 압축을 해제한 폴더는 "D:\GCMServerSendExample" 폴더였습니다.

    



    "Browse..." 버튼으로 폴더를 선택하면 위 그림처럼 "Projects:" 영역에 프로젝트 명이 나타납니다.

    그러면 빨간색으로 표시한것 처럼 "Copy projects into workspace"를 선택 한 후 "Finish" 버튼을 클릭합니다.  

    (현재 자신이 사용하는 이클립스의 워크 스페이스 영역에 소스를 복사한다는 의미입니다.)


5. 정상적으로 Import가 되었다면 아래처럼 프로젝트가 등록되어있을 것입니다.

   



   SimpleTest.java 파일을 더블 클릭하셔서 필요한 정보를 수정 후 테스트 하시면 되겠습니다.



제 전문 분야가 아닌데다 짜투리 시간에 급하게 작성하는 것이라서 잘 못된 부분이 있을 수 있습니다.

틈틈이 내용을 수정이나 보완하고 있으니 가끔씩 원본 출처에서 변경 내용을 확인 하시기 바랍니다.


[저작권 관련]

이 부분을 함께 이동하는 경우에 한해서 다른 곳으로의 이동을 허락하며

거의 모든 내용은 http://blog.naver.com/dev4unet 블로그에도 함께 포스팅되므로
잘 못된 내용의 수정이나 전달 사항이 있으면 위 블로그에 메모를 남겨주시기 바랍니다.

참고로, 해당 글에 대해서 타인과 공유될 수 없는 쪽지와 메일등으로는 질문을 받지 않습니다.

 

본 게시글의 원본출처는 http://yoo7577.dev4u.net 이며,

원활한 공유및 내용 수정이 필요할 때 잘 못된 내용의 전파를 최대한 막기 위함이니

게시물의 일부 또는 전체의 직접적인 수정을 금지합니다.