메뉴 건너뛰기

조회 수 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
번호 제목 날짜 조회 수
257 화면 회전에 따른 애니메이션 효과 구현하기 2015.07.16 8055
256 화면 해상도에 관계없는 레이아웃(Layout) 만들기 file 2015.07.16 8640
255 화면 전환해도 데이터 유지 예제 2015.07.26 9204
254 하이브리드앱 기본 - WebView로 웹페이지 띄우기 file 2020.12.14 1025
253 하이브리드 앱에서의 세션관리(로그인 상태 유지) 2018.12.27 4983
» 푸시 서비스(GCM)에 대해 알아보자 file 2015.07.01 7000
251 푸쉬 알림 기능. GCM (Google Cloud Messaging) 사용하기 (3) file 2015.07.16 6267
250 푸쉬 알림 기능. GCM (Google Cloud Messaging) 사용하기 (2) file 2015.07.16 7292
249 푸쉬 알림 기능. GCM (Google Cloud Messaging) 사용하기 (1) file 2015.07.16 6726
248 폰갭(PhoneGap) 플러그인 사용하기 2015.06.29 7332
247 폰갭(PhoneGap) 플러그인 만들기 2015.06.29 8379
246 폰갭(PhoneGap) 에서 페이지들간의 이동 2015.06.29 8446
245 폰갭(PhoneGap) & jQuery Mobile 로 안드로이드 어플 개발 file 2015.06.29 7839
244 폰갭 비콘 디텍팅 안될 때 (기본적인건 다 되있어야됨) 2015.07.26 6528
243 패키지명을 한꺼번에 변경하기 (Refactor) file 2020.12.14 294
242 특정 폴더에서 오래된 파일 삭제하기 2015.07.16 6767
241 트리뷰(TreeView) 컨트롤 file 2014.10.16 6719
240 탭 뷰에 탭 추가하기, 아이콘 넣기 file 2015.07.16 9358
239 클래스나눠서 xml 파싱과 FTP를이용하여 안드로이드에서 활용하기 2014.08.28 6180
238 카카오톡 분석하기 (2) - 카카오톡 암호화 함수 찾기 file 2016.05.26 9598
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 13 Next
/ 13

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

© k2s0o1d4e0s2i1g5n. All Rights Reserved