В этом документе перечислены и описаны типы уведомлений разработчиков в режиме реального времени, которые вы можете получать от 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,
  "testNotification": TestNotification
}
Эти поля описаны в следующей таблице.
| Имя объекта недвижимости | Ценить | Описание | 
| версия | нить | Версия этого уведомления. Изначально это «1.0». Эта версия отличается от других полей версии. | 
| packageName | нить | Имя пакета приложения, к которому относится это уведомление (например, `com.some.thing`). | 
| eventTimeMillis | длинный | Метка времени, когда произошло событие, в миллисекундах с начала эпохи. | 
| подпискаУведомление | Уведомление о подписке | Если это поле присутствует, то уведомление связано с подпиской, и оно содержит дополнительную информацию, связанную с подпиской. Обратите внимание, что это поле является взаимоисключающим с oneTimeProductNotification, voidedPurchaseNotification и testNotification. | 
| oneTimeProductNotification | OneTimeProductNotification | Если это поле присутствует, то уведомление относится к разовой покупке, и оно содержит дополнительную информацию, связанную с покупкой. Обратите внимание, что это поле является взаимоисключающим с subscriptionNotification, voidedPurchaseNotification и testNotification. | 
| Уведомление о недействительной покупке | Уведомление об аннулировании покупки | Если это поле присутствует, то уведомление связано с аннулированной покупкой, и оно содержит дополнительную информацию, связанную с аннулированной покупкой. Обратите внимание, что это поле является взаимоисключающим с oneTimeProductNotification, subscriptionNotification и testNotification. | 
| testNotification | TestNotification | Если это поле присутствует, то уведомление связано с тестовой публикацией. Такие уведомления отправляются только через консоль разработчика Google Play. Обратите внимание, что это поле является взаимоисключающим с oneTimeProductNotification, subscriptionNotification и voidedPurchaseNotification. | 
Уведомление о подписке
 SubscriptionNotification содержит следующие поля:
{
  "version": string,
  "notificationType": int,
  "purchaseToken": string
}
| Имя объекта недвижимости | Ценить | Описание | 
| версия | нить | Версия этого уведомления. Изначально это «1.0». Эта версия отличается от других полей версии. | 
| Тип уведомления | инт | Тип уведомления для подписки может иметь следующие значения: 
 | 
| покупкаТокена | нить | Токен, предоставленный устройству пользователя при покупке подписки. | 
Пример
Вот пример уведомления о новой покупке подписки:
{
  "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». Эта версия отличается от других полей версии. | 
| Тип уведомления | инт | Тип уведомления. Может иметь следующие значения: 
 | 
| покупкаТокена | нить | Токен, предоставленный устройству пользователя при совершении покупки. | 
| артикул | нить | Идентификатор приобретенного одноразового продукта (например, «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
  }
}
Использование уведомления об аннулированной покупке
 Когда ваш клиент RTDN получает уведомление VoidedPurchaseNotification , обратите внимание на следующую информацию:
-  packageName: идентифицирует приложение.
-  eventTimeMillis: информирует вас о времени изменения статуса.
-  purchaseToken: токен, предоставленный устройству пользователя при покупке продукта.
-  orderId: идентифицирует заказ, связанный с аннулированной транзакцией.
-  productType: Указывает, была ли аннулированная покупка покупкой в приложении или подпиской.
-  refundType: Указывает тип возврата, который аннулировал покупку.
TestNotification
 TestNotification содержит следующие поля:
{
  "version": string
}
| Имя объекта недвижимости | Ценить | Описание | 
| версия | нить | Версия этого уведомления. Изначально это «1.0». Эта версия отличается от других полей версии. | 
Пример
Вот пример тестового уведомления:
{
  "version":"1.0",
  "packageName":"com.some.thing",
  "eventTimeMillis":"1503350156918",
  "testNotification":
  {
    "version":"1.0"
  }
}
