실시간 개발자 알림 참조 가이드

이 문서에서는 Google Play에서 받을 수 있는 실시간 개발자 알림의 유형을 나열하고 설명합니다.

인코딩

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

{
  "message": {
    "attributes": {
      "key": "value"
    },
    "data": "eyAidmVyc2lvbiI6IHN0cmluZywgInBhY2thZ2VOYW1lIjogc3RyaW5nLCAiZXZlbnRUaW1lTWlsbGlzIjogbG9uZywgIm9uZVRpbWVQcm9kdWN0Tm90aWZpY2F0aW9uIjogT25lVGltZVByb2R1Y3ROb3RpZmljYXRpb24sICJzdWJzY3JpcHRpb25Ob3RpZmljYXRpb24iOiBTdWJzY3JpcHRpb25Ob3RpZmljYXRpb24sICJ0ZXN0Tm90aWZpY2F0aW9uIjogVGVzdE5vdGlmaWNhdGlvbiB9",
    "messageId": "136969346945"
  },
  "subscription": "projects/myproject/subscriptions/mysubscription"
}

base64로 인코딩된 데이터 필드를 디코딩하면 DeveloperNotification에 다음 필드가 포함됩니다.

{
  "version": string,
  "packageName": string,
  "eventTimeMillis": long,
  "oneTimeProductNotification": OneTimeProductNotification,
  "subscriptionNotification": SubscriptionNotification,
  "voidedPurchaseNotification": VoidedPurchaseNotification,
  "pendingRefundReviewNotification": PendingRefundReviewNotification,
  "testNotification": TestNotification
}

이러한 필드는 다음 표에 설명되어 있습니다.

속성 이름 설명
version 문자열 이 알림의 버전입니다. 초기 버전은 '1.0'입니다. 이 버전은 다른 버전 필드와 다릅니다.
packageName 문자열 이 알림과 관련된 애플리케이션의 패키지 이름(예: 'com.some.thing')입니다.
eventTimeMillis long 에포크 이후 이벤트가 발생한 타임스탬프(밀리초)입니다.
subscriptionNotification SubscriptionNotification

이 필드가 있다면 이 알림은 정기 결제와 관련이 있으며 이 필드에는 정기 결제와 관련된 추가 정보가 포함됩니다.

이 필드는 pendingRefundReviewNotification, oneTimeProductNotification, voidedPurchaseNotification, testNotification과 상호 배타적입니다.

oneTimeProductNotification OneTimeProductNotification

이 필드가 있다면 이 알림은 일회성 구매와 관련이 있으며 이 필드에는 구매와 관련된 추가 정보가 포함됩니다.

이 필드는 pendingRefundReviewNotification, subscriptionNotification, voidedPurchaseNotification, testNotification과 상호 배타적입니다.

voidedPurchaseNotification VoidedPurchaseNotification

이 필드가 있는 경우 이 알림은 무효화된 구매와 관련이 있으며, 이 필드에는 무효화된 구매와 관련된 추가 정보가 포함됩니다.

이 필드는 pendingRefundReviewNotification, oneTimeProductNotification, subscriptionNotification, testNotification과 상호 배타적입니다.

pendingRefundReviewNotification PendingRefundReviewNotification

이 필드가 있으면 이 알림은 해결 방법을 제안할 수 있는 지불 거절 요청과 관련이 있습니다. `ReviewRefund` API를 호출하여 이 알림에 응답합니다.

이 필드는 subscriptionNotification, oneTimeProductNotification, voidedPurchaseNotification, testNotification과 상호 배타적입니다.

testNotification TestNotification

이 필드가 있다면 이 알림은 테스트 게시와 관련이 있습니다. 그리고 Google Play Console을 통해서만 전송됩니다.

이 필드는 pendingRefundReviewNotification, oneTimeProductNotification, subscriptionNotification, voidedPurchaseNotification과 상호 배타적입니다.

SubscriptionNotification

SubscriptionNotification에는 다음 필드가 포함됩니다.

{
  "version": string,
  "notificationType": int,
  "purchaseToken": string
}
속성 이름 설명
version 문자열 이 알림의 버전입니다. 초기 버전은 '1.0'입니다. 이 버전은 다른 버전 필드와 다릅니다.
notificationType int 정기 결제의 notificationType은 다음 값을 가질 수 있습니다.
  • (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: 구독이 만료되었습니다.
  • (17) SUBSCRIPTION_ITEMS_CHANGED: 정기 결제 번들의 항목이 변경되었습니다.
  • (18) SUBSCRIPTION_CANCELLATION_SCHEDULED - 약정 기간이 종료될 때 적용되도록 할부 정기 결제 취소가 예약되었습니다.
  • (19) SUBSCRIPTION_PRICE_CHANGE_UPDATED - 정기 결제 항목의 가격 변경 세부정보가 업데이트되었습니다.
  • (20) SUBSCRIPTION_PENDING_PURCHASE_CANCELED: 정기 결제의 대기 중인 거래가 취소되었습니다.
  • (22) SUBSCRIPTION_PRICE_STEP_UP_CONSENT_UPDATED: 정기 결제의 가격 인상 동의 기간이 시작되었거나 사용자가 가격 인상에 동의했습니다. 이 RTDN은 가격 단계 상승이 필요한 지역의 정기 결제에 대해서만 전송됩니다.
purchaseToken 문자열 정기 결제가 구매되었을 때 사용자 기기에 제공된 토큰입니다.

다음은 새 정기 결제 구매 알림의 예입니다.

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

OneTimeProductNotification

OneTimeProductNotification에는 다음 필드가 포함됩니다.

{
  "version": string,
  "notificationType": int,
  "purchaseToken": string,
  "sku": string
}
속성 이름 설명
version 문자열 이 알림의 버전입니다. 초기 버전은 '1.0'입니다. 이 버전은 다른 버전 필드와 다릅니다.
notificationType int 알림의 유형으로, 다음 값이 포함될 수 있습니다.
  • (1) ONE_TIME_PRODUCT_PURCHASED - 사용자가 일회성 제품을 성공적으로 구매했습니다.
  • (2) ONE_TIME_PRODUCT_CANCELED - 사용자가 대기 중인 일회성 제품 구매를 취소했습니다.
purchaseToken 문자열 구매가 이루어졌을 때 사용자 기기에 제공된 토큰입니다.
SKU 문자열 구매된 일회성 제품 ID(예: 'sword_001')입니다.

다음은 새로운 일회성 구매 알림의 예입니다.

{
  "version":"1.0",
  "packageName":"com.some.thing",
  "eventTimeMillis":"1503349566168",
  "oneTimeProductNotification":
  {
    "version":"1.0",
    "notificationType":1,
    "purchaseToken":"PURCHASE_TOKEN",
    "sku":"my.sku"
  }
}

VoidedPurchaseNotification

VoidedPurchaseNotification에는 다음 필드가 포함됩니다.

속성 이름 설명

purchaseToken

string

무효화된 구매와 관련된 토큰입니다. 이 정보는 신규 구매가 발생할 때 개발자에게 제공됩니다.

orderId

string

무효화된 거래와 연결된 고유 주문 ID입니다. 일회성 구매의 경우 구매에 대해 생성된 유일한 주문 ID를 나타냅니다. 자동 갱신 정기 결제의 경우 갱신 거래마다 새 주문 ID가 생성됩니다.

productType

int

무효화된 구매의 productType은 다음 값을 보유할 수 있습니다.

  • (1) PRODUCT_TYPE_SUBSCRIPTION - 정기 결제 구매가 무효화되었습니다.
  • (2) PRODUCT_TYPE_ONE_TIME - 일회성 구매가 무효화되었습니다.

refundType

int

무효화된 구매의 refundType은 다음 값을 보유할 수 있습니다.

  • (1) REFUND_TYPE_FULL_REFUND - 구매가 완전히 무효화되었습니다.
  • (2) REFUND_TYPE_QUANTITY_BASED_PARTIAL_REFUND - 다중 수량 구매에만 적용되는 수량 기반 부분 환불로 구매가 부분적으로 무효화되었습니다. 구매는 여러 번 부분적으로 무효화될 수 있습니다.

수량이 여러 개인 구매의 남은 총 수량이 환불되면 refundTypeREFUND_TYPE_FULL_REFUND가 됩니다.

다음은 새로운 무효화된 구매 알림의 예입니다.

{
  "version":"1.0",
  "packageName":"com.some.app",
  "eventTimeMillis":"1503349566168",
  "voidedPurchaseNotification":
  {
    "purchaseToken":"PURCHASE_TOKEN",
    "orderId":"GS.0000-0000-0000",
    "productType":1
    "refundType":1
  }
}

VoidedPurchaseNotification 사용

RTDN 클라이언트가 VoidedPurchaseNotification을 수신하면 다음 정보를 확인하세요.

  • packageName: 앱을 식별합니다.
  • eventTimeMillis: 상태 변경이 발생한 시간을 알려줍니다.
  • purchaseToken: 제품이 구매되었을 때 사용자 기기에 제공된 토큰입니다.
  • orderId: 무효화된 거래와 관련된 주문을 식별합니다.
  • productType: 무효화된 구매가 인앱 구매인지 정기 결제인지를 나타냅니다.
  • refundType: 구매를 무효화한 환불 유형을 지정합니다.

PendingRefundReviewNotification

사용자가 구매에 대한 지급 거절을 요청하고 요청에 개발자 검토가 필요한 경우 PendingRefundReviewNotification가 전송됩니다. 이 알림을 받으면 요청을 평가하고 ReviewRefund API를 호출하여 24시간 이내에 환불 제안 및 구매 사용 증빙 자료를 제공해야 합니다.

PendingRefundReviewNotification에는 다음 필드가 포함됩니다.

{
  "version": string,
  "pendingRefundToken": string,
  "orderId": string,
  "refundReason": int,
  "obfuscatedAccountId": string,
  "obfuscatedProfileId": string
}
속성 이름 설명
version 문자열 이 알림의 버전입니다. 초기 버전은 '1.0'입니다. 이 버전은 다른 버전 필드와 다릅니다.
pendingRefundToken 문자열 검토 중인 대기 중인 환불 요청을 식별하는 고유 토큰입니다. ReviewRefund API를 호출할 때 이 토큰을 전달합니다.
orderId 문자열 환불 검토가 대기 중인 구매의 주문 ID입니다.
refundReason int 환불 요청 사유입니다. 대기 중인 검토는 환불 이유로 CHARGEBACK (7)만 지원합니다. 코드는 새로운 이유가 제공되면 이를 처리해야 합니다.
obfuscatedAccountId 문자열 (해당하는 경우) 구매 시 제공된 난독화된 개발자 지정 사용자 계정 ID입니다.
obfuscatedProfileId 문자열 (해당하는 경우) 구매 시 제공된 난독화된 개발자 지정 프로필 ID입니다.

다음은 환불 검토 대기 중 알림의 예입니다.

{
  "version":"1.0",
  "packageName":"com.some.thing",
  "eventTimeMillis":"1503350156918",
  "pendingRefundReviewNotification":
  {
    "version":"1.0",
    "pendingRefundToken":"example-token",
    "orderId":"GPA.1234-5678-9012-34567",
    "refundReason":7,
    "obfuscatedAccountId":"user-account-id",
    "obfuscatedProfileId":"user-profile-id"
  }
}

TestNotification

TestNotification에는 다음 필드가 포함됩니다.

{
  "version": string
}
속성 이름 설명
version 문자열 이 알림의 버전입니다. 초기 버전은 '1.0'입니다. 이 버전은 다른 버전 필드와 다릅니다.

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

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