Справочное руководство по уведомлениям для разработчиков в режиме реального времени

В этом документе перечислены и описаны типы уведомлений для разработчиков в режиме реального времени, которые можно получать от 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 для подписки может принимать следующие значения:
  • 1. SUBSCRIPTION_RECOVERED – подписка восстановлена после временной блокировки аккаунта или приостановки.
  • 2. SUBSCRIPTION_RENEWED – активная подписка была продлена.
  • 3. SUBSCRIPTION_CANCELED – подписка была отменена пользователем или принудительно. При добровольной отмене отправляется, когда пользователь отменяет подписку.
  • 4 – SUBSCRIPTION_PURCHASED – приобретена новая подписка.
  • 5 – SUBSCRIPTION_ON_HOLD – подписка приостановлена (если эта функция включена).
  • 6. SUBSCRIPTION_IN_GRACE_PERIOD – для подписки начался льготный период (если он включен).
  • 7. SUBSCRIPTION_RESTARTED – пользователь восстановил подписку в Google Play > Аккаунт > Подписки. Подписка была отменена, но срок ее действия ещё не истек, когда пользователь восстановил ее. Подробнее о том, как восстановить подписку до истечения срока ее действия…
  • 8. SUBSCRIPTION_PRICE_CHANGE_CONFIRMED (УСТАРЕЛОЕ) – пользователь подтвердил изменение цены подписки.
  • 9. SUBSCRIPTION_DEFERRED – время продления подписки было увеличено.
  • 10 – SUBSCRIPTION_PAUSED – подписка приостановлена.
  • 11 – SUBSCRIPTION_PAUSE_SCHEDULE_CHANGED – расписание приостановки подписки было изменено.
  • 12 – SUBSCRIPTION_REVOKED. Подписка была отозвана у пользователя до истечения срока ее действия.
  • 13 – SUBSCRIPTION_EXPIRED (Срок действия подписки истек).
  • 17 – SUBSCRIPTION_ITEMS_CHANGED. Изменен объект в пакете подписки.
  • 18 – SUBSCRIPTION_CANCELLATION_SCHEDULED. Отмена подписки с рассрочкой платежа запланирована на конец периода обязательств.
  • 19. SUBSCRIPTION_PRICE_CHANGE_UPDATED – сведения об изменении цены на подписку обновлены.
  • 20 – SUBSCRIPTION_PENDING_PURCHASE_CANCELED – транзакция подписки, ожидающая подтверждения, отменена.
  • 22. SUBSCRIPTION_PRICE_STEP_UP_CONSENT_UPDATED – начался период согласия на повышение цены подписки или пользователь дал согласие на повышение цены. Это уведомление отправляется только для подписок в регионах, где требуется повышение цены.
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 ПРХВ Тип уведомления. Возможные значения:
  • 1. ONE_TIME_PRODUCT_PURCHASED – пользователь успешно купил контент, оплачиваемый однократно.
  • 2. ONE_TIME_PRODUCT_CANCELED – пользователь отменил запланированную покупку контента, оплачиваемого однократно.
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 содержит следующие поля:

Название ресурса Значение Описание

purchaseToken

string

Токен, связанный с покупкой, которая была отменена. Эта информация предоставляется разработчику при каждой новой покупке.

orderId

string

Уникальный идентификатор заказа, связанный с транзакцией, которая была отменена. Для разовых покупок это единственный идентификатор заказа, сгенерированный для покупки. Для подписок с автоматическим продлением при каждой транзакции продления создается новый идентификатор заказа.

productType

int

Код productType для отмененной покупки может иметь следующие значения:

  • 1. PRODUCT_TYPE_SUBSCRIPTION – покупка подписки была аннулирована.
  • 2. PRODUCT_TYPE_ONE_TIME – разовая покупка была аннулирована.

refundType

int

Код refundType для отмененной покупки может иметь следующие значения:

  • 1. REFUND_TYPE_FULL_REFUND – покупка полностью отменена.
  • 2. REFUND_TYPE_QUANTITY_BASED_PARTIAL_REFUND – покупка частично отменена в результате частичного возврата средств на основе количества товаров (применимо только к покупкам нескольких товаров). Покупку можно частично аннулировать несколько раз.

Примечание: при возврате оставшегося общего количества товаров из заказа с несколькими позициями значение refundType будет REFUND_TYPE_FULL_REFUND.

Пример

Вот пример уведомления об аннулировании покупки:

{
  "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"
  }
}