В этом документе перечислены и описаны типы уведомлений для разработчиков в режиме реального времени, которые можно получать от 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
}
В таблице ниже представлены описания полей.
| Название ресурса | Значение | Описание |
|---|---|---|
| версия | строка | Версия уведомления. Изначально это значение равно 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 | Если это поле присутствует, значит уведомление связано с запросом на возврат платежа, по которому вы можете предложить решение. Ответьте на это уведомление, вызвав API ReviewRefund. Обратите внимание, что это поле является взаимоисключающим с полями subscriptionNotification, oneTimeProductNotification, voidedPurchaseNotification и testNotification. |
| testNotification | TestNotification | Если это поле присутствует, значит уведомление связано с тестовой публикацией. Они отправляются только через Google Play Console. Обратите внимание, что это поле является взаимоисключающим с полями pendingRefundReviewNotification, oneTimeProductNotification, subscriptionNotification и voidedPurchaseNotification. |
SubscriptionNotification
Объект SubscriptionNotification содержит следующие поля:
{
"version": string,
"notificationType": int,
"purchaseToken": string
}
| Название ресурса | Значение | Описание |
|---|---|---|
| версия | строка | Версия уведомления. Изначально это значение равно 1.0. Это поле отличается от других полей, связанных с версиями. |
| notificationType | ПРХВ | Параметр notificationType для подписки может принимать следующие значения:
|
| 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
}
| Название ресурса | Значение | Описание |
|---|---|---|
| версия | строка | Версия уведомления. Сначала это будет "1.0". Это поле отличается от других полей, связанных с версиями. |
| notificationType | ПРХВ | Тип уведомления. Возможные значения:
|
| purchaseToken | строка | Токен, предоставленный устройству пользователя при совершении покупки. |
| sku | строка | Идентификатор контента для однократных покупок (например, "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 содержит следующие поля:
| Название ресурса | Значение | Описание |
|---|---|---|
|
|
Токен, связанный с покупкой, которая была отменена. Эта информация предоставляется разработчику при каждой новой покупке. |
|
|
Уникальный идентификатор заказа, связанный с транзакцией, которая была отменена. Для разовых покупок это единственный идентификатор заказа, сгенерированный для покупки. Для подписок с автоматическим продлением при каждой транзакции продления создается новый идентификатор заказа. |
|
|
Код
|
|
|
Код
Примечание: при возврате оставшегося общего количества товаров из заказа с несколькими позициями значение |
Пример
Вот пример уведомления об аннулировании покупки:
{
"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 отправляется, когда пользователь запрашивает чарджбэк за покупку и запрос требует проверки разработчиком. Получив уведомление, вы должны оценить запрос и в течение 24 часов предоставить предложение о возврате средств и доказательство использования покупки, вызвав API ReviewRefund.
Объект PendingRefundReviewNotification содержит следующие поля:
{
"version": string,
"pendingRefundToken": string,
"orderId": string,
"refundReason": int,
"obfuscatedAccountId": string,
"obfuscatedProfileId": string
}
| Название ресурса | Значение | Описание |
|---|---|---|
| версия | строка | Версия уведомления. Изначально это значение равно 1.0. Эта версия отличается от других полей версии. |
| pendingRefundToken | строка | Уникальный токен, который идентифицирует запрос на возврат средств, находящийся на рассмотрении. Передайте этот токен при вызове ReviewRefund API. |
| orderId | строка | Идентификатор заказа на покупку, для которой ожидается проверка возврата средств. |
| refundReason | ПРХВ | Причину запроса на возврат средств. Для запросов на возврат, ожидающих рассмотрения, можно указать только одну причину – CHARGEBACK (7). Ваш код должен обрабатывать новые причины, когда они становятся доступны. |
| obfuscatedAccountId | строка | (Если применимо) Обфусцированный идентификатор аккаунта пользователя, указанный разработчиком при совершении покупки. |
| obfuscatedProfileId | строка | (Если применимо) Обфусцированный идентификатор профиля, указанный разработчиком при совершении покупки. |
Пример
Вот пример уведомления о том, что возврат средств ожидает проверки:
{
"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
}
| Название ресурса | Значение | Описание |
|---|---|---|
| версия | строка | Версия уведомления. Изначально это значение равно 1.0. Это поле отличается от других полей, связанных с версиями. |
Пример
Вот пример тестового уведомления:
{
"version":"1.0",
"packageName":"com.some.thing",
"eventTimeMillis":"1503350156918",
"testNotification":
{
"version":"1.0"
}
}