This topic 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,
"subscriptionId": 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:
- (1) SUBSCRIPTION_RECOVERED - A subscription was recovered from
account hold.
- (2) SUBSCRIPTION_RENEWED - An active subscription was renewed.
- (3) SUBSCRIPTION_CANCELED - A subscription was either voluntarily
or involuntarily cancelled. For voluntary cancellation, sent when
the user cancels.
- (4) SUBSCRIPTION_PURCHASED - A new subscription was purchased.
- (5) SUBSCRIPTION_ON_HOLD - A subscription has entered account
hold (if enabled).
- (6) SUBSCRIPTION_IN_GRACE_PERIOD - A subscription has entered
grace period (if enabled).
- (7) SUBSCRIPTION_RESTARTED - User has restored their
subscription from
Play > Account > Subscriptions
. The
subscription was canceled but had not expired yet when the user
restores. For more information, see
Restorations
.
- (8) SUBSCRIPTION_PRICE_CHANGE_CONFIRMED - A subscription price
change has successfully been confirmed by the user.
- (9) SUBSCRIPTION_DEFERRED - A subscription's recurrence time has
been extended.
- (10) SUBSCRIPTION_PAUSED - A subscription has been paused.
- (11) SUBSCRIPTION_PAUSE_SCHEDULE_CHANGED - A subscription pause
schedule has been changed.
- (12) SUBSCRIPTION_REVOKED - A subscription has been revoked from
the user before the expiration time.
- (13) SUBSCRIPTION_EXPIRED - A subscription has expired.
|
purchaseToken
|
string
|
The token provided to the user's device when the subscription was
purchased.
|
subscriptionId
|
string
|
The purchased subscription's product ID (for example,
"monthly001").
|
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",
"subscriptionId":"monthly001"
}
}
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:
- (1) ONE_TIME_PRODUCT_PURCHASED - A one-time product was
successfully purchased by a user.
- (2) ONE_TIME_PRODUCT_CANCELED - A pending one-time product
purchase has been canceled by the user.
|
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
|
purchaseToken
|
string
|
The token associated with the purchase that has been voided. This
information is provided to the developer when a new purchase
occurs.
|
orderId
|
string
|
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.
|
productType
|
int
|
The
productType
for a voided purchase
can have the following values:
- (1)
PRODUCT_TYPE_SUBSCRIPTION
- A subscription
purchase has been voided.
- (2)
PRODUCT_TYPE_ONE_TIME
- A one-time purchase
has been voided.
|
refundType
|
int
|
The
refundType
for a voided purchase
can have the following values:
- (1)
REFUND_TYPE_FULL_REFUND
- The purchase has been fully voided.
- (2)
REFUND_TYPE_QUANTITY_BASED_PARTIAL_REFUND
- The
purchase has been partially voided by a quantity-based partial refund,
applicable only to multi-quantity purchases. A purchase can be
partially voided multiple times.
Note when the remaining total quantity of a multi-quantity purchase is
refunded, the
refundType
will be
REFUND_TYPE_FULL_REFUND
.
|
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
: This identifies the app.
eventTimeMillis
: This informs the developer of the time the change in
status occurred.
purchaseToken
: The token provided to the user's device when the product
was purchased.
orderId
: This identifies the order associated with the voided
transaction.
productType
: This tells you if the voided purchase was an in-app
purchase or a subscription.
refundType
: This tells you the type of refund that voided the purchase.
If all you need to do for entitlement adjustments is locate the right purchase
and order, then you have all the information you need at this point. To learn
how to get additional information about the voided purchase, check out the
Google Play Voided Purchases API
,
which is a pull model that provides additional data for voided purchases
between a given timestamp.
For partially voided multi-quantity purchases, the
refundableQuantity
field
provided by
purchases.products
contains the remaining
number of purchased products that have not been voided.
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"
}
}