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

안드로이드 badge 설정 질문드립니다.

0 추천

안녕하세요 push 알림 서비스 구현 도중 badge 기능을 하다가 막혀서 질문드리게 되었습니다. 모바일 개발은 이번이 처음이라 정말 많은 삽질을 하며 여기까지 왔습니다.. 혹시 아시는 분 계시면 꼭!! 좀 답변 부탁드려요!

개발 환경은 phonegap/Node.js/안드로이드스튜디오입니다.

우선 여러가지로 검색해보다가 badge plugin을 활용하는 방법으로 시도해보았습니다. phonegap 환경에서 js파일에 코딩하고 있습니다. 간단한 소스는 이렇습니다.

 

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;
 
}

 

위 4번 블럭에 "푸시 메시지가 왔을 때 앱이 백그라운드로 실행되고 있거나, 아예 앱이 실행되고 있지 않을 때" 라고 명시되어 있어서 그 부분에 뱃지 카운트를 올리도록 하였습니다.

그리고 테스트를 해보니, 저 뱃지 카운트 코드가 메시지를 받은 즉시 실행되는 것이 아니고, 전송받은 푸시를 선택하여 해당 앱에 접근을 해야지만 실행이 되었습니다.

제가 원하는 것은 '푸시 메시지를 받았을 때 그 즉시' 뱃지가 생성되는 것인데 이게 아무리 해봐도 안되더라구요. 다른 블럭에도 소스를 추가해 테스트해보았으나 아무리 용을 써도 우선 앱에 접근을 해야지만 뱃지가 올라갔습니다. 이러면 아무런 의미가 없게 되잖아요?? ㅎㅎ;; 앱에 접근하면 어차피 뱃지는 초기화하는 게 맞는 것이니깐요.

혹 스크립트단에서 실행해서 그런건가 하고, 이번엔 네이티브단에서 코드를 수정해보았습니다.

plugin.gcm/GCMIntentSerivce.java의 onMessage 메서드에 shortcut badge 객체를 활용해 실행해보았으나 이 시도 역시, 푸시 알림을 통해 앱에 접근 할 경우에만 뱃지 카운트가 실행되더라구요 ㅠ_ㅜ...

아무리 해봐도 이유를 모르겠습니다. 분명 로그를 찍었을 때에는 폰이 푸시 메시지를 적용받는 순간 즉시 로그가 나오는데 항상 뱃지는 실행 타이밍이 앱에 접근할 경우에만 실행되네요...

이건 혹시 permission 문제인가 싶어서 구글링을 아무리 해봐도... 관련 글이 안보이구요.

너무 막막하네요. 아시는 분 계신면 꼭 좀 답변 부탁드려요!!!

공상가지망생 (210 포인트) 님이 2016년 3월 1일 질문

답변 달기

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