반응형


Try Cloud Messaging for Android

 클라우드 메시징이 어떻게 작동하는지 보기 위해서는 여러분의 안드로이드 샘플 앱을 사용하거나, 클라우드 메시징에 여러분의 존재하는 앱을 추가하십시요.
필수조건 : 안드로이드 스튜디오 그리고 구글 플레이 서비스 의 최신 버전들.

1. Get the project

여러분이 구글 서비스 샘플을 처음 사용한다면, 구글 서비스 저장소에서 체크아웃 받으세요.
그다음 안드로이드 스튜디오를 여세요.

File > Open 을 선택하고, 여러분이google-services저장소에서 클론받은 것을 찾아서, 그리고 google-services/android/gcm 을 열면 됩니다(안드로이드 스튜디오 시작 화면이라면, Import Non-Android Studio project 를 선택하고 이것과 같은 경로를 사용하세요). 


2. Get a configuration file

그 샘플을 사용하려면, 여러분은 설정 파일을 가져오기 위해서 그리고 프로젝트 셋팅을 끝내기 위해서 몇가지 추가적인 정보를 제공할 필요가 있습니다. 샘플을 사용하려면  gcm.play.android.samples.com.gcmquickstart 패키지 이름을 사용하세요.

등록을 완벽하게 마친 후에는, 프로젝트에 추가하기 위한 google-services.json 파일을 다운로드 하세요.


Create an API project

새로운 클라우드 메시징 프로젝트들은 Firebase console 안에서 Firebase project 로 생성해야만 합니다. 처리단계에서, 프로젝트에 대한 설정 파일과 자격 증명을 생성하게 될 것 입니다.

  1. Firebase console 에서 Firebase 프로젝트를 하나 생성하고, 이미 생성한 것이 없을텐데요. 여러분의 앱과 관련된 이미 존재하는 구글 프로젝트가 이미 있다면, Import Google Project를 클릭하세요. 그게 아니라면, Create New Project를 클릭하세요.
  2. Add Firebase to your Android app 를 클릭하고 다음 단계를 설정하세요. 여러분의 존재하는 구글 프로젝트가 포함되어 있다면, 이것은 자동적으로 발생하고 여러분은 그 설정 파일을 다운로드 할 수 있습니다.
  3. 프롬프트가 떴을 때, 앱의 패키지 이름을 입력하세요. 여러분의 앱이 사용하는 패키지 이름을 입력하는 것은 중요합니다.; 이것은 오직 여러분의 Firebase 프로젝트에 앱을 추가할 때 설정할 수 있습니다.
  4. 마지막으로, google-services.json 파일을 다운로드 하세요. 여러분은 언제나 이 파일을 다운로드 할 수 있습니다.
  5. 아직 수행하지 않았다면, 이것을 여러분 프로젝트의 모듈 폴더로 복사하세요, 일반적으로 app/.

1. Add the configuration file to your project

 여러분이 방금 다운로드 한 google-services.json 파일을 안드로이드 스튜디오의 app/  또는 mobile/ 디렉토리로 복사하세요. 안드로이드 스튜디오 터미널 pane 을 열어보세요:

MAC/LINUX
$ mv path-to-download/Downloads/google-services.json app/


WINDOWS
$ move path-to-download/Downloads/google-services.json app/


2. Run the sample

이제 이미 여러분은 안드로이드 스튜디오에서 그 샘플을 빌드하고 실행했을 것입니다.

 첫째로, 여러분의 Server key 가 확실해야하는데 이것은 GcmSender.java 안의 API_KEY 값으로 제공됩니다. 
안드로이드 스튜디오 안에서, 실행 버튼을 클릭하고 연결된 단말기를 선택하세요.
여러분의 단말기로 샘플 애플리케이션이 떴을 때, 다음의 그레들 명령어를 실행하여 모든 등록된 앱 인스턴스들에게 notification 을 보내세요.:

Linux/Mac:

./gradlew run -Pmsg="<message>"

Windows:

.\gradlew.bat run -Pmsg="<message>"


이 명령어는 샘플을 목적으로 하는 서버를 모방하는 것인데요, 그러나 실제 앱 서버에 대한 예를 드는 서버의 의미를 가지지 않습니다. 왜냐하면 GcmSender.java 파일은 Server key를 포함하고 있기 때문인데, 여러분의 클라이언트 앱에서는 포함하지 않습니다. 메시지를 보내기 위한 앱 서버에 대한 더 많은 정보를 보려면 About GCM Connection Server 를 보세요. 서버의 동작하는 예시들을 검토하기 위해서는, GitHub 에 있는 GCM samples를 보세요.


3. How it works

각 단말기에 대해서,  첫째로 InstanceID API 로부터 구글 클라우드 메시징을 위한 registration token 을 얻어야 합니다. 이 토큰은 여러분의 단말기에서 퀵스타트로 실행중인 인스턴스를 식별하기 위해서 사용되어 집니다. IntentService 에서 사용중인 토큰을 추출하는 것을 보여주고 있습니다. 왜냐하면 네트워크 연결의 결과이기 때문에, 이 UI 쓰레드의 실행을 확실하게 해야 합니다.


public
 class RegistrationIntentService extends IntentService {
   
// ...

   
@Override
   
public void onHandleIntent(Intent intent) {
       
// ...
       
InstanceID instanceID = InstanceID.getInstance(this);
       
String token = instanceID.getToken(getString(R.string.gcm_defaultSenderId),
                GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);
        // ...
   
}

   
// ...
}

이 샘플의 데모 서버(GcmSender.java)가 메시지 문자열을 기본적으로 topic /topics/global 으로 보냅니다. 이 토픽을 보낸 메시지를 받으려면, 각 앱 인스턴스가 이 토픽을 구독해야 합니다.


private
void subscribeTopics(String token) throws IOException {
GcmPubSub pubSub = GcmPubSub.getInstance(this);
for (String topic : TOPICS) {
pubSub
.subscribe(token, "/topics/" + topic, null);
}
}

그리고 GcmReceiver 에 의해 잡힌 메시지들을 처리하기 위해서는 GcmListenerService 를 상속한 한 서비스를 사용해야 합니다. WakefulBroadcastReceiver 를 상속한 GcmReceiver 는, 여러분의 리스너 서비스가 완벽하게 작업을 할 수 있도록 CPU가 깨우는 것을 보장합니다.

GcmListenerService.onMessageReceived 메소드를 오버라디딩 햠으로써, 여러분은 수신된 메시지 기반으로 행동들을 수행 할 수 있습니다.


@Override

public void onMessageReceived(String from, Bundle data) {
   
String message = data.getString("message");
   
Log.d(TAG, "From: " + from);
   
Log.d(TAG, "Message: " + message);

   
if (from.startsWith("/topics/")) {
       
// message received from some topic.
   
} else {
       
// normal downstream message.
   
}

   
// ...
}


4. Next steps

만약 여러분이 자세한 내용을 원한다면 어떻게 자신의 앱으로 메시지를 보내는지 보려면, 우리의 샘플 구현 가이드를 보세요.


좋은 경험을 했나요? 문제속으로 뛰어 들까요? 우리에게 알려주세요!

Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 3.0 License, and code samples are licensed under the Apache 2.0 License. For details, see our Site Policies. Java is a registered trademark of Oracle and/or its affiliates.


반응형

+ Recent posts