상세 컨텐츠

본문 제목

phonegap 3.5 에서 푸쉬(Push Notification) 적용하기 - 3. 클라이언트 작성 (Android)

프로그램개발/Phonegap

by fsteam 2014. 7. 11. 15:08

본문

안드로이드에서도 포함될 자바스크립트 파일은 두개가 된다.

두개의 js 파일은 아래와 같이 포함되게 된다.

<script type="text/javascript" charset="utf-8" src="cordova_android.js"></script>
<script type="text/javascript" charset="utf-8" src="PushNotification.js"></script>

페이지가 로딩이 되면.. 다음과 같이 우선 푸쉬서버에 등록을 진행한다.

document.addEventListener("deviceready", onDeviceReady, false);

function onDeviceReady() {

// 푸쉬 서비스에 등록하는 부분임.

var pushNotification = window.plugins.pushNotification;

if (device.platform == 'android' || device.platform == 'Android') {

// 안드로이드 푸쉬 등록

pushNotification.register(successHandler, errorHandler,{"senderID" : "123456789012" , "ecb" : "onNotificationGCM"});

} else {

// 아이폰 푸쉬 등록

pushNotification.register(tokenHandler, errorHandler,{"badge" : "true" , "sound" : "true" , "alert" : "true" , "ecb" : "onNotificationAPN"});

}

}


위에 진하게 표시된 안드로이드 푸쉬등록 코드를 살펴보자.

register 함수를 통해서 successHandler 와 errorHandler 를 등록하고 옵션으로 배열을 넘겼다.

뒷부분의 옵션은 다음과 같다.


senderID : 안드로이드 개발지원센터에서 GCM 신청하고 발급받은 send_id 

이 값을 발급받는 방법은 아래의 링크를 참조하자.


GCM-1 : 서비스 신청하기


ecb : 푸쉬 이벤트 받을 함수명 지정


앞서 iOS 에서는 tokenHandler 함수에서 파라메터로 device token 이 넘어왔었지만, 안드로이드는 ecb 에서 지정한 함수에서 모든 처리가 이루어진다. ecb에서 지정한 함수인 onNotificationGCM 함수를 살펴보자

함수 파라메터로 넘어오는 이벤트 메시지를 통해서 처리해야 될 동작을 지정할 수 있다.


// Android 푸쉬 관련 이벤트

function onNotificationGCM(e) {

switch( e.event )

{

case 'registered':

if ( e.regid.length > 0 )

{

// GCM에 등록된 단말기의 registrationID 값이 넘어온다!!

// 여기에서 서버로 e.regid 를 전송하여 저장해 두어야 서버에서 푸쉬발송이 가능하다.

console.log("regid = " + e.regid);

}

break;

case 'message':

// 서버에서 푸쉬 메시지가 도착한 경우에 호출된다.

if (e.foreground)

{

// 앱이 현재 실행중인 상태이다!!

// 사운드로 푸쉬메시지가 왔음을 알리자!!

//var my_media = new Media("/android_asset/www/"+e.soundname);

//my_media.play();

}

else

{   

// 상태바에서 사용자가 클릭해서 앱이 실행되는 경우.

if (e.coldstart) {

// 앱이 새로 구동되는 경우의 처리

} else {

// 앱이 백그라운드에서 실행되고 있을때의 처리

}

}

console.log("msg : " + e.payload.message);

console.log("msg count : " + e.payload.msgcnt);

break;

case 'error':

// 에러 발생

console.log("Error = " + e.msg);

break;

default:

// 알수없는 메시지.. 무시하자!

break;

}

}       


안드로이드는 iOS 처럼 뱃지를 설정하는 기능은 없지만.. 메시지 도착시의 다양한 상황에 따른 액션을 지정할 수 있다.


세가지 경우를 생각해 볼수 있다.


1. 앱이 현재 화면상에 실행중인 경우

2. 앱이 백그라운드에서 실행중인 경우

3. 앱이 실행되지 않고 있는 경우


위 세가지 상황에 맞게 적절한 코드를 작성함으로써 사용자에게 필요한 메시지를 전달하거나 화면을 이동시킬 수 있다 !!


관련글 더보기