노블의 개발이야기

[Android] Google Cloud Messaging (GCM): Registering Client Apps 본문

Android

[Android] Google Cloud Messaging (GCM): Registering Client Apps

더플러스 2018. 4. 17. 01:22

메시지를 보내고 받을 수 있는지 확인하려면 클라이언트 앱이 GCM에 등록해야합니다. 이 프로세스에서 클라이언트는 고유한 등록 토큰을 가져와서 서버로 전달합니다. 서버는 토큰을 저장하고 클라이언트 앱에 받았다는 통지를 다시 보냅니다. 이 프로세스에서 교환되는 등록 토큰은 앱 서버가 특정 클라이언트에 메시지를 보내는 데 사용하는 클라이언트 앱 인스턴스 식별자와 같은 것입니다.

GCM에 등록하려면 다음 단계를 따르세요

  1. 클라이언트 앱은 Instance ID API를 사용하여 등록 토큰을 얻습니다. 이 API를 호출할 때 인증된 엔티티를 앱 서버의 Sender ID로 설정하고 Scope를 GCM에 대한 적절한 값(플랫폼에 따라 다름)으로 설정해야 합니다.
  2. 클라이언트 앱은 등록 토큰을 앱 서버로 전달합니다.
  3. 앱 서버는 등록 토큰을 저장하고 프로세스가 성공적으로 완료되었음을 클라이언트 앱에 알려줍니다.

앱 서버가 등록 핸드 셰이크의 일부를 완료하지 못하면 클라이언트 앱은 등록 토큰을 서버로 다시 보내거나 등록 토큰을 삭제해야 합니다.

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 (제거 된 클라이언트 앱 등록 해제 작동 방식)

클라이언트 앱은 설치 제거 후에 자동으로 등록 해제 될 수 있습니다. 그러나 이 프로세스는 즉시 발생하지 않습니다. 이 시나리오에서 발생하는 상황은 다음과 같습니다.

  1. 일반 사용자는 클라이언트 앱을 설치 제거합니다.
  2. 앱 서버가 GCM 연결 서버에 메시지를 전송합니다.
  3. GCM 연결 서버가 기기의 GCM 클라이언트에게 메시지를 보냅니다.
  4. 기기의 GCM 클라이언트는 메시지를 수신하고 클라이언트 앱이 제거되었음을 감지합니다. 탐지 세부 정보는 클라이언트 앱이 실행되는 플랫폼에 따라 다릅니다.
  5. 기기의 GCM 클라이언트는 GCM 연결 서버에 클라이언트 앱이 제거되었음을 알립니다.
  6. GCM 연결 서버는 등록 토큰에 삭제를 표시합니다.
  7. 앱 서버가 GCM에 메시지를 전송합니다.
  8. GCM이 앱 서버에 NotRegistered 모류 메시지를 반환합니다.
  9. 앱 서버는 등록 토큰을 삭제해야 합니다.

등록 토큰이 GCM에서 완전히 제거되는 데 시간이 걸릴 수 있습니다. 따라서 위의 7 단계에서 보낸 메시지는 메시지가 클라이언트 앱에 전달되지 않은 경우에도 유효한 메시지 ID를 응답으로 받을 수 있습니다. 결국 등록 토큰이 삭제되고 서버는 앱 서버에서 추가 작업 없이 NotRegistered 오류를 받습니다.

참고 사이트

Comments