실시간 개발자 알림 추가

개요

Google Play 결제에서는 Play에서 관리하는 구독 항목과 관련된 상태 변화를 모니터링할 수 있는 서버 푸시 알림을 제공합니다. 실시간 개발자 알림을 사용 설정하면 기존 구독에 업데이트가 있을 때마다 Cloud Pub/Sub에서 직접 구매 토큰이 전송됩니다.

실시간 개발자 알림은 사용자에게 현재 구독 콘텐츠에 액세스할 자격이 있는지와 같은 구독 상태에 관한 전체 정보를 제공하지 않습니다. 토큰을 받으면 항상 구매 토큰을 사용해 Google Play 개발자 API에 쿼리하여 전체 정보를 가져와서 사용자의 현재 자격 상태로 백엔드를 업데이트해야 합니다.

알림 유형은 향후 변경될 수 있습니다. 알 수 없는 알림 유형을 처리할 수 있어야 하며 중요한 비즈니스 로직에 항상 Google Play 개발자 API를 사용해야 합니다.

이 기능을 사용 설정하려면 다음 단계를 따르세요.

  1. 나만의 GCP(Google Cloud Platform) 프로젝트를 사용해 Cloud Pub/Sub를 설정합니다.
  2. Android 앱에 실시간 개발자 알림을 사용 설정합니다.

Cloud Pub/Sub 설정

Cloud Pub/Sub는 독립적인 애플리케이션 간에 메시지를 주고받을 수 있도록 하는 완전 관리형 실시간 메시지 서비스로, Google Cloud Platform 및 외부에 호스팅된 시스템을 빠르게 통합할 수 있게 하며 지연 시간이 낮고 지속적인 메시지를 제공합니다.

Google Play 결제에서는 Cloud Pub/Sub를 사용해 구독 주제에 푸시 알림을 게시합니다.

사전 준비 설정

Cloud Pub/Sub를 사용하려면 Cloud Pub/Sub API가 사용 설정된 GCP(Google Cloud Platform)에 프로젝트가 있어야 합니다. GCP와 Cloud Pub/Sub를 잘 모르는 경우 빠른 시작 가이드를 참조하세요.

푸시 알림을 받으려면 주제에 전송된 메시지를 사용할 수 있는 보안 백엔드 서버를 만들어야 합니다. 서버는 Cloud Pub/Sub 클라이언트 라이브러리의 라이브러리를 사용해 메시지를 사용할 수 있습니다.

주제 만들기

알림 수신을 시작하려면 Google Play 결제에서 알림을 게시할 주제를 만들어야 합니다. 주제를 만들려면 다음 단계를 따르세요.

  1. 주제 만들기의 안내를 읽어봅니다.
  2. Google Cloud Platform Console을 사용해 주제를 만듭니다.

Pub/Sub 구독 만들기

주제에 게시된 메시지를 받으려면 관련 주제에 관한 Pub/Sub 구독을 만들어야 합니다. Pub/Sub 구독을 만들려면 다음 단계를 따르세요.

  1. Cloud Pub/Sub 구독자 가이드를 읽고 구독을 푸시 구독으로 구성할지 또는 풀 구독으로 구성할지 결정합니다. 풀 구독을 사용하려면 보안 백엔드 서버에서 Cloud Pub/Sub 서버에 메시지 가져오기 요청을 시작해야 합니다. 푸시 구독을 사용하려면 Cloud Pub/Sub에서 보안 백엔드 서버에 메시지 전달 요청을 시작해야 합니다.
  2. 구독 추가의 안내를 읽어봅니다.
  3. Google Cloud Platform Console을 사용해 구독을 만듭니다.

주제에 게시 권한 부여

Cloud Pub/Sub를 사용하려면 다음 단계에 따라 주제에 알림을 게시할 권한을 Google Play 결제에 부여해야 합니다.

  1. Google Cloud Console을 엽니다.
  2. 프로젝트를 선택한 다음 왼쪽 탐색에서 게시/구독을 클릭합니다.
  3. 주제를 찾은 다음 권한 세부정보를 엽니다.
    그림 1. 주제 권한 구성에 액세스
  4. 서비스 계정 google-play-developer-notifications@system.gserviceaccount.com을 추가한 다음 Pub/Sub 게시자 역할을 부여합니다.
    그림 2. Google Play 서비스 계정을 Pub/Sub 게시자로 추가
  5. 저장하여 주제 설정을 완료합니다.
    그림 3. 주제 구성 완료

앱에 실시간 개발자 알림 사용 설정

앱에 실시간 개발자 알림을 사용 설정하려면 다음 단계를 따르세요.

  1. Google Play Console을 엽니다.
  2. Android 앱을 선택합니다.
  3. 개발 도구 > 서비스 및 API 페이지로 이동합니다.
  4. 페이지 하단의 실시간 개발자 알림 섹션으로 스크롤합니다.

    그림 4. 실시간 개발자 알림 섹션

  5. 주제 이름 입력란에 이전에 구성한 전체 Cloud Pub/Sub 주제 이름을 입력합니다. 주제 이름의 형식은 projects/{project_id}/topics/{topic_name}이어야 합니다. 여기에서 project_id는 프로젝트의 고유 식별자이고 topic_name은 이전에 만든 주제의 이름입니다.

  6. 테스트 메시지 보내기를 클릭하여 테스트 메시지를 보냅니다. 테스트 게시를 실행하면 모두 올바로 설정되고 구성되었는지 확인할 수 있습니다. 테스트 게시에 성공하면 테스트 게시에 성공했다는 메시지가 표시됩니다. 이 주제와 관련하여 테스트를 실행 중인 구독자가 있는 경우 이 테스트 메시지를 받아야 합니다.

    게시에 실패하면 오류가 표시됩니다. 주제 이름이 올바르고 google-play-developer-notifications@system.gserviceaccount.com 서비스 계정에 주제에 Pub/Sub 게시자 액세스 권한이 있는지 확인하세요.

  7. 주제 업데이트를 클릭합니다.

주제 이름 변경

메시지를 삭제하지 않고 주제 이름을 변경하려면 다음 단계를 따르세요.

  1. 새로운 주제와 구독을 만들고 구성합니다.
  2. 새 주제에 게시된 메시지를 읽고 처리하기 시작합니다.
  3. Play Console에서 해당 앱의 주제 이름을 업데이트합니다.
  4. Stackdriver 또는 Cloud 개발자 콘솔을 사용하여 새 주제가 메시지를 수신하는지 확인하면서 이전 주제가 메시지 수신을 중지할 때까지 기다립니다.
  5. 메시지 수신이 중지된 후 이전 주제를 삭제합니다.

주제 삭제

주제를 삭제하려면 다음 단계를 따르세요.

  1. Google Play Console을 사용해 앱의 주제 이름을 삭제합니다.
  2. 메시지 도착이 중지되면 Google 또는 Google Cloud Platform Console을 사용하여 Pub/Sub 주제를 삭제합니다.

참고: 이름을 삭제하기 전에 Pub/Sub에서 주제를 삭제하면 메시지가 삭제될 수 있습니다. 이 문제를 해결하려면 Pub/Sub를 사용해 주제를 다시 설정해야 합니다.

알림 처리 확장

Pub/Sub 주제에 전송될 수 있는 알림은 다양하므로 모든 알림을 하나의 바이너리로 처리하는 것은 현실적이지 않을 수 있습니다. 알림 처리를 확장하는 방법을 결정할 때 조사할 수 있는 옵션은 다음과 같이 다양합니다.

  • 푸시 및 풀 스타일 알림 사용
  • 하나의 주제에 여러 구독 설정
  • 다른 게시/구독 프로젝트에 알림 메시지 다시 게시

예를 들어 단일 구독에 그 구독에서 메시지를 가져오는 프로세스가 여러 개 있을 수 있습니다. 이러한 구독에서 가져온 메시지는 독자 간에 자동으로 구분됩니다. 그런 다음 각 프로세스에서 알림을 처리하거나 더 특화된 서비스로 요청을 라우팅할 수 있습니다.

시간 경과에 따라 새 알림 유형이 추가될 수 있습니다. 구독자는 새 알림이 표시되는 경우 대개 수신된 메시지를 확인하여 알림을 유연하게 처리할 준비가 되어야 합니다.

참고: 푸시 구독을 사용하려면 푸시 엔드포인트를 추가하기 전에 엔드포인트를 등록하세요. 자세한 내용은 엔드포인트 등록을 참조하세요.

자세한 내용은 게시/구독 구독자 개요를 참조하세요.

알림 트래픽 모니터링

알림 트래픽을 모니터링하려면 Google Stackdriver 서비스를 사용하세요. 이 서비스를 사용하면 주제의 트래픽을 모니터링하고 특정 조건에 관한 알림을 설정할 수 있습니다. 예를 들어 수신 확인이 되지 않은 메시지 수가 너무 많거나(구독자에 문제가 있음을 나타낼 수 있음) 게시 수가 너무 적은 경우(주제 게시에 문제가 있음을 나타낼 수 있음) 이를 알릴 수 있습니다.

가격 및 할당량 결정

가격 및 할당량에 관한 자세한 내용은 가격할당량을 참조하세요.

데이터 사용량 예측

구독 알림에서 데이터 부분은 요청당 약 1KB의 데이터입니다. 각 게시와 가져오기에 별도의 요청 또는 알림당 약 2KB의 데이터가 필요합니다. 매월 알림 수는 결제 주기와 사용자의 행동에 따라 다릅니다. 결제 주기 동안 사용자당 알림이 하나 이상인 것으로 예상해야 합니다.

SLA

실시간 개발자 알림 서비스는 공식 지연 시간 SLA를 제공하지 않습니다. 하지만 대부분의 알림이 이벤트 발생 후 몇 초 내에 게시되어야 합니다. Stackdriver 페이지에서 수신 확인되지 않은 메시지 수와 같은 사용량 통계를 모니터링하여 모든 메시지를 시기적절하게 처리하고 있는지 확인해야 합니다.

JSON 사양

Pub/Sub 주제에 관한 각 게시는 다음 필드와 함께 하나의 base64로 인코딩된 DeveloperNotification이 포함되어 있습니다.

{
  "version": string,
  "packageName": string
  "eventTimeMillis": long
  "subscriptionNotification": SubscriptionNotification
  "testNotification": TestNotification
}
속성 이름 설명
version string 이 알림의 버전으로, 처음에는 '1.0'입니다. 이 버전은 다른 버전 필드와 다릅니다.
packageName string 이 알림과 관련된 애플리케이션의 패키지 이름(예: com.some.thing)입니다.
eventTimeMillis long 이벤트가 발생한 타임스탬프(Epoch 기준 시간(1970년 1월 1일) 이후 밀리초 단위)입니다.
subscriptionNotification SubscriptionNotification 이 필드가 있으면 알림이 구독과 관련이 있으며, 구독과 관련된 추가 정보가 포함되어 있습니다. 이 필드는 testNotification과 상호 배타적입니다.
testNotification TestNotification 이 필드가 있으면 알림이 테스트 게시와 관련이 있으며, Play 개발자 콘솔을 통해서만 전송됩니다. 이 필드는 subscriptionNotification과 상호 배타적입니다.

SubscriptionNotification에는 다음 필드가 포함되어 있습니다.

{
  "version": string
  "notificationType": int
  "purchaseToken": string
  "subscriptionId": string
}
속성 이름 설명
version string 이 알림의 버전으로, 처음에는 '1.0'입니다. 이 버전은 다른 버전 필드와 다릅니다.
notificationType int

알림의 유형으로, 다음 값이 포함될 수 있습니다.

  • (1) SUBSCRIPTION_RECOVERED: 계정 보류에서 구독이 복구되었습니다.
  • (2) SUBSCRIPTION_RENEWED: 활성 구독이 갱신되었습니다.
  • (3) SUBSCRIPTION_CANCELED: 구독이 자발적으로 또는 비자발적으로 취소되었습니다. 자발적으로 취소된 경우 사용자가 취소하면 전송됩니다.
  • (4) SUBSCRIPTION_PURCHASED: 새로운 구독을 구매했습니다.
  • (5) SUBSCRIPTION_ON_HOLD: 구독이 계정 보류 상태가 되었습니다(사용 설정된 경우).
  • (6) SUBSCRIPTION_IN_GRACE_PERIOD: 구독 유예 기간이 시작되었습니다(사용 설정된 경우).
  • (7) SUBSCRIPTION_RESTARTED: 사용자가 Play > 계정 > 구독에서 구독을 다시 활성화했습니다(구독 복원을 선택해야 함).
  • (8) SUBSCRIPTION_PRICE_CHANGE_CONFIRMED: 사용자가 구독 가격 변경을 확인했습니다.
  • (9) SUBSCRIPTION_DEFERRED: 구독 갱신 기한이 연장되었습니다.
  • (10) SUBSCRIPTION_PAUSED - 구독이 일시중지되었습니다.
  • (11) SUBSCRIPTION_PAUSE_SCHEDULE_CHANGED - 구독 일시중지 일정이 변경되었습니다.
  • (12) SUBSCRIPTION_REVOKED: 구독이 만료 시간 전에 사용자에 의해 취소되었습니다.
  • (13) SUBSCRIPTION_EXPIRED: 구독이 만료되었습니다.
purchaseToken string 구독을 구매했을 때 사용자 기기에 제공된 토큰입니다.
subscriptionId string 구매 구독 ID(예: ‘monthly001’)입니다.

참고: 사용자 자격을 변경해야 하는 이벤트인 경우에만 알림이 전송됩니다. 예를 들어 refund API는 사용자 자격을 변경하지 않으므로 알림이 트리거되지 않습니다.

TestNotification에는 다음 필드가 포함되어 있습니다.

{
  "version": string
}
속성 이름 설명
version string 이 알림의 버전으로, 처음에는 '1.0'입니다. 이 버전은 다른 버전 필드와 다릅니다.

다음은 구독 구매 관련 알림의 예입니다.

{
  "version":"1.0",
  "packageName":"com.some.thing",
  "eventTimeMillis":"1503349566168",
  "subscriptionNotification":
  {
    "version":"1.0",
    "notificationType":4,
    "purchaseToken":"PURCHASE_TOKEN",
    "subscriptionId":"my.sku"
  }
}

다음은 테스트 알림의 예입니다.

{
  "version":"1.0",
  "packageName":"com.some.thing",
  "eventTimeMillis":"1503350156918",
  "testNotification":
  {
    "version":"1.0"
  }
}