2014년 11월 6일 목요일

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

안드로이드에서도 포함될 자바스크립트 파일은 두개가 된다.
두개의 js 파일은 아래와 같이 포함되게 된다.
?
1
2
<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. 앱이 실행되지 않고 있는 경우

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

댓글 없음:

댓글 쓰기