2012-07-24 2 views

답변

1

GCM은 TTL에 지정된 정보를 보유합니다. GCM은 브로드 캐스트 서비스이므로 장치가 메시지를 받았는지 여부를 알 필요가 없습니다.

당신이 할 수있는 한 가지는 푸시 메시지를 추적하는 것입니다. 응용 프로그램이 시작되면 마지막 수신 메시지를 제출하여 서버로 확인하십시오.

기기가 켜져 있고 온라인 상태 인 경우에도 GCM으로부터 메시지를받을 수 있다고 보장 할 수 없습니다.

+0

답장을 보내 주셔서 감사합니다. 나는 그것이 메시지를 가지고 있다는 것을 안다. 그러나 장치가 꺼져 있으면 먼저 메시지를 보낼 수 없도록하고 싶습니다. 메시징 앱을 만들고 있는데 두 기기가 모두 켜져있을 때만 채팅하고 싶습니다. 그래서 오프라인/온라인 상태를 사용하고 있습니다. – Klaasvaak

+1

GCM으로부터 푸시 메시지를받을 때 장치 핑을 서버로 되돌릴 수 있습니다. 그런 다음 서버 측 모니터링 핑 요청에 대한 논리가 있습니다. 그냥 생각. – RobGThai

+0

확인. 나는 이것이 최선의 해결책이라고 생각한다. – Klaasvaak

1

할 수있는 일은 앱에서 로그 아웃 할 때 서버에서 GCM 서비스 등록을 취소하는 것입니다. 따라서 서버가 푸시 알림을 기기로 보내면 기기가 수신하지 않습니다. 다시 앱에 로그인 할 때마다 장치를 서버에 다시 등록해야합니다.

당신은 다음 코드하여 GCM 서비스 등록 취소 등록 & 캔트 :

등록 :

GCMRegistrar.checkDevice(this); 
    GCMRegistrar.checkManifest(this); 
    final String regId = GCMRegistrar.getRegistrationId(this); 
    if (regId.equals("")) { 
     GCMRegistrar.register(this, SENDER_ID); 
    } else { 
     Log.v(TAG, "Already registered"); 
    } 
registerReceiver(mHandleMessageReceiver, 
       new IntentFilter(DISPLAY_MESSAGE_ACTION)); 

등록 취소 :

unregisterReceiver(mHandleMessageReceiver); 
     GCMRegistrar.onDestroy(this); 

: 다음 코드들의 OnDestroy 방법에

쓰기 관련 검색어가 있으면 알려주세요. 이걸 너에게 도와 줘서 기뻐.

+0

onDestroy 메서드는 메시지를 수신하고 처리 할 때 호출됩니다. 그래서 너무 자주입니다. – Klaasvaak

관련 문제