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