차근차근/Android

GCM 관련 참고사항입니다

예쁜꽃이피었으면 2014. 7. 29. 00:54

 
http://www.androidpub.com/2342095
 

당연한거 아닌가라고 뭐라고 할수 있지만
혹시나 저같은분이 있을까 하고 글을 올립니다.

샘플코드가 에러없이 잘돌아간다고 그냥 쓰면 안되는걸 이번에도 또 느끼네요..ㅜㅜ
(뭐든지 대충하는 습성을 고쳐야되는데..OTL...)

메세지 PUSH를 C2DM에서 GCM으로 바꾸고 기대를 많이 했습니다. 이전 C2DM은 유실율이 너무 심했거든요..
그런데 GCM도 바꿨는데도 C2DM 못지 않게 유실율이 심했습니다.
저는 메세지는 서버에 저장하고 PUSH가 되었으면 플래그를 두어 'Y','N'으로 표시를 합니다.
그런데 GCM으로 변경해도 'N'이 수두룩하더군요..
사용자들은 계속항의하고 저는 계속 GCM만 탓했죠..(알림이 안되요 등등)

GCM loss 관련 검색을 아무리해도 찾을수가 없어서 답답해 하던중 아래 번역글을 찾았네요..ㅜㅜ


보통 GCM 이라고 검색하면 뜨는 대부분의 샘플소스가 아래와 같이 검색됩니다.

boolean SHOW_ON_IDLE = true;    //기기가 활성화 상태일때 보여줄것인지
int LIVE_TIME = 1;  //기기가 비활성화 상태일때 GCM가 메시지를 유효화하는 시간
int RETRY = 2;  //메시지 전송실패시 재시도 횟수

Sender sender = new Sender(simpleApiKey);
Message message = new Message.Builder()
                    .collapseKey("collapseKey" + System.currentTimeMillis())
                    .delayWhileIdle(SHOW_ON_IDLE)
                    .timeToLive(LIVE_TIME)
                    .addData("test","PUSH!!!!")
                    .build();

MulticastResult result = sender.send(message,regid,RETRY);

위 소스되로 하면 정상적으로 보내지는 메세지는 65프로 밖에 안되는데요(아래 스샷참조)




그리고 아래 처럼 수정하였습니다.
SHOW_ON_IDLE 를 false로 주고(이건 기본값이 false입니다.)
LIVE_TIME = 1800 이건 시간이 아니고 초더군요..
그리고 중요한 것, collapseKey 값을 주지 않았습니다.

boolean SHOW_ON_IDLE = false;    //기기가 활성화 상태일때 보여줄것인지
int LIVE_TIME = 1800;  //이건 시간이 아니고 초를 의미..
int RETRY = 3;  //메시지 전송실패시 재시도 횟수

Sender sender = new Sender(simpleApiKey);
Message message = new Message.Builder()
                    //.collapseKey("collapseKey" + System.currentTimeMillis()) //주석막음
                    .delayWhileIdle(SHOW_ON_IDLE)
                    .timeToLive(LIVE_TIME)
                    .addData("test","PUSH!!!!")
                    .build();

MulticastResult result = sender.send(message,regid,RETRY);

이렇게 하면 82프로로 올랐네요..(아래 스샷참조)




90프로 이상 성공율을 보여야하는데 GCM의 한계인걸까요??
이상 허접 삽질기였습니다.

지금 생각해보니 C2DM도 샘플소스 그대로 해서 유실율이 많았던거 같다는..OTL..


반응형