티스토리 뷰

728x90

1. 개요

 


  GCM이란 Google Cloud Messaging Service로 구글이 제공하고 있는 API 기능 중 하나입니다. 직접 Sender가 Receiver에게 메시지를 보내는 것이 아니라 GCM에게 메시지를 보내고 해당 메시지를 GCM이 다시 Receiver에게 전달해 줍니다.


  추가로 기존 eclipse에서 제공하던 Google Cloud Messaging기능이 IDE가 Andoird Studio로 변경되면서 Ant 기반 빌드 방식을 Gradle로 변경하였습니다. 즉 기존 프로젝트의 hash키를 등록하는 방식이 아닌 프로젝트 내 build.gradle에 GCM을 사용한다는 문장을 추가함으로써 쉽게 GCM을 사용하실 수 있습니다.


  Sender가 GCM에게 메시지를 전달하는 방법에는 php를 이용한 방식과 node.js를 이용한 방식이 있는데, 이번 글에서는 php를 이용하여 GCM을 구현하였습니다.


 아래 영상은 완성본 영상입니다.  웹 페이지(sender)에서 핸드폰(receiver)에게 메시지를 보내며 핸드폰은 해당 메시지를 수신하여 Notification으로 알려줍니다.



2. 프로젝트 생성하기

 

  우선 빈 프로젝트를 생성합니다. 생성시 Application name에 _(언더바)를 포함한 특수문자나 한글이 들어가지 않도록 합니다.




3. 앱 등록하기

 

  GCM 서비스를 이용하기 위해서는 구글 개발자 포럼에 GCM 기능을 사용하겠다고 등록을 해야합니다. - https://developers.google.com/cloud-messaging/


 우선 로그인을 하시고 해당 페이지의 우측 상단의 TRY IT ON ANDROID을 클릭합니다.



  이전에 생성한 어플리케이션을 등록시킬것이기 때문에 add Cloud Messaging to your existing app을 누릅니다. 



  어느정도 페이지를 내려가시다 보면 GET A CONFIGURATION FILE버튼이 보이실 겁니다. 해당 버튼을 눌러 등록 페이지로 넘어갑니다.



  기존에 생성한 프로젝트의 정보를 입력합니다.



ENABLE GOOGLE CLOUD MESSAGING버튼을 눌러 활성화를 시켜줍니다. 



  서비스 이용에 필요한 json파일을 받기위해 아래 Generate configuration files버튼을 누릅니다.



  이전에는 Server API Key와 Sender ID를 따로 메모해 두었으나 현재에는 이 정보들이 들어있는 json파일을 다운받아 해당 안드로이드 프로젝트에 추가합니다. json파일을 열어보시면 Server API Key와 Sender ID 정보가 들어 있을 겁니다.



4. 안드로이드 프로젝트 설정 하기

 

  우선 다운받은 google-services.json 파일을 위 사진과 같은 위치에 복사합니다.



이후 app->src->build.gradle
상단에 apply plugin: 'com.google.gms.google-services'
하단에 dependencies에 compile 'com.google.android.gms:play-services-gcm:8.3.0'를 추가합니다.



  추가로 app->gradle->build.gradledependencies에 classpath 'com.google.gms:google-services:1.5.0-beta2'를 추가합니다.
모든 추가가 끝나시면 오른쪽 상위 Sync Now 디버깅을 한번해주시기 바랍니다.


 지금 한 프로젝트 설정은 https://developers.google.com/cloud-messaging/android/client#add-config에 자세히 설명하고 있습니다. 참고하시기 바랍니다.



5. Sample Code(Android)

 

  해당 셈플 코드는 구글에서 제공하고 있는 셈플코드를 변경하여 만든 것입니다. 구글 셈플 코드는 https://github.com/googlesamples/google-services/tree/master/android/gcm에 들어가시면 다운받으실 수 있습니다.


  우선 일반 클레스(자바) 파일 3개를 추가 하여 위 사진처럼 만듭니다. Service 클레스를 생성하셔도 됩니다. 저의 셈플 코드는 구글 셈플코드보다 클레스가 하나 적습니다. 


   1. MainActivity : Activity class입니다.

   2. InstanceIDListenerService : service class입니다.

   3. RegistrationIntentService : Intent service class입니다.

   4. GCMListenerService : service class입니다.


 진행을 하기전 Service와 Notification이 무엇인지 모르신다면 아래 주소로 가셔서 한번 보셨으면 합니다.

  Notification 설명 : http://twinw.tistory.com/48

  Service 설명 : http://twinw.tistory.com/49

  Service + Notification 통합 예제 :  http://twinw.tistory.com/50



1. Manifests.xml

  Manifests.xml의 상단에 gcm을 사용하기 위한 permission을 추가합니다. 여기서 주의하실 것이 <project name>을 자신의 프로젝트 이름으로 변경해 주셔야 합니다.


  메시지를 수신받기 위한 receiver를 추가합니다.


  생성한 클레스가 service class이며 사용한다고 정의해 줍니다. 여기서도 주의하실 것이 <project name>을 자신의 프로젝트 이름으로 변경해 주셔야 합니다.


  Manifests.xml의 풀 코드입니다.


2. MainActivity.java

  MainActivity입니다. BroadcastReceiver를 이용하여 RegistrationIntentService에서 보낸 로컬 메시지를 수신하여 버튼의 글과 색상을 변경합니다.


3. activity_main.xml

  MainActivity의 xml 파일입니다.


4. InstanceIDListenerService.java

  gcm에서 제공하는 Service를 extends하고 있습니다.


5. RegistrationIntentService.java

  Device의 Id인 token을 등록합니다. 또한 LocalBroadcastManager를 이용하여 등록 완료를 MainActivity에게 알려줍니다.


6. GcmListenerService.java

  GCM서버에서 보낸 message를 수신하는 service입니다. 받은 메세지를 Notification으로 알려줍니다.



6. Sample Code(Sender-html & php)

 

  Sender는 html로 구현한 웹 페이지와 구글 서버로 데이터를 전송할 php로 구현하였습니다. 아마 서버 프로그램에 아무런 설정을 하지 안으시고 동작을 시키시면 curl에 관한 오류가 발생할 것입니다. 해당 오류는 서버 프로그램의 설정에서 php_curl.dll을 사용한다고 변경해주시면 됩니다. 이 부분은 유저 분들의 서버 프로그램이 각각 다를 것이기 때문에 설명하지 않겠습니다.

그리고 테스트는 loop back(127.0.0.1)이나 개인 주소로 하여 테스트 해주시기 바랍니다.


1. gcmsender.html


2. gcmsender.php


  해당 코드로 테스트 할 시, 기본적인 GCM API 키와 같은 데이터를 php에 작성해 주셔야합니다. 또한 php에 작성해야하는 Device Token ID는 안드로이드에서 등록 번튼을 누르고 로그 검색을 통해 쉽게 알 수있습니다. 



  추가로 100개의 디바이스에게 메시지를 전송한다고 가정했을 때 php에 Token ID를 100개 적어 한번에 보내는 것이 100번 보내는 것보다 빠릅니다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함