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

В этой статье перечислены и описаны типы уведомлений для разработчиков в режиме реального времени, которые вы можете получать от 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 Developer 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 – начался период согласия на повышение цены подписки или пользователь дал согласие на повышение цены. Это уведомление RTDN отправляется только для подписок в регионах, где требуется поэтапное повышение цены.
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"
  }
}