메뉴 건너뛰기

조회 수 7083 추천 수 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
번호 제목 날짜 조회 수
» 푸시 서비스(GCM)에 대해 알아보자 file 2015.07.01 7083
56 Invalid project description 문제 file 2015.07.01 7167
55 [Android 2.3] SharePreference 2015.07.01 7111
54 [Android 2.3] spinner file 2015.07.01 7719
53 안드로이드 맵 API key (배포용 맵키) file 2015.07.01 8147
52 안드로이드 소스 - 카메라 플래쉬(Flash, 후라시) 앱 file 2015.06.29 9040
51 안드로이드 - 소방시설바이블 어플 소스 ( 폰갭, 폰갭플러그인, assets 폴더안의 파일 이용, pdf 리더기 선택, 유튜브재생기 선택 ) file 2015.06.29 8026
50 폰갭(PhoneGap) 플러그인 만들기 2015.06.29 8588
49 폰갭(PhoneGap) 플러그인 사용하기 2015.06.29 7452
48 폰갭(PhoneGap) 에서 페이지들간의 이동 2015.06.29 8644
47 폰갭(PhoneGap) & jQuery Mobile 로 안드로이드 어플 개발 file 2015.06.29 7901
46 android SMS 리시버 2015.06.29 6923
45 Java Applet과 javascript와의 통신 2015.06.29 7828
44 안드로이드 소스 코드 보호 기법 2015.06.29 8388
43 안드로이드 NDK 개발환경 만들기 / 이클립스 NDK 설정 file 2015.06.10 7947
42 TextureView를 이용한 카메라 Preview 좌우 반전 2015.06.10 14447
41 prepend(),append(),before(),after() 메서드 2014.10.20 7444
40 Events - Unbind() 메서드 (이벤트 처리기 해제) file 2014.10.16 5807
39 Effects - Show() / Hide() 메서드 (보이기 및 숨기기) file 2014.10.16 6022
38 Effects - FadeIn() / FadeOut() 메서드 (서서히 보이기 및 숨기기) file 2014.10.16 6127
Board Pagination Prev 1 ... 4 5 6 7 8 9 10 11 12 13 Next
/ 13

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

© k2s0o1d4e0s2i1g5n. All Rights Reserved