This document lists and describes the types of Real-time developer notifications that you can receive from Google Play.
Encoding
Each publish made to a Cloud Pub/Sub topic contains a single base64-encoded data field.
{
  "message": {
    "attributes": {
      "key": "value"
    },
    "data": "eyAidmVyc2lvbiI6IHN0cmluZywgInBhY2thZ2VOYW1lIjogc3RyaW5nLCAiZXZlbnRUaW1lTWlsbGlzIjogbG9uZywgIm9uZVRpbWVQcm9kdWN0Tm90aWZpY2F0aW9uIjogT25lVGltZVByb2R1Y3ROb3RpZmljYXRpb24sICJzdWJzY3JpcHRpb25Ob3RpZmljYXRpb24iOiBTdWJzY3JpcHRpb25Ob3RpZmljYXRpb24sICJ0ZXN0Tm90aWZpY2F0aW9uIjogVGVzdE5vdGlmaWNhdGlvbiB9",
    "messageId": "136969346945"
  },
  "subscription": "projects/myproject/subscriptions/mysubscription"
}
After you decode the base64-encoded data field, the DeveloperNotification
contains the following fields:
{
  "version": string,
  "packageName": string,
  "eventTimeMillis": long,
  "oneTimeProductNotification": OneTimeProductNotification,
  "subscriptionNotification": SubscriptionNotification,
  "voidedPurchaseNotification": VoidedPurchaseNotification,
  "testNotification": TestNotification
}
These fields are described in the following table.
| Property name | Value | Description | 
| version | string | The version of this notification. Initially, this is "1.0". This version is distinct from other version fields. | 
| packageName | string | The package name of the application that this notification relates to (for example, `com.some.thing`). | 
| eventTimeMillis | long | The timestamp when the event occurred, in milliseconds since the Epoch. | 
| subscriptionNotification | SubscriptionNotification | If this field is present, then this notification is related to a subscription, and this field contains additional information related to the subscription. Note that this field is mutually exclusive with oneTimeProductNotification, voidedPurchaseNotification, and testNotification. | 
| oneTimeProductNotification | OneTimeProductNotification | If this field is present, then this notification is related to a one-time purchase, and this field contains additional information related to the purchase. Note that this field is mutually exclusive with subscriptionNotification, voidedPurchaseNotification, and testNotification. | 
| voidedPurchaseNotification | VoidedPurchaseNotification | If this field is present, then this notification is related to a voided purchase, and this field contains additional information related to the voided purchase. Note that this field is mutually exclusive with oneTimeProductNotification, subscriptionNotification, and testNotification. | 
| testNotification | TestNotification | If this field is present, then this notification is related to a test publish. These are sent only through the Google Play Developer Console. Note that this field is mutually exclusive with oneTimeProductNotification, subscriptionNotification, and voidedPurchaseNotification. | 
SubscriptionNotification
A SubscriptionNotification contains the following fields:
{
  "version": string,
  "notificationType": int,
  "purchaseToken": string
}
| Property name | Value | Description | 
| version | string | The version of this notification. Initially, this is "1.0". This version is distinct from other version fields. | 
| notificationType | int | The notificationType for a subscription can have the following values: 
 | 
| purchaseToken | string | The token provided to the user's device when the subscription was purchased. | 
Example
Here's an example of a notification for a new subscription purchase:
{
  "version":"1.0",
  "packageName":"com.some.thing",
  "eventTimeMillis":"1503349566168",
  "subscriptionNotification":
  {
    "version":"1.0",
    "notificationType":4,
    "purchaseToken":"PURCHASE_TOKEN"
  }
}
OneTimeProductNotification
A OneTimeProductNotification contains the following fields:
{
  "version": string,
  "notificationType": int,
  "purchaseToken": string,
  "sku": string
}
| Property Name | Value | Description | 
| version | string | The version of this notification. Initially, this will be "1.0". This version is distinct from other version fields. | 
| notificationType | int | The type of notification. It can have the following values: 
 | 
| purchaseToken | string | The token provided to the user's device when purchase was made. | 
| sku | string | The purchased one-time product ID (for example, "sword_001") | 
Example
Here's an example of a notification for a new one-time purchase:
{
  "version":"1.0",
  "packageName":"com.some.thing",
  "eventTimeMillis":"1503349566168",
  "oneTimeProductNotification":
  {
    "version":"1.0",
    "notificationType":1,
    "purchaseToken":"PURCHASE_TOKEN",
    "sku":"my.sku"
  }
}
VoidedPurchaseNotification
A VoidedPurchaseNotification contains the following fields:
| Property Name | Value | Description | 
| 
 | 
 | The token associated with the purchase that has been voided. This information is provided to the developer when a new purchase occurs. | 
| 
 | 
 | The unique order ID associated with the transaction that has been voided. For one time purchases, this represents the only order ID generated for the purchase. For auto-renewing subscriptions, a new order ID is generated for each renewal transaction. | 
| 
 | 
 | The  
 | 
| 
 | 
 | The  
 Note when the remaining total quantity of a multi-quantity purchase is
      refunded, the  | 
Example
Here's an example of a notification for a new voided purchase:
{
  "version":"1.0",
  "packageName":"com.some.app",
  "eventTimeMillis":"1503349566168",
  "voidedPurchaseNotification":
  {
    "purchaseToken":"PURCHASE_TOKEN",
    "orderId":"GS.0000-0000-0000",
    "productType":1
    "refundType":1
  }
}
Consuming VoidedPurchaseNotification
When your RTDN client receives a VoidedPurchaseNotification, note the
following information:
- packageName: Identifies the app.
- eventTimeMillis: Informs you of the time the status change occurred.
- purchaseToken: The token provided to the user's device when the product was purchased.
- orderId: Identifies the order associated with the voided transaction.
- productType: Indicates if the voided purchase was an in-app purchase or a subscription.
- refundType: Specifies the type of refund that voided the purchase.
TestNotification
A TestNotification contains the following fields:
{
  "version": string
}
| Property name | Value | Description | 
| version | string | The version of this notification. Initially, this is "1.0". This version is distinct from other version fields. | 
Example
Here's an example of a test notification:
{
  "version":"1.0",
  "packageName":"com.some.thing",
  "eventTimeMillis":"1503350156918",
  "testNotification":
  {
    "version":"1.0"
  }
}
