메뉴 건너뛰기

조회 수 7000 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부
안드로이드에서 푸시 서비스는 2.2 프로요 버전부터 애플리케이션에 적용할 수 있도록 지원하던 C2DM(Cloud To Device Messaging)을 젤리빈 4.1 버전부터 GCM(Google Cloud Messaging)으로 바꾸어 지원합니다

GCM에 대한 개략적인 프로세스와 초기 등록 ID를 획득하기까지의 방법은 아래 링크를 참고합시다 

GCM 푸시서버연동 설정 - Client
참고 : http://blog.daum.net/_blog/BlogTypeView.do?blogid=0qCVX&articleno=11 작성시기 : 2015.04.10 [간략소개] 출처 : http://musasin8...
scotthan.tistory.com
본문으로 이동

GCM 푸시 메시지 처리과정을 간단하게 정리하면 다음과 같습니다
  1. 단말은 자신을 클라우드 서버에 등록하고 서버로부터 등록 ID를 받습니다
  2. 등록 ID 정보는 메시지를 전송할 권한이 있는 애플리케이션 서버로 보낸 후 메시지를 기다립니다
  3. 보내고자 하는 메시지는 애플리케이션 서버에서 클라우드에 접속한 후 전송합니다
  4. 전송된 메시지는 등록한 단말에 보내집니다

애플리케이션 서버는 직접 단말로 메시지를 보낼 수 없으므로 클라우드 서버를 통해 보내게 됩니다. 즉, 메시지의 흐름은 '애플리케이션 서버 -> 클라우드 서버 -> 단말'의 형태를 띠게 됩니다

이 과정에서 다음과 같은 두 가지 내용을 기억할 필요가 있습니다
  1. 애플리케이션 서버에 저장된 단말의 등록 ID
  2. 애플리케이션 서버에서 클라우드 서버로 접속하기 위한 인증 정보

등록 ID(Registration ID)는 등록한 단말별로 고유한 값으로 설정되어 애플리케이션 서버에 저장되며, 클라우드 서버가 메시지를 보내주어야 할 단말을 구분하는데 사용됩니다

인증정보는 애플리케이션을 등록해야 사용할 수 있고, 클라우드 서버로 접속하기 위한 인증 정보입니다. 아무나 접속하여 단말로 메세지를 보내면 안되므로 애플리케이션 서버가 API 키라고 불리는 고유한 값을 이용해 메시지를 보내도록 합니다

GCM을 위한 앱을 만드려면 먼저, 안드로이드 스튜디오에서 'play services' 라이브러리를 다운받아야 합니다

매니페스트에는 GCM을 사용하기 위해 정의한 서비스를 등록하고 권한 정보 등을 넣어야 합니다
1.jpg




다음은 액티비티 부분입니다 (단말 등록하기 / 전송하기)
2.png




메인 액티비티의 코드에서는 Sender 객체를 초기화하는 부분과 함께 [단말 등록하기]와 [전송하기] 버튼을 눌렀을 때 호출하는 메서드들을 볼 수 있습니다. Sender 객체는 단말에서 메시지를 보낼 때 사용하는 것으로 구글 API 콘솔 사이트에서 발급받은 API 키를 파라미터로 전달하면서 초기화합니다

[단말 등록하기] 버튼을 눌렀을 때 호출하는 registerDevice() 메서드에는 다음과 같은 코드가 들어 있습니다
3.png



GoogleCloudMessaging 객체는 구글 클라우드 서버에 단말을 등록하는 과정을 도와줍니다. 이 객체를 참조한 후 단말을 등록하기 위해 register() 메서드를 호출합니다. 단말 등록 과정은 내부적으로 인터넷을 사용하므로 스레드 클래스를 하나 정의하고 그 안에서 처리합니다

register() 메서드를 호출하여 정상적으로 단말이 등록되면 등록 ID를 돌려받게 됩니다. 이 등록 ID는 푸시 메시지를 보낼 때 사용하므로 잘 보관해두어야 합니다. 원래는 푸시 메시지를 전송하는 쪽으로 이 등록 ID를 보내주어야 하지만 예제 소스에서는 보내는 기능이 같이 들어가 있으므로 변수에 저장해 두었다가 메시지를 전송하기 위한 버튼을 눌렀을 때 이 변수의 정보를 사용하게 됩니다

[전송하기] 버튼을 눌렀을 때 호출되는 메서드는 다음과 같습니다
4.png




메시지를 전송할 때도 스레드 안에서 전송되도록 구현하고 Sender 객체의  send() 메서드를 호출하면 Message 객체를 만들어서 메시지를 전송하게 됩니다

Message 객체의 addData() 메서드를 이용해 데이터를 추가할 때 이름과 값을 지정하는데, 받는쪽에서도 이를 구분하여 수신하게 됩니다. send() 메시지를 호출할 때는 등록 ID가 파라미터로 전달되어야 합니다. 즉, 메시지를 전송하는 쪽에서 메시지를 받을 단말의 등록 ID를 가지고 있어야 한다는 의미가 됩니다

이렇게 메시지를 전송하면 클라우드 서버로 보내진 메시지는 다시 단말 쪽에서 받게 됩니다. 단말 쪽에서 메시지를 받게 되면 GCMBroadcastReceiver 안에 들어 있는 onReceive() 메서드가 호출됩니다
5.png




위 소스에서는 푸시 메시지를 전달받은 데이터를 이용해 메인 액티비티를 띄우는데 인텐트에 플래그를 주었기 때문에 메인 액티비티의 onNewIntent() 메서드로 데이터가 전달됩니다
6.png




애플리케이션 업데이트 정보를 단말에 알려주어야 하는 경우처럼 이미 많은 사람들이 사용하는 애플리케이션에 알림 메시지를 전송하려고 할 때는 GCM을 사용하는 것이 간편하고 좋을 수 있습니다

List of Articles
번호 제목 날짜 조회 수
177 Android 와 JSP 간 파라미터 암복호화 (1) file 2016.05.26 7474
176 알아놓으면 좋은 내용정리 2016.06.07 7458
175 URL을 이용해서 이미지 다운로드 하기 2015.07.16 7400
174 prepend(),append(),before(),after() 메서드 2014.10.20 7361
173 [안드로이드] 콘텍스트 메뉴 사용예제 file 2015.09.03 7344
172 폰갭(PhoneGap) 플러그인 사용하기 2015.06.29 7332
171 안드로이드 ( Android ) APK 파일 생성하기 file 2015.07.17 7305
170 푸쉬 알림 기능. GCM (Google Cloud Messaging) 사용하기 (2) file 2015.07.16 7292
169 [안드로이드] 뷰(View)에 여백넣기 file 2015.07.17 7225
168 XmlPullParser 를이용하여 데이터 가져와보기!! 2014.08.28 7221
167 [안드로이드스튜디오] 단축키 2015.07.02 7160
166 [안드로이드] 뷰(View)의 너비와 높이 지정하기 file 2015.07.17 7140
165 네트워크 연결 상태 및 3G/WIFI 연결상태 체크하기 2016.03.18 7131
164 Invalid project description 문제 file 2015.07.01 7117
163 이미지 버튼(ImageButton) 만들기 2015.07.16 7111
162 안드로이드 스튜디오 자동 임포트 하기 file 2015.07.09 7107
161 [안드로이드] 레이아웃의 기본2 file 2015.07.16 7071
160 인텐트를 이용한 Activity간 데이터 전달 (사용자 정의 클래스) file 2015.07.16 7061
159 HTML5로 비디오 보여주기 Video Tag file 2014.09.04 7059
158 안드로이드 웹에서 이미지 불러오기!! 2014.08.28 7052
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 13 Next
/ 13

하단 정보를 입력할 수 있습니다

© k2s0o1d4e0s2i1g5n. All Rights Reserved