마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

gcm push 서비스에 badge plugin을 적용해보는 중인데 도움 부탁드립니다.

0 추천

안녕하십니까. 얼마 전에 gcm 질문글 올렸던 공상가지망생입니다. push 메시지를 보내는 것 까지는 성공하게 되었습니다. 그 후 뱃지를 추가하고 싶어서 열심히 예제를 찾아서 해보다가 막혀서 다시 질문글을 올리게 되었습니다.. 혹시나 아시는 내용이면 답변 꼭 좀 부탁드립니다!!

 

개발환경은 phonegap 프레임워크 / 안드로이드 스튜디오입니다. 뱃지를 사용하기 위해서 검색해보다 badge plugin이란 걸 알게 되어 적용을 해보았습니다.

 

아래에 제가 만든 소스를 간략하게 적어놓겠습니다. 그냥 필요한 부분만 떼어내서 적어드릴게요..

 

<script type="text/javascript">

var pushNotification;

function onDeviceReady() {
    if (device.platform == 'android' || device.platform == 'Android') {  // 단말기가 안드로이드일 때
        pushNotification.register(successHandler, errorHandler, {"senderID":"000000000000","ecb":"onNotificationGCM"});  // regID 받고 onNotificationGCM() 호출
    }

    function tokenHandler (result) {}
    function successHandler (result) {}
    function errorHandler (error) {}


===================================================================
// 질문 내용이 여기서부터 시작합니다..

    function onNotificationGCM(e) {  //  onNotificationGCM() 시작

    switch( e.event )
    {
        case 'registered': // 안드로이드 디바이스의 registerID를 획득하는 event 중 registerd 일 경우 호출된다.
        break;

        case 'message': // 1. 안드로이드 디바이스에 푸시 메시지가 오면 호출된다.
        if (e.foreground){ // 2. 푸시 메세지가 왔을 때 앱이 실행되고 있을 경우
            
        } else { // 3. 푸시 메시지가 왔을 때 앱이 백그라운드로 실행되거나 실행되지 않을 경우
            // 4. 이 부분에 뱃지 카운터를 올려두었습니다.
            cordova.plugins.notification.badge.set(1);

            if (e.coldstart) { // 푸시 메세지가 왔을 때 푸시를 선택하여 앱이 열렸을 경우
                // 5. 앱을 열었을 경우 뱃지를 클리어 시키는 처리를 하였습니다.
                cordova.plugins.notification.badge.clear();
        } else { // 푸시 메시지가 왔을 때 앱이 백그라운드로 사용되고 있을 경우
        }
    }
    break;

}

 

1번 부분이 gcm서버에서 단말기로 푸시 메시지를 쏴준 후 발생하는 이벤트라고 이해를 했습니다. 그래서 저 부분 아래에 뱃지 플러그인을 사용하면 되겠다고 생각하였습니다.

 

2번 부분은 앱을 실행하고 있는 도중 푸시 메시지가 왔기 때문에 뱃지 카운트를 올릴 필요가 없다고 생각해서 비워두었습니다.

 

3번 부분은 백그라운드나 완전 종료상태일 경우 뱃지 카운트를 늘려줘야되기 때문에 바로 아래에 플러그인을 사용하는 코드를 넣어놨습니다.

 

4번이 그 코드 한 줄입니다. 

cordova.plugins.notification.badge.set(1);

그 아래로는 사실 필요없는 부분이고, 여기까지만 하면 푸시 메시지가 단말기로 전송될 경우 뱃지 카운트가 1 올라가있을거라 생각했습니다.

그리고 앱을 실행해서 푸시 메시지를 전송해보니 카운트가 오르지 않더라구요. 몇 번 테스트를 더 해보다가 전송된 푸시 메시지를 클릭해서 앱을 타고 들어가니 그때서야 뱃지 카운트가 올라가있었습니다.

몇 번 더 해보니깐, 이벤트가 발생하는 시점이 제가 추측한 시점이랑 달랐습니다.

저는 단말기가 메시지를 받으면 그 즉시 앱 아이콘의 뱃지 카운트를 올려주는 줄 알았는데, 뱃지 카운트는 앱에 접속한 뒤에만 클리어를 시키던 증가를 시키던.. 제어가 가능하도록 되어있었습니다.

혹시 퍼미션 문제인가 하고 구글링을 엄청 해봤는데 소득은 없었구요... :(

제가 모바일 개발이 완전 처음이라 계속 삽질을 하고 있는데, 이건 해보다가 도저히 답이 안나와서 질문드리게 되었네요.

1. Node.js에서 gcm과 badge 플러그인을 추가하여 푸시 메시지를 받는 즉시 뱃지 카운트를 컨트롤 할 수 없는건가요?

2. 만약 없다면, 현재 안드로이드 폰에서 사용중인 카톡이나 다른 앱들은 되고 있는데 그건 어떻게 되는건지 궁금합니다...

3. 검색을 좀 더 해보니 java 소스에서 badgeview(?)를 활용하여 컨트롤한다는 내용을 본 것 같은데 자바단에서 한다면 가능한 기능일까요? 가능하다면, gcm 플러그인 설치 시 생성된 GCMIntentService의 onMessage() 이런 함수에서 하면, 메시지 받는 즉시 컨트롤 할 수 있는건지 궁금하네요...

가능하다면 뱃지 기능을 추가하고 싶습니다... 구현해보셨거나 알고 계신분 계시다면 답변 꼭 좀 부탁드립니다. 감사합니다.

 

공상가지망생 (210 포인트) 님이 2016년 2월 24일 질문
공상가지망생님이 2016년 2월 24일 태그 변경

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...