Руководство по изменениям в подписке на май 2022 г.,Руководство по изменениям в подписке на май 2022 г.,Руководство по изменениям в подписке на май 2022 г.,Руководство по изменениям в подписке на май 2022 г.

Биллинговая система Google Play – это сервис, который позволяет продавать цифровые продукты и контент в вашем приложении Android. В выпуске от мая 2022 года мы изменили определение продуктов по подписке, и это влияет на то, как они продаются в приложении и управляются на вашем сервере. Если вы выполняете интеграцию с Google Play Billing впервые, вы можете начать интеграцию, прочитав статью «Подготовка» .

Если вы продавали подписки с помощью Google Play Billing до мая 2022 года, важно понимать, как внедрить новые функции, сохранив при этом существующие подписки.

Первое, что нужно знать, — это то, что все ваши существующие подписки, приложения и серверные интеграции работают так же, как и до выпуска в мае 2022 года . Вам не нужно вносить какие-либо немедленные изменения, и вы можете адаптировать эти новые функции со временем. Каждая основная версия библиотеки Google Play Billing поддерживается в течение двух лет после выпуска. Существующие интеграции с API разработчика Google Play продолжают работать в прежнем режиме.

Вот обзор обновлений за май 2022 г.:

  • Новая консоль Google Play позволяет создавать подписки, базовые планы и предложения и управлять ими. Сюда входят как новые, так и перенесенные подписки.
  • API разработчика Play содержит обновления для поддержки новых функций пользовательского интерфейса консоли Google Play в форме API. Примечательно, что появилась новая версия API для покупок подписки . Используйте этот API для проверки статуса подписки и управления покупками подписки.
  • Новая версия 5 библиотеки платежей Play позволяет вашему приложению использовать все новые функции подписки. Когда вы будете готовы выполнить обновление до версии 5, следуйте инструкциям в руководстве по миграции .

Конфигурация подписок

Управление подписками через Google Play Console

С мая 2022 года вы заметите некоторые изменения в консоли Google Play.

Одна подписка теперь может иметь несколько базовых планов и предложений. Ранее созданные SKU подписки теперь отображаются в Play Console как новые объекты подписки, базового плана и предложения. Если вы еще этого не сделали, ознакомьтесь с описанием новых объектов, включая их функциональность и конфигурацию, в разделе «Недавние изменения в подписках в Play Console» . Все ваши существующие продукты по подписке появятся в консоли Google Play в этом новом формате. Каждый номер SKU теперь представлен объектом подписки, который содержит один базовый план и обратно совместимое предложение, если применимо.

Поскольку более старые версии интеграции предполагали, что каждая подписка будет включать одно предложение, представленное объектом SkuDetails , каждая подписка может иметь один обратно совместимый базовый план или предложение. Базовый план или предложение с обратной совместимостью возвращается как часть SKU для приложений, использующих устаревший метод querySkuDetailsAsync() . Дополнительные сведения о настройке предложений с обратной совместимостью и управлении ими см. в разделе Общие сведения о подписках. Когда ваше приложение использует только queryProductDetailsAsync() и более старые версии вашего приложения все еще совершают покупки, вам больше не нужно использовать предложение с обратной совместимостью. .

Управление подписками через API публикации подписок

API разработчика Play содержит новые функции для покупки подписки. API inappproducts для управления номерами SKU продолжает работать, как и раньше, включая обработку продуктов и подписок, приобретаемых единоразово, поэтому вам не нужно вносить какие-либо немедленные изменения для поддержания интеграции.

Однако важно отметить, что консоль Google Play использует только новые объекты подписки. Как только вы начнете редактировать свои подписки в консоли, API inappproducts больше нельзя будет использовать для подписок .

Если вы использовали API публикации до мая 2022 года, во избежание каких-либо проблем все существующие подписки теперь отображаются в консоли Google Play только для чтения. Если вы попытаетесь внести изменения, вы можете получить предупреждение, объясняющее это ограничение. Перед дальнейшим редактированием подписок в консоли вам следует обновить интеграцию с серверной частью, чтобы использовать новые конечные точки публикации подписок. Новые конечные точки monetization.subscriptions , monetization.subscriptions.baseplans и monetization.subscriptions.offers позволяют вам управлять всеми доступными базовыми планами и предложениями. В следующей таблице вы можете увидеть, как различные поля сущности InAppProduct сопоставляются с новыми объектами в разделе monetization.subscriptions :

InAppProduct Подписка
packageName packageName
sku productId
status basePlans[0].state
prices basePlans[0].regionalConfigs.price
listings списки
defaultPrice Нет эквивалентности
subscriptionPeriod basePlans[0].autoRenewingBasePlanType.billingPeriodDuration
trialPeriod basePlans[0].offers[0].phase[0].regionalConfigs[0].free
gracePeriod basePlans[0].autoRenewingBasePlanType.gracePeriodDuration
subscriptionTaxesAndComplianceSettings настройки налога и соответствия

Это необходимое обновление API применимо только к API публикации (управление SKU).

Изменения в библиотеке платежей Play

Для поддержки постепенного перехода библиотека Play Billing Library включает в себя все методы и объекты, доступные в предыдущих версиях. Объекты и функции SkuDetails такие как querySkuDetailsAsync() все еще существуют, поэтому вы можете выполнить обновление для использования новых функций без необходимости немедленного обновления существующего кода подписок. Вы также можете контролировать, какие предложения доступны с помощью этих методов, отметив их как обратно совместимые.

Помимо сохранения устаревших методов, Play Billing Library 5 теперь включает новый объект ProductDetails и соответствующий метод queryProductDetailsAsync() для обработки новых сущностей и функций. Существующие продукты внутри приложения (разовые покупки и расходные материалы) теперь также поддерживаются ProductDetails .

Для подписки ProductDetails.getSubscriptionOfferDetails() возвращает список всех базовых планов и предложений, которые пользователь имеет право приобрести. Это означает, что вы можете получить доступ ко всем базовым планам и предложениям, доступным для пользователя, независимо от обратной совместимости. getSubscriptionOfferDetails() возвращает null для продуктов без подписки. Для разовых покупок вы можете использовать getOneTimePurchaseOfferDetails() .

Play Billing Library 5 также включает в себя как новые, так и устаревшие методы запуска процесса покупки. Если объект BillingFlowParams переданный в BillingClient.launchBillingFlow() , настроен с использованием объекта SkuDetails , система извлекает информацию о предложении для продажи из обратно совместимого базового плана или предложения, соответствующего SKU. Если объект BillingFlowParams , переданный в BillingClient.launchBillingFlow() , настроен с использованием объектов ProductDetailsParams , которые включают ProductDetails и String , представляющую конкретный токен предложения для приобретаемого предложения, система затем использует эту информацию для идентификации продукта, приобретаемого пользователем.

queryPurchasesAsync() возвращает все покупки, принадлежащие пользователю. Чтобы указать запрошенный тип продукта, вы можете передать значение BillingClient.SkuType , как в более старых версиях, или объект QueryPurchasesParams , содержащий значение BillingClient.ProductType , представляющее новые сущности подписки.

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

Управление статусом подписки

В этом разделе описаны основные изменения в серверных компонентах интеграции биллинговой системы Google Play, которые необходимо реализовать для перехода на версию 5.

Уведомления разработчиков в режиме реального времени

Вскоре объект SubscriptionNotification больше не будет содержать subscribeId . Если вы используете это поле для идентификации продукта подписки, вам следует обновить его, чтобы получить эту информацию из статуса подписки, используя purchases.subscriptionv2:get после получения уведомления. Каждый элемент SubscriptionPurchaseLineItem в коллекции lineItems , возвращаемый как часть статуса покупки, будет включать соответствующий ProductId .

API покупок подписок: получение статуса подписки

В предыдущих версиях API покупок подписок вы могли запросить статус подписки с помощью purchases.subscriptions:get . Эта конечная точка не изменилась и продолжает работать при покупках подписки с обратной совместимостью. Эта конечная точка не поддерживает новые функции, выпущенные в мае 2022 г.

В новой версии API покупок подписок используйте purchases.subscriptionsv2:get , чтобы получить статус покупки подписки. Этот API совместим с перенесенными подписками, новыми подписками (как с предоплатой, так и с автоматическим продлением), а также с покупками всех типов. Вы можете использовать эту конечную точку для проверки статуса подписки при получении уведомлений. Возвращенный объект SubscriptionPurchaseV2 содержит новые поля, но по-прежнему включает устаревшие данные, необходимые для продолжения поддержки существующих подписок.

Поля SubscriptionPurchaseV2 для предоплаченных планов

Были добавлены новые поля для поддержки предоплаченных планов, которые продлеваются пользователем вместо автоматического продления. Все поля применяются к планам с предоплатой так же, как и к подпискам с автоматическим продлением, за следующими исключениями:

  • [Новое поле] lineItems[0].prepaid_plan.allowExtendAfterTime : обозначает, когда пользователю будет разрешено купить еще одно пополнение для продления своего предоплаченного плана, поскольку пользователю разрешено иметь только одно неизрасходованное пополнение одновременно.
  • [Новое поле] SubscriptionState : указывает состояние объекта подписки. Для предоплаченных планов это значение всегда имеет значение ACTIVE , PENDING или CANCELED .
  • lineItems[0].expiryTime : это поле всегда присутствует для планов с предоплатой.
  • пауза_state_context : это поле никогда не присутствует, поскольку планы с предоплатой не могут быть приостановлены.
  • lineItems[0].auto_renewing_plan : отсутствует для планов с предоплатой.
  • canceled_state_context : отсутствует для планов с предоплатой, поскольку это поле применяется только к пользователям, которые активно отменяют подписку.
  • lineItems[0].productId : это поле заменяет subscriptionId из предыдущих версий.

Поля SubscriptionPurchaseV2 для повторяющихся подписок

purchases.subscriptionv2 содержит новые поля, предоставляющие более подробную информацию о новых объектах подписки. В следующей таблице показано, как поля из конечной точки устаревшей подписки сопоставляются с соответствующими полями в purchases.subscriptionv2 .

ПодпискаПокупка ПодпискаПокупкаV2
countryCode regionCode
orderId latestOrderId
(нет эквивалентного поля) lineItems (список SubscriptionPurchaseLineItem ), представляющий продукты, приобретенные при покупке.
(нет эквивалентного поля) lineItems.offerDetails.basePlanId
(нет эквивалентного поля) lineItems.offerDetails.offerId
(нет эквивалентного поля) lineItems.offerDetails.offerTags
startTimeMillis startTime
expiryTimeMillis lineItems.expiryTime (каждая подписка, приобретенная при покупке, имеет свое expiryTime )
(нет эквивалентного поля) subscriptionState (указывает состояние подписки )
(нет эквивалентного поля) pausedStateContext (присутствует только в том случае, если статус подписки SUBSCRIPTION_STATE_PAUSED )
autoResumeTimeMillis pausedStateContext.autoResumeTime
(нет эквивалентного поля) canceledStateContext (присутствует только в том случае, если статус подписки — SUBSCRIPTION_STATE_CANCELED )
(нет эквивалентного поля) testPurchase (присутствует только при покупке лицензированных тестеров)
autoRenewing lineItems.autoRenewingPlan.autoRenewEnabled
priceCurrenceCode , priceAmountMicros , introductoryPriceInfo (нет эквивалентного поля)
Эту информацию можно найти в basePlan / offer для каждой приобретенной подписки.
разработчикПолезная нагрузка (нет эквивалентного поля) Полезная нагрузка разработчика устарела
состояние платежа (нет эквивалентного поля)
Вы можете определить состояние платежа из subscriptionState :
  • Ожидается оплата:
    • SUBSCRIPTION_STATE_PENDING (новые покупки с ожидающей транзакцией)
    • SUBSCRIPTION_STATE_IN_GRACE_PERIOD
    • SUBSCRIPTION_STATE_ON_HOLD
  • Оплата получена:
    • SUBSCRIPTION_STATE_ACTIVE
  • Бесплатная пробная версия:
    • (нет эквивалентного поля)
  • Отложенное обновление/понижение:
    • SUBSCRIPTION_STATE_PENDING
cancelReason , userCancellationTimeMillis , cancelSurveyResult canceledStateContext
linkedPurchaseToken linkedPurchaseToken (без изменений)
purchaseType Тест: через testPurchase
Продвижение: (нет эквивалентного поля); вскоре
priceChange lineItems.autoRenewingPlan.priceChangeDetails
profileName , emailAddress , givenName , familyName , profileId subscribeWithGoogleInfo
acknowledgementState acknowledgementState (no change)
promotionType , promotionCode (нет эквивалентного поля); вскоре
externalAccountId , obfuscatedExternalAccountId , obfuscatedExteranlProfileId externalAccountIdentifiers

Другие функции управления подпиской

Хотя purchases.subscriptions:get был обновлен до purchases.subscriptionsv2:get , остальные функции управления подписками разработчика на данный момент остаются неизменными в конечной точке purchases.subscriptions , поэтому вы можете продолжать использовать purchases.subscriptions:acknowledge , purchases.subscriptions:cancel , purchases.subscriptions:defer , purchases.subscriptions:refund и purchases.subscriptions:revoke , как вы это делали раньше.

API ценообразования

Используйте конечную точку monetization.convertRegionPrices для расчета региональных цен, как если бы вы это делали через Play Console. Этот метод принимает единую цену в любой валюте, поддерживаемой Play, и возвращает конвертированные цены (включая ставку налога по умолчанию, где это применимо) для всех регионов, где Google Play поддерживает покупки.

,

Биллинговая система Google Play – это сервис, который позволяет продавать цифровые продукты и контент в вашем приложении Android. В выпуске от мая 2022 года мы изменили определение продуктов по подписке, и это влияет на то, как они продаются в приложении и управляются на вашем сервере. Если вы выполняете интеграцию с Google Play Billing впервые, вы можете начать интеграцию, прочитав статью «Подготовка» .

Если вы продавали подписки с помощью Google Play Billing до мая 2022 года, важно понимать, как внедрить новые функции, сохранив при этом существующие подписки.

Первое, что нужно знать, — это то, что все ваши существующие подписки, приложения и серверные интеграции работают так же, как и до выпуска в мае 2022 года . Вам не нужно вносить какие-либо немедленные изменения, и вы можете адаптировать эти новые функции со временем. Каждая основная версия библиотеки Google Play Billing поддерживается в течение двух лет после выпуска. Существующие интеграции с API разработчика Google Play продолжают работать в прежнем режиме.

Вот обзор обновлений за май 2022 г.:

  • Новая консоль Google Play позволяет создавать подписки, базовые планы и предложения и управлять ими. Сюда входят как новые, так и перенесенные подписки.
  • API разработчика Play содержит обновления для поддержки новых функций пользовательского интерфейса консоли Google Play в форме API. Примечательно, что появилась новая версия API для покупок подписки . Используйте этот API для проверки статуса подписки и управления покупками подписки.
  • Новая версия 5 библиотеки платежей Play позволяет вашему приложению использовать все новые функции подписки. Когда вы будете готовы выполнить обновление до версии 5, следуйте инструкциям в руководстве по миграции .

Конфигурация подписок

Управление подписками через Google Play Console

С мая 2022 года вы заметите некоторые изменения в консоли Google Play.

Одна подписка теперь может иметь несколько базовых планов и предложений. Ранее созданные SKU подписки теперь отображаются в Play Console как новые объекты подписки, базового плана и предложения. Если вы еще этого не сделали, ознакомьтесь с описанием новых объектов, включая их функциональность и конфигурацию, в разделе «Недавние изменения в подписках в Play Console» . Все ваши существующие продукты по подписке появятся в консоли Google Play в этом новом формате. Каждый номер SKU теперь представлен объектом подписки, который содержит один базовый план и обратно совместимое предложение, если применимо.

Поскольку более старые версии интеграции предполагали, что каждая подписка будет включать одно предложение, представленное объектом SkuDetails , каждая подписка может иметь один обратно совместимый базовый план или предложение. Базовый план или предложение с обратной совместимостью возвращается как часть SKU для приложений, использующих устаревший метод querySkuDetailsAsync() . Дополнительные сведения о настройке предложений с обратной совместимостью и управлении ими см. в разделе Общие сведения о подписках. Когда ваше приложение использует только queryProductDetailsAsync() и более старые версии вашего приложения все еще совершают покупки, вам больше не нужно использовать предложение с обратной совместимостью. .

Управление подписками через API публикации подписок

API разработчика Play содержит новые функции для покупки подписки. API inappproducts для управления номерами SKU продолжает работать, как и раньше, включая обработку продуктов и подписок, приобретаемых единоразово, поэтому вам не нужно вносить какие-либо немедленные изменения для поддержания интеграции.

Однако важно отметить, что консоль Google Play использует только новые объекты подписки. Как только вы начнете редактировать свои подписки в консоли, API inappproducts больше нельзя будет использовать для подписок .

Если вы использовали API публикации до мая 2022 года, во избежание каких-либо проблем все существующие подписки теперь отображаются в консоли Google Play только для чтения. Если вы попытаетесь внести изменения, вы можете получить предупреждение, объясняющее это ограничение. Перед дальнейшим редактированием подписок в консоли вам следует обновить интеграцию с серверной частью, чтобы использовать новые конечные точки публикации подписок. Новые конечные точки monetization.subscriptions , monetization.subscriptions.baseplans и monetization.subscriptions.offers позволяют вам управлять всеми доступными базовыми планами и предложениями. В следующей таблице вы можете увидеть, как различные поля сущности InAppProduct сопоставляются с новыми объектами в разделе monetization.subscriptions :

InAppProduct Подписка
packageName packageName
sku productId
status basePlans[0].state
prices basePlans[0].regionalConfigs.price
listings списки
defaultPrice Нет эквивалентности
subscriptionPeriod basePlans[0].autoRenewingBasePlanType.billingPeriodDuration
trialPeriod basePlans[0].offers[0].phase[0].regionalConfigs[0].free
gracePeriod basePlans[0].autoRenewingBasePlanType.gracePeriodDuration
subscriptionTaxesAndComplianceSettings настройки налога и соответствия

Это необходимое обновление API применимо только к API публикации (управление SKU).

Изменения в библиотеке платежей Play

Для поддержки постепенного перехода библиотека Play Billing Library включает в себя все методы и объекты, доступные в предыдущих версиях. Объекты и функции SkuDetails такие как querySkuDetailsAsync() все еще существуют, поэтому вы можете выполнить обновление для использования новых функций без необходимости немедленного обновления существующего кода подписок. Вы также можете контролировать, какие предложения доступны с помощью этих методов, отметив их как обратно совместимые.

Помимо сохранения устаревших методов, Play Billing Library 5 теперь включает новый объект ProductDetails и соответствующий метод queryProductDetailsAsync() для обработки новых сущностей и функций. Существующие внутриигровые продукты (разовые покупки и расходные материалы) теперь также поддерживаются ProductDetails .

Для подписки ProductDetails.getSubscriptionOfferDetails() возвращает список всех базовых планов и предложений, которые пользователь имеет право приобрести. Это означает, что вы можете получить доступ ко всем базовым планам и предложениям, доступным для пользователя, независимо от обратной совместимости. getSubscriptionOfferDetails() возвращает null для продуктов без подписки. Для разовых покупок вы можете использовать getOneTimePurchaseOfferDetails() .

Play Billing Library 5 также включает в себя как новые, так и устаревшие методы запуска процесса покупки. Если объект BillingFlowParams переданный в BillingClient.launchBillingFlow() , настроен с использованием объекта SkuDetails , система извлекает информацию о предложении для продажи из обратно совместимого базового плана или предложения, соответствующего SKU. Если объект BillingFlowParams , переданный в BillingClient.launchBillingFlow() , настроен с использованием объектов ProductDetailsParams , которые включают ProductDetails и String , представляющую конкретный токен предложения для приобретаемого предложения, система затем использует эту информацию для идентификации продукта, приобретаемого пользователем.

queryPurchasesAsync() возвращает все покупки, принадлежащие пользователю. Чтобы указать запрошенный тип продукта, вы можете передать значение BillingClient.SkuType , как в более старых версиях, или объект QueryPurchasesParams , содержащий значение BillingClient.ProductType , представляющее новые сущности подписки.

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

Управление статусом подписки

В этом разделе описаны основные изменения в серверных компонентах интеграции биллинговой системы Google Play, которые необходимо реализовать для перехода на версию 5.

Уведомления разработчиков в режиме реального времени

Вскоре объект SubscriptionNotification больше не будет содержать subscribeId . Если вы используете это поле для идентификации продукта подписки, вам следует обновить его, чтобы получить эту информацию из статуса подписки, используя purchases.subscriptionv2:get после получения уведомления. Каждый элемент SubscriptionPurchaseLineItem в коллекции lineItems , возвращаемый как часть статуса покупки, будет включать соответствующий ProductId .

API покупок подписок: получение статуса подписки

В предыдущих версиях API покупок подписок вы могли запросить статус подписки с помощью purchases.subscriptions:get . Эта конечная точка не изменилась и продолжает работать при покупках подписки с обратной совместимостью. Эта конечная точка не поддерживает новые функции, выпущенные в мае 2022 г.

В новой версии API покупок подписок используйте purchases.subscriptionsv2:get , чтобы получить статус покупки подписки. Этот API совместим с перенесенными подписками, новыми подписками (как с предоплатой, так и с автоматическим продлением), а также с покупками всех типов. Вы можете использовать эту конечную точку для проверки статуса подписки при получении уведомлений. Возвращенный объект SubscriptionPurchaseV2 содержит новые поля, но по-прежнему включает устаревшие данные, необходимые для продолжения поддержки существующих подписок.

Поля SubscriptionPurchaseV2 для предоплаченных планов

Были добавлены новые поля для поддержки предоплаченных планов, которые продлеваются пользователем вместо автоматического продления. Все поля применяются к планам с предоплатой так же, как и к подпискам с автоматическим продлением, за следующими исключениями:

  • [Новое поле] lineItems[0].prepaid_plan.allowExtendAfterTime : обозначает, когда пользователю будет разрешено купить еще одно пополнение для продления своего предоплаченного плана, поскольку пользователю разрешено иметь только одно неизрасходованное пополнение одновременно.
  • [Новое поле] SubscriptionState : указывает состояние объекта подписки. Для предоплаченных планов это значение всегда имеет значение ACTIVE , PENDING или CANCELED .
  • lineItems[0].expiryTime : это поле всегда присутствует для планов с предоплатой.
  • пауза_state_context : это поле никогда не присутствует, поскольку планы с предоплатой не могут быть приостановлены.
  • lineItems[0].auto_renewing_plan : отсутствует для планов с предоплатой.
  • canceled_state_context : отсутствует для планов с предоплатой, поскольку это поле применяется только к пользователям, которые активно отменяют подписку.
  • lineItems[0].productId : это поле заменяет subscriptionId из предыдущих версий.

Поля SubscriptionPurchaseV2 для повторяющихся подписок

purchases.subscriptionv2 содержит новые поля, предоставляющие более подробную информацию о новых объектах подписки. В следующей таблице показано, как поля из конечной точки устаревшей подписки сопоставляются с соответствующими полями в purchases.subscriptionv2 .

ПодпискаПокупка ПодпискаПокупкаV2
countryCode regionCode
orderId latestOrderId
(нет эквивалентного поля) lineItems (список SubscriptionPurchaseLineItem ), представляющий продукты, приобретенные при покупке.
(нет эквивалентного поля) lineItems.offerDetails.basePlanId
(нет эквивалентного поля) lineItems.offerDetails.offerId
(нет эквивалентного поля) lineItems.offerDetails.offerTags
startTimeMillis startTime
expiryTimeMillis lineItems.expiryTime (каждая подписка, приобретенная при покупке, имеет свое expiryTime )
(нет эквивалентного поля) subscriptionState (указывает состояние подписки )
(нет эквивалентного поля) pausedStateContext (присутствует только в том случае, если статус подписки SUBSCRIPTION_STATE_PAUSED )
autoResumeTimeMillis pausedStateContext.autoResumeTime
(нет эквивалентного поля) canceledStateContext (присутствует только в том случае, если статус подписки SUBSCRIPTION_STATE_CANCELED )
(нет эквивалентного поля) testPurchase (присутствует только при покупке лицензированных тестеров)
autoRenewing lineItems.autoRenewingPlan.autoRenewEnabled
priceCurrenceCode , priceAmountMicros , introductoryPriceInfo (нет эквивалентного поля)
Эту информацию можно найти в basePlan / offer для каждой приобретенной подписки.
разработчикПолезная нагрузка (нет эквивалентного поля) Полезная нагрузка разработчика устарела
состояние платежа (нет эквивалентного поля)
Вы можете определить состояние платежа из subscriptionState :
  • Ожидается оплата:
    • SUBSCRIPTION_STATE_PENDING (новые покупки с ожидающей транзакцией)
    • SUBSCRIPTION_STATE_IN_GRACE_PERIOD
    • SUBSCRIPTION_STATE_ON_HOLD
  • Оплата получена:
    • SUBSCRIPTION_STATE_ACTIVE
  • Бесплатная пробная версия:
    • (нет эквивалентного поля)
  • Отложенное обновление/понижение:
    • SUBSCRIPTION_STATE_PENDING
cancelReason , userCancellationTimeMillis , cancelSurveyResult canceledStateContext
linkedPurchaseToken linkedPurchaseToken (без изменений)
purchaseType Тест: через testPurchase
Продвижение: (нет эквивалентного поля); вскоре
priceChange lineItems.autoRenewingPlan.priceChangeDetails
profileName , emailAddress , givenName , familyName , profileId subscribeWithGoogleInfo
acknowledgementState acknowledgementState (no change)
promotionType , promotionCode (нет эквивалентного поля); вскоре
externalAccountId , obfuscatedExternalAccountId , obfuscatedExteranlProfileId externalAccountIdentifiers

Другие функции управления подпиской

Хотя purchases.subscriptions:get был обновлен до purchases.subscriptionsv2:get , остальные функции управления подписками разработчика на данный момент остаются неизменными в конечной точке purchases.subscriptions , поэтому вы можете продолжать использовать purchases.subscriptions:acknowledge , purchases.subscriptions:cancel , purchases.subscriptions:defer , purchases.subscriptions:refund и purchases.subscriptions:revoke , как вы это делали раньше.

API ценообразования

Используйте конечную точку monetization.convertRegionPrices для расчета региональных цен, как если бы вы это делали через Play Console. Этот метод принимает единую цену в любой валюте, поддерживаемой Play, и возвращает конвертированные цены (включая ставку налога по умолчанию, где это применимо) для всех регионов, где Google Play поддерживает покупки.

,

Платежная система Google Play – это сервис, который позволяет продавать цифровые продукты и контент в вашем приложении Android. В выпуске от мая 2022 года мы изменили определение продуктов по подписке, и это влияет на то, как они продаются в приложении и управляются на вашем сервере. Если вы выполняете интеграцию с Google Play Billing впервые, вы можете начать интеграцию, прочитав статью «Подготовка» .

Если вы продавали подписки с помощью Google Play Billing до мая 2022 года, важно понимать, как внедрить новые функции, сохранив при этом существующие подписки.

Первое, что нужно знать, — это то, что все ваши существующие подписки, приложения и серверные интеграции работают так же, как и до выпуска в мае 2022 года . Вам не нужно вносить какие-либо немедленные изменения, и вы можете адаптировать эти новые функции со временем. Каждая основная версия библиотеки платежей Google Play поддерживается в течение двух лет после выпуска. Существующие интеграции с API разработчика Google Play продолжают работать в прежнем режиме.

Вот обзор обновлений за май 2022 г.:

  • Новая консоль Google Play позволяет создавать подписки, базовые планы и предложения и управлять ими. Сюда входят как новые, так и перенесенные подписки.
  • API разработчика Play содержит обновления для поддержки новых функций пользовательского интерфейса консоли Google Play в форме API. Примечательно, что появилась новая версия API для покупок подписки . Используйте этот API для проверки статуса подписки и управления покупками подписки.
  • Новая библиотека Play Billing Library версии 5 позволяет вашему приложению использовать все новые функции подписки. Когда вы будете готовы выполнить обновление до версии 5, следуйте инструкциям в руководстве по миграции .

Конфигурация подписок

Управление подписками через Google Play Console

С мая 2022 года вы заметите некоторые изменения в консоли Google Play.

Одна подписка теперь может иметь несколько базовых планов и предложений. Ранее созданные SKU подписки теперь отображаются в Play Console как новые объекты подписки, базового плана и предложения. Если вы еще этого не сделали, ознакомьтесь с описанием новых объектов, включая их функциональность и конфигурацию, в разделе «Недавние изменения в подписках в Play Console» . Все ваши существующие продукты по подписке появятся в консоли Google Play в этом новом формате. Каждый номер SKU теперь представлен объектом подписки, который содержит один базовый план и обратно совместимое предложение, если применимо.

Поскольку более старые версии интеграции предполагали, что каждая подписка будет включать одно предложение, представленное объектом SkuDetails , каждая подписка может иметь один обратно совместимый базовый план или предложение. Базовый план или предложение с обратной совместимостью возвращается как часть SKU для приложений, использующих устаревший метод querySkuDetailsAsync() . Дополнительные сведения о настройке предложений с обратной совместимостью и управлении ими см. в разделе Общие сведения о подписках. Когда ваше приложение использует только queryProductDetailsAsync() и более старые версии вашего приложения все еще совершают покупки, вам больше не нужно использовать предложение с обратной совместимостью. .

Управление подписками через API публикации подписок

API разработчика Play содержит новые функции для покупки подписки. API inappproducts для управления номерами SKU продолжает работать, как и раньше, включая обработку продуктов и подписок, приобретаемых единоразово, поэтому вам не нужно вносить какие-либо немедленные изменения для поддержания интеграции.

Однако важно отметить, что консоль Google Play использует только новые объекты подписки. Как только вы начнете редактировать свои подписки в консоли, API inappproducts больше нельзя будет использовать для подписок .

Если вы использовали API публикации до мая 2022 года, во избежание каких-либо проблем все существующие подписки теперь отображаются в консоли Google Play только для чтения. Если вы попытаетесь внести изменения, вы можете получить предупреждение, объясняющее это ограничение. Перед дальнейшим редактированием подписок в консоли вам следует обновить интеграцию с серверной частью, чтобы использовать новые конечные точки публикации подписок. Новые конечные точки monetization.subscriptions , monetization.subscriptions.baseplans и monetization.subscriptions.offers позволяют вам управлять всеми доступными базовыми планами и предложениями. В следующей таблице вы можете увидеть, как различные поля сущности InAppProduct сопоставляются с новыми объектами в разделе monetization.subscriptions :

InAppProduct Подписка
packageName packageName
sku productId
status basePlans[0].state
prices basePlans[0].regionalConfigs.price
listings списки
defaultPrice Нет эквивалентности
subscriptionPeriod basePlans[0].autoRenewingBasePlanType.billingPeriodDuration
trialPeriod basePlans[0].offers[0].phase[0].regionalConfigs[0].free
gracePeriod basePlans[0].autoRenewingBasePlanType.gracePeriodDuration
subscriptionTaxesAndComplianceSettings настройки налога и соответствия

Это необходимое обновление API применимо только к API публикации (управление SKU).

Изменения в библиотеке платежей Play

Для поддержки постепенного перехода библиотека Play Billing Library включает в себя все методы и объекты, доступные в предыдущих версиях. Объекты и функции SkuDetails такие как querySkuDetailsAsync() все еще существуют, поэтому вы можете выполнить обновление для использования новых функций без необходимости немедленного обновления существующего кода подписок. Вы также можете контролировать, какие предложения доступны с помощью этих методов, отметив их как обратно совместимые.

Помимо сохранения устаревших методов, Play Billing Library 5 теперь включает новый объект ProductDetails и соответствующий метод queryProductDetailsAsync() для обработки новых сущностей и функций. Существующие продукты внутри приложения (разовые покупки и расходные материалы) теперь также поддерживаются ProductDetails .

Для подписки ProductDetails.getSubscriptionOfferDetails() возвращает список всех базовых планов и предложений, которые пользователь имеет право приобрести. Это означает, что вы можете получить доступ ко всем базовым планам и предложениям, доступным для пользователя, независимо от обратной совместимости. getSubscriptionOfferDetails() возвращает null для продуктов без подписки. Для разовых покупок вы можете использовать getOneTimePurchaseOfferDetails() .

Play Billing Library 5 также включает в себя как новые, так и устаревшие методы запуска процесса покупки. Если объект BillingFlowParams переданный в BillingClient.launchBillingFlow() , настроен с использованием объекта SkuDetails , система извлекает информацию о предложении для продажи из обратно совместимого базового плана или предложения, соответствующего SKU. Если объект BillingFlowParams , переданный в BillingClient.launchBillingFlow() , настроен с использованием объектов ProductDetailsParams , которые включают ProductDetails и String , представляющую конкретный токен предложения для приобретаемого предложения, система затем использует эту информацию для идентификации продукта, приобретаемого пользователем.

queryPurchasesAsync() возвращает все покупки, принадлежащие пользователю. Чтобы указать запрашиваемый тип продукта, вы можете передать значение BillingClient.SkuType , как в более старых версиях, или объект QueryPurchasesParams , который содержит значение BillingClient.ProductType , которое представляет новые объекты подписки.

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

Управление статусом подписки

В этом разделе описываются первичные изменения в бэкэнд -компонентах интеграции системного платежного платежа Google Play, которые необходимо реализовать для миграции в версию 5.

Уведомления разработчиков в реальном времени

Вскоре объект SubscriptionNotification больше не будет содержать подписку . Если вы полагаетесь на это поле для идентификации продукта подписки, вам следует обновить, чтобы получить эту информацию из статуса подписки с помощью purchases.subscriptionv2:get как только получите уведомление. Каждый элемент SubscriptionPurchaseLineItem в коллекции LineItems , который возвращается как часть статуса покупки, будет включать соответствующий продукт .

Подписки о покупках API: получение статуса подписки

В предыдущих версиях API API покупки подписок вы можете запросить статус подписки с помощью purchases.subscriptions:get . Эта конечная точка неизменна и продолжает работать на обратно-совместимые покупки подписки. Эта конечная точка не поддерживает каких -либо новых функций, выпущенных в мае 2022 года.

В новой версии API API подписки на покупку используйте purchases.subscriptionsv2:get статус покупки подписки. Этот API совместим с мигрированными подписками, новыми подписками (как предоплаченными, так и автоматическими облегчениями) и закупками всех типов. Вы можете использовать эту конечную точку, чтобы проверить статус подписки при получении уведомлений. Возвращенный объект, SubscriptionPurchaseV2 , содержит новые поля, но он по -прежнему включает в себя устаревшие данные, которые необходимы для продолжения поддержки существующих подписок.

Поля подписки ProchaseV2 для планов предоплаты

Новые поля были добавлены для поддержки планов предоплаты, которые расширяются пользователем вместо автоматического обновления. Все поля применяются к планам предоплаты, как и для автопроизводных подписок, за следующими исключениями:

  • [Новое поле] LineItems [0] .prepaid_plan.AllowExtendAftertime : обозначает, когда пользователю будет разрешено покупать еще один пополнение, чтобы расширить свой план предоплаты, поскольку пользователю разрешается иметь только один бессосенный пополнение за раз.
  • [Новое поле] Подписка : указывает состояние объекта подписки. Для планов предоплаты эта стоимость всегда является либо ACTIVE , PENDING или CANCELED .
  • LineItems [0] .ExpiryTime : Это поле всегда присутствует для планов предоплаты.
  • PAUSED_STATE_CONTEXT : это поле никогда не присутствует, поскольку планы предоплаты не могут сделать паузу.
  • LineItems [0] .Auto_Renewing_Plan : не присутствует для планов предоплаты.
  • DENCELLED_STATE_CONTEXT : не присутствовать для планов предоплаты, так как это поле относится только к пользователям, которые активно отменяют подписку.
  • LineItems [0] .ProductId : это поле заменяет subscriptionId на предыдущие версии.

Поля подписки ProchseSasev2 для повторяющихся подписок

purchases.subscriptionv2 содержит новые поля, которые предоставляют более подробную информацию о новых объектах подписки. В следующей таблице показано, как поля от карты конечной точки устаревшего подписки до соответствующих полей в purchases.subscriptionv2 . Subscriptionv2.

Подписка Подписка purchasev2
countryCode regionCode
orderId latestOrderId
(без эквивалентного поля) lineItems (список подписки PurchaseLineitem ), который представляет продукты, приобретенные при покупке
(без эквивалентного поля) lineItems.offerDetails.basePlanId
(без эквивалентного поля) lineItems.offerDetails.offerId
(без эквивалентного поля) lineItems.offerDetails.offerTags
startTimeMillis startTime
expiryTimeMillis lineItems.expiryTime (каждая подписка, приобретенная при покупке, имеет свой собственный expiryTime )
(без эквивалентного поля) subscriptionState (указывает на состояние подписки )
(без эквивалентного поля) pausedStateContext (присутствует только в том случае, если статус подписки является SUBSCRIPTION_STATE_PAUSED )
autoResumeTimeMillis pausedStateContext.autoResumeTime
(без эквивалентного поля) canceledStateContext (присутствует только в том случае, если состояние подписки является SUBSCRIPTION_STATE_CANCELED )
(без эквивалентного поля) testPurchase (присутствует только в лицензированных покупках тестеров)
autoRenewing lineItems.autoRenewingPlan.autoRenewEnabled
priceCurrenceCode , priceAmountMicros , introductoryPriceInfo (без эквивалентного поля)
Эту информацию можно найти в basePlan / offer для каждой из приобретенных подписок.
DeveloperPayload (без эквивалентного поля) Полезная нагрузка разработчика устарела
Платеж (без эквивалентного поля)
Вы можете сделать вывод состояния оплаты из subscriptionState :
  • Оплата находится на рассмотрении:
    • SUBSCRIPTION_STATE_PENDING (новые покупки с ожидающей транзакцией)
    • SUBSCRIPTION_STATE_IN_GRACE_PERIOD
    • SUBSCRIPTION_STATE_ON_HOLD
  • Оплата была получена:
    • SUBSCRIPTION_STATE_ACTIVE
  • Бесплатная пробная версия:
    • (без эквивалентного поля)
  • Отсроченное обновление / понижение:
    • SUBSCRIPTION_STATE_PENDING
cancelReason , userCancellationTimeMillis , cancelSurveyResult canceledStateContext
linkedPurchaseToken linkedPurchaseToken (без изменений)
purchaseType Тест: через testPurchase
Продвижение: (без эквивалентного поля); вскоре
priceChange lineItems.autoRenewingPlan.priceChangeDetails
profileName , emailAddress , givenName , familyName , profileId subscribeWithGoogleInfo
acknowledgementState acknowledgementState (no change)
promotionType , promotionCode (без эквивалентного поля); вскоре
externalAccountId obfuscatedExteranlProfileId obfuscatedExternalAccountId externalAccountIdentifiers

Другие функции управления подпиской

В то время как purchases.subscriptions:get был обновлен до покупок. purchases.subscriptions:cancel purchases.subscriptionsv2:get , остальные функции управления подпиской разработчика остаются неизменными в purchases.subscriptions . purchases.subscriptions:acknowledge purchases.subscriptions:cancel , purchases.subscriptions:defer , purchases.subscriptions:refund и purchases.subscriptions:revoke , как вы делали раньше.

Ценообразование API

Используйте конечную точку monetization.convertRegionPrices для расчета региональных цен, как и на игровой консоли. Этот метод принимает единую цену в любой валюте, поддерживаемой игрой и доходности конвертированных цен (включая ставку налога по умолчанию, где это применимо) для всех регионов, где Google Play поддерживает покупки.

,

System Google Play Billing System - это услуга, которая позволяет вам продавать цифровые продукты и контент в вашем приложении Android. При выпуске в мае 2022 года мы изменили, как определяются подписные продукты, и это влияет на то, как они продаются в приложении и управляются на вашем бэкэнд. Если вы впервые интегрируете с Google Play Billing, вы можете начать свою интеграцию, прочитав подготовку .

Если вы продавали подписки с Google Play Billing до мая 2022 года, важно понять, как принять новые функции при сохранении существующих подписок.

Первое, что нужно знать, это то, что все ваши существующие подписки, приложения и бэкэнд интеграции функционируют так же, как и до выпуска мая 2022 года . Вам не нужно вносить какие -либо немедленные изменения, и вы можете принять эти новые функции с течением времени. Каждый крупный релиз библиотеки Google Play Billing поддерживается в течение двух лет после выпуска. Существующие интеграции с API разработчика Google Play продолжают функционировать, как и раньше.

Вот обзор обновлений в мае 2022 года:

  • Новая консоль Google Play позволяет вам создавать и управлять подписками, базовыми планами и предложениями. Это включает в себя как новые, так и мигрированные подписки.
  • API API Developer Play содержит обновления для поддержки новой функции пользовательского интерфейса Google Play Console в форме API. Примечательно, что есть новая версия API покупки подписки . Используйте этот API, чтобы проверить статус подписки и управление покупками подписки.
  • Новая библиотека Billing Billing Version 5 позволяет вашему приложению извлечь выгоду из всех новых функций подписки. Когда вы будете готовы перейти на версию 5, следуйте руководству в руководстве по миграции .

Конфигурация подписки

Управление подписками через Google Play Console

По состоянию на май 2022 года вы заметите некоторые различия в консоли Google Play.

Одна подписка теперь может иметь несколько базовых планов и предложений. Ранее созданная подписка Skus теперь появляется в консоли Play в качестве новой подписки, базового плана и предложения объектов. Если вы еще этого не сделали, см. Недавние изменения в подписке в Play Console для описания новых объектов, включая их функциональность и конфигурацию. Все ваши ранее существовавшие подписные продукты появляются в консоли Google Play в этом новом формате. Каждый SKU теперь представлен объектом подписки, который содержит один базовый план и обратно совместимое с предложением, если применимо.

Поскольку более старые интеграции ожидали, что каждая подписка включает в себя одно предложение, представленное объектом SkuDetails , каждая подписка может иметь единый обратный совместимый с базовым планом или предложение. Обратно-совместимый базовый план или предложение возвращается в рамках SKU для приложений, которые используют ныне погашенный метод querySkuDetailsAsync() . Для получения дополнительной информации о настройке и управлении предложениями, совместимыми с queryProductDetailsAsync() .

Управление подписками с помощью подписок публикации API

API Play Developer содержит новые функции для покупок подписки. API inappproducts для управления SKU продолжает работать, как и прежде, включая обработку единовременных продуктов покупки и подписки, поэтому вам не нужно вносить какие-либо немедленные изменения для поддержания вашей интеграции.

Тем не менее, важно отметить, что консоль Google Play использует только новые подписные объекты. После того, как вы начнете редактировать свои подписки в консоли, API inappproducts больше не может использоваться для подписок .

Если вы использовали Publishing API до мая 2022 года, чтобы избежать каких-либо проблем, любые существующие подписки теперь появляются как только для чтения в консоли Google Play. Если вы попытаетесь внести изменения, вы можете получить предупреждение, объясняющее это ограничение. Перед дальнейшим редактированием подписок в консоли вы должны обновить интеграцию бэкэнд, чтобы использовать новые конечные точки подписки. Новая monetization.subscriptions , monetization.subscriptions.baseplans и monetization.subscriptions.offers конечные точки позволяют управлять всеми доступными базовыми планами и предложениями. Вы можете увидеть, как различные поля отображаются из сущности InAppProduct в новые объекты в monetization.subscriptions в следующей таблице:

Inappproduct Подписка
packageName packageName
sku productId
status basePlans[0].state
prices Кейспул [0] .regionalConfigs.price
listings списки
defaultPrice Нет эквивалентности
subscriptionPeriod LASEPLANS [0] .AutorEnewingBaseplantype.billingPerioDdaturation
trialPeriod LASEPLANS [0] .OFFERS [0] .PHASES [0] .REGIONALCONFIGS [0] .FREE
gracePeriod Labeplans [0] .autorenewingbaseplantype.graceperiodduration
subscriptionTaxesAndComplianceSettings TAXANDCOMPLIANCESTTINGS

Это требовательное обновление API применяется только к API Publishing (SKU Management).

Играть в библиотеку библиотеки

Чтобы поддержать постепенную миграцию, библиотека выставления счетов Play включает в себя все методы и объекты, доступные в предыдущих версиях. Объекты и функции SkuDetails такие как querySkuDetailsAsync() все еще существуют, поэтому вы можете обновить новую функциональность без необходимости немедленно обновлять существующий код подписки. Вы также можете контролировать, какие предложения доступны с помощью этих методов, отметив их как обратно совместимые.

В дополнение к сохранению устаревших методов, Play Billing Library 5 теперь включает в себя новый объект ProductDetails и соответствующий метод queryProductDetailsAsync() для обработки новых объектов и функциональности. Существующие продукты в приложении (одноразовые покупки и расходные материалы) в настоящее время также поддерживаются ProductDetails .

Для подписки, ProductDetails.getSubscriptionOfferDetails() возвращает список всех базовых планов и предлагает, что пользователь имеет право на покупку. Это означает, что вы можете получить доступ к всем базовым планам и предлагает право на получение пользователя, независимо от обратной совместимости. getSubscriptionOfferDetails() возвращает null для не подписанных продуктов. Для единовременных покупок вы можете использовать getOneTimePurchaseOfferDetails() .

Play Billing Library 5 также включает в себя как новые, так и устаревшие методы для запуска потока покупки. Если объект BillingFlowParams переданный в BillingClient.launchBillingFlow() , настроен с использованием объекта SkuDetails , система извлекает информацию о предложении для продажи из обратно-совместимого базового плана или предложения, которое соответствует SKU. Если объект BillingFlowParams , переданный на BillingClient.launchBillingFlow() настроен с использованием объектов ProductDetailsParams , которые включают в себя ProductDetails и String , представляющую конкретный токен предложения для приобретенного предложения, система использует эту информацию для идентификации продукта, приобретаемого пользователем.

queryPurchasesAsync() возвращает все покупки, принадлежащие пользователю. Чтобы указать запрашиваемый тип продукта, вы можете передать значение BillingClient.SkuType , как в более старых версиях, или объект QueryPurchasesParams , который содержит значение BillingClient.ProductType , которое представляет новые объекты подписки.

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

Управление статусом подписки

В этом разделе описываются первичные изменения в бэкэнд -компонентах интеграции системного платежного платежа Google Play, которые необходимо реализовать для миграции в версию 5.

Уведомления разработчиков в реальном времени

Вскоре объект SubscriptionNotification больше не будет содержать подписку . Если вы полагаетесь на это поле для идентификации продукта подписки, вам следует обновить, чтобы получить эту информацию из статуса подписки с помощью purchases.subscriptionv2:get как только получите уведомление. Каждый элемент SubscriptionPurchaseLineItem в коллекции LineItems , который возвращается как часть статуса покупки, будет включать соответствующий продукт .

Подписки о покупках API: получение статуса подписки

В предыдущих версиях API API покупки подписок вы можете запросить статус подписки с помощью purchases.subscriptions:get . Эта конечная точка неизменна и продолжает работать на обратно-совместимые покупки подписки. Эта конечная точка не поддерживает каких -либо новых функций, выпущенных в мае 2022 года.

В новой версии API API подписки на покупку используйте purchases.subscriptionsv2:get статус покупки подписки. Этот API совместим с мигрированными подписками, новыми подписками (как предоплаченными, так и автоматическими облегчениями) и закупками всех типов. Вы можете использовать эту конечную точку, чтобы проверить статус подписки при получении уведомлений. Возвращенный объект, SubscriptionPurchaseV2 , содержит новые поля, но он по -прежнему включает в себя устаревшие данные, которые необходимы для продолжения поддержки существующих подписок.

Поля подписки ProchaseV2 для планов предоплаты

Новые поля были добавлены для поддержки планов предоплаты, которые расширяются пользователем вместо автоматического обновления. Все поля применяются к планам предоплаты, как и для автопроизводных подписок, за следующими исключениями:

  • [Новое поле] LineItems [0] .prepaid_plan.AllowExtendAftertime : обозначает, когда пользователю будет разрешено покупать еще один пополнение, чтобы расширить свой план предоплаты, поскольку пользователю разрешается иметь только один бессосенный пополнение за раз.
  • [Новое поле] Подписка : указывает состояние объекта подписки. Для планов предоплаты эта стоимость всегда является либо ACTIVE , PENDING или CANCELED .
  • LineItems [0] .ExpiryTime : Это поле всегда присутствует для планов предоплаты.
  • PAUSED_STATE_CONTEXT : это поле никогда не присутствует, поскольку планы предоплаты не могут сделать паузу.
  • LineItems [0] .Auto_Renewing_Plan : не присутствует для планов предоплаты.
  • DENCELLED_STATE_CONTEXT : не присутствовать для планов предоплаты, так как это поле относится только к пользователям, которые активно отменяют подписку.
  • LineItems [0] .ProductId : это поле заменяет subscriptionId на предыдущие версии.

Поля подписки ProchseSasev2 для повторяющихся подписок

purchases.subscriptionv2 содержит новые поля, которые предоставляют более подробную информацию о новых объектах подписки. В следующей таблице показано, как поля от карты конечной точки устаревшего подписки до соответствующих полей в purchases.subscriptionv2 . Subscriptionv2.

Подписка Подписка purchasev2
countryCode regionCode
orderId latestOrderId
(без эквивалентного поля) lineItems (список подписки PurchaseLineitem ), который представляет продукты, приобретенные при покупке
(без эквивалентного поля) lineItems.offerDetails.basePlanId
(без эквивалентного поля) lineItems.offerDetails.offerId
(без эквивалентного поля) lineItems.offerDetails.offerTags
startTimeMillis startTime
expiryTimeMillis lineItems.expiryTime (каждая подписка, приобретенная при покупке, имеет свой собственный expiryTime )
(без эквивалентного поля) subscriptionState (указывает на состояние подписки )
(без эквивалентного поля) pausedStateContext (присутствует только в том случае, если статус подписки является SUBSCRIPTION_STATE_PAUSED )
autoResumeTimeMillis pausedStateContext.autoResumeTime
(без эквивалентного поля) canceledStateContext (присутствует только в том случае, если состояние подписки является SUBSCRIPTION_STATE_CANCELED )
(без эквивалентного поля) testPurchase (присутствует только в лицензированных покупках тестеров)
autoRenewing lineItems.autoRenewingPlan.autoRenewEnabled
priceCurrenceCode , priceAmountMicros , introductoryPriceInfo (без эквивалентного поля)
Эту информацию можно найти в basePlan / offer для каждой из приобретенных подписок.
DeveloperPayload (без эквивалентного поля) Полезная нагрузка разработчика устарела
Платеж (без эквивалентного поля)
Вы можете сделать вывод состояния оплаты из subscriptionState :
  • Оплата находится на рассмотрении:
    • SUBSCRIPTION_STATE_PENDING (новые покупки с ожидающей транзакцией)
    • SUBSCRIPTION_STATE_IN_GRACE_PERIOD
    • SUBSCRIPTION_STATE_ON_HOLD
  • Оплата была получена:
    • SUBSCRIPTION_STATE_ACTIVE
  • Бесплатная пробная версия:
    • (без эквивалентного поля)
  • Отсроченное обновление / понижение:
    • SUBSCRIPTION_STATE_PENDING
cancelReason , userCancellationTimeMillis , cancelSurveyResult canceledStateContext
linkedPurchaseToken linkedPurchaseToken (без изменений)
purchaseType Тест: через testPurchase
Продвижение: (без эквивалентного поля); вскоре
priceChange lineItems.autoRenewingPlan.priceChangeDetails
profileName , emailAddress , givenName , familyName , profileId subscribeWithGoogleInfo
acknowledgementState acknowledgementState (no change)
promotionType , promotionCode (без эквивалентного поля); вскоре
externalAccountId obfuscatedExteranlProfileId obfuscatedExternalAccountId externalAccountIdentifiers

Другие функции управления подпиской

В то время как purchases.subscriptions:get был обновлен до покупок. purchases.subscriptions:cancel purchases.subscriptionsv2:get , остальные функции управления подпиской разработчика остаются неизменными в purchases.subscriptions . purchases.subscriptions:acknowledge purchases.subscriptions:cancel , purchases.subscriptions:defer , purchases.subscriptions:refund и purchases.subscriptions:revoke , как вы делали раньше.

Ценообразование API

Используйте конечную точку monetization.convertRegionPrices для расчета региональных цен, как и на игровой консоли. Этот метод принимает единую цену в любой валюте, поддерживаемой игрой и доходности конвертированных цен (включая ставку налога по умолчанию, где это применимо) для всех регионов, где Google Play поддерживает покупки.