메시지를 보내고 받을 수 있는지 확인하려면 클라이언트 앱이 GCM에 등록해야합니다. 이 프로세스에서 클라이언트는 고유한 등록 토큰을 가져와서 서버로 전달합니다. 서버는 토큰을 저장하고 클라이언트 앱에 받았다는 통지를 다시 보냅니다. 이 프로세스에서 교환되는 등록 토큰은 앱 서버가 특정 클라이언트에 메시지를 보내는 데 사용하는 클라이언트 앱 인스턴스 식별자와 같은 것입니다.
GCM에 등록하려면 다음 단계를 따르세요
- 클라이언트 앱은 Instance ID API를 사용하여 등록 토큰을 얻습니다. 이 API를 호출할 때 인증된 엔티티를 앱 서버의 Sender ID로 설정하고 Scope를 GCM에 대한 적절한 값(플랫폼에 따라 다름)으로 설정해야 합니다.
- 클라이언트 앱은 등록 토큰을 앱 서버로 전달합니다.
- 앱 서버는 등록 토큰을 저장하고 프로세스가 성공적으로 완료되었음을 클라이언트 앱에 알려줍니다.
앱 서버가 등록 핸드 셰이크의 일부를 완료하지 못하면 클라이언트 앱은 등록 토큰을 서버로 다시 보내거나 등록 토큰을 삭제해야 합니다.
Topic 메시지 전용으로 GCM을 사용하는 경우 등록 토큰을 앱 서버에 전달할 필요가 없습니다. 하지만, 토큰을 얻으려는 호출은 여전히 앱 서버의 sender ID로 설정된 인증된 엔티티를 가져야 합니다. 그리고 scope는 GCM에 대한 적절한 값으로 설정합니다.
Automatic Retry Using Exponential Back-Off (Exponential Back-Off를 사용한 자동 재시도)
등록에 실패하면 클라이언트 앱은 재시도하는 것이 좋습니다. GCM이 클라이언트 앱의 작동에 필수적이지 않은 경우, 앱은 등록 오류를 무시하고 재시작할 때 다시 등록하려고 시도할 수 있습니다. 그렇지 않다면, Exponential Back-Off(지수적 백 오프)를 사용하여 등록 작업을 다시 시도해야합니다. (클라이언트 앱은 다시 시도하기 전에 이전 시간의 두배를 대기해야 합니다.)
클라이언트 앱은 동일한 방식으로 등록 해제 실패를 처리해야합니다.
Canonical IDs (표준 IDs)
클라이언트 앱 버그로 인해 동일한 장치에 대한 여러 등록이 트리거되는 경우, 상태를 조정하기 어려울 수 있으며 클라이언트 앱의 메시지가 중첩될 가능성이 있습니다.
Canonical IDs를 구현하면 이러한 상황에서 쉽게 복구할 수 있습니다. Canonical 등록 ID는 클라이언트 앱에서 요청한 마지막 등록 토큰 입니다. 이것은 서버가 메시지를 장치로 전송하는데 사용하는 ID입니다.
이전 등록 토큰을 사용하여 메시지를 보내려고하면 GCM은 평소대로 요청을 처리하지만 응답 registeration_id 필드에 Canonical ID를 포함합니다.
결국 이전 등록 토큰이 작동하지 않으므로 서버에 저장된 등록 토큰을 이 Canonical ID로 바꾸십시요.
Unregistration and Unsubscription (등록 취소 및 탈퇴)
클라이언트 앱이 앱 서버에서 메시지나 topic 구독 수신을 중지하는 데 사용할 수 있는 세가지 방법이 있습니다.
- Instance ID deleteToken()은 대상 서버를 앱 서버의 Sender ID로 설정하고 Scope를 GCM으로 설정합니다. 이렇게 하면 특정 앱 서버의 메시지(Topic 메시지 포함)가 중지됩니다.
- Instance ID deleteID(). 이렇게 하면 모든 앱 서버에 대한 이전 등록 및 Topic 구독이 중지됩니다.
- GCMPubSub unsubscribe(). 이렇게 하면 앱 서버의 특정 Topic으로 부터 Topic 메시지가 중지됩니다.
클라이언트 앱은 메시지 받기를 중지해야 할 때 이러한 등록 해제 및 등록 취소 기능만 호출해야합니다. 개발자는 다음과 같은 이유로 사용자간 전환 또는 로그아웃하는 메커니즘으로 클라이언트 앱을 등록 해제 해서는 안됩니다.
- 등록 토큰은 특정 로그인 사용자와 관련이 없습니다. 클라이언트 앱이 등록 취소 한 후 다시 등록하면 앱은 동일한 등록 토큰 또는 다른 등록 토큰을 수신할 수 있습니다.
- 등록 취소하고 재 등록하는데 최대 5분이 걸릴 수 있습니다. 이 시간 동안 등록되지 않은 상태로 인해 메시지가 거부 될 수 있으며 메시지가 잘못된 사용자에게 전달 될 수 있습니다.
메시지가 의도한 사용자에게 전송되는지 확인하려면 다음을 수행하십시요.
- 앱 서버는 현재 사용자와 등록 토큰 간의 매핑을 유지 관리 할 수 있습니다.
- 클라이언트 앱은 수신한 메시지가 로그인한 사용자와 일치하는지 확인합니다.
How uninstalled client app unregistration works (제거 된 클라이언트 앱 등록 해제 작동 방식)
클라이언트 앱은 설치 제거 후에 자동으로 등록 해제 될 수 있습니다. 그러나 이 프로세스는 즉시 발생하지 않습니다. 이 시나리오에서 발생하는 상황은 다음과 같습니다.
- 일반 사용자는 클라이언트 앱을 설치 제거합니다.
- 앱 서버가 GCM 연결 서버에 메시지를 전송합니다.
- GCM 연결 서버가 기기의 GCM 클라이언트에게 메시지를 보냅니다.
- 기기의 GCM 클라이언트는 메시지를 수신하고 클라이언트 앱이 제거되었음을 감지합니다. 탐지 세부 정보는 클라이언트 앱이 실행되는 플랫폼에 따라 다릅니다.
- 기기의 GCM 클라이언트는 GCM 연결 서버에 클라이언트 앱이 제거되었음을 알립니다.
- GCM 연결 서버는 등록 토큰에 삭제를 표시합니다.
- 앱 서버가 GCM에 메시지를 전송합니다.
- GCM이 앱 서버에
NotRegistered모류 메시지를 반환합니다. - 앱 서버는 등록 토큰을 삭제해야 합니다.
등록 토큰이 GCM에서 완전히 제거되는 데 시간이 걸릴 수 있습니다. 따라서 위의 7 단계에서 보낸 메시지는 메시지가 클라이언트 앱에 전달되지 않은 경우에도 유효한 메시지 ID를 응답으로 받을 수 있습니다. 결국 등록 토큰이 삭제되고 서버는 앱 서버에서 추가 작업 없이 NotRegistered 오류를 받습니다.