Как Adapty синхронизирует данные со сторами

Adapty обменивается данными о продуктах с App Store и Google Play, но этот обмен не является ни постоянным, ни полным. Большинство значений передаются только тогда, когда вы что-то делаете — когда добавляете продукт в сторы или загружаете новые цены. Некоторые данные не передаются вообще, поэтому Adapty и стор могут показывать разные цены для одного и того же продукта.

Что Adapty считывает из сторов

Adapty считывает списки продуктов, базовые планы, цены и транзакции из стора. Чтобы изменить продукт или цену, сделайте это в консоли стора. Чтобы посмотреть цены для конкретных стран, скачайте CSV с ценами в разделе Редактировать продукт.

Что считывает AdaptyКак поступает (App Store)Как поступает (Google Play)
Список продуктов и статус ревьюЧерез ключ App Store Connect APIЧерез сервисный аккаунт
Базовые планыНе применимоЧасть продукта подписки
Цены по странамПри привязке или редактировании продукта в стореПри привязке или редактировании продукта в сторе
Транзакции, продления и возвратыЧерез серверные уведомления App StoreЧерез уведомления разработчика в реальном времени
Цена, которую заплатил покупательС каждой транзакциейС каждой транзакцией

Что Adapty записывает в сторы

Продукты, цены и introductory trials начинаются в Adapty и попадают в стор только после того, как вы совершаете действие — никакого расписания.

Что записывает AdaptyКогда попадает в App StoreКогда попадает в Google Play
Новые продуктыКогда вы отправляете продукт в сторыКогда вы отправляете продукт в сторы
Цены для отдельных странКогда вы загружаете CSV с ценамиКогда вы загружаете CSV с ценами
Бесплатный пробный период (introductory offer)Когда вы отправляете новый продуктНикогда — создайте его в Google Play Console

Adapty сравнивает ваш CSV с текущими ценами в сторе и обновляет только те цены, которые отличаются — так что загружать файл целиком безопасно. Существующие подписчики сохраняют цену, по которой оформили подписку, если только вы не выбрали Apply to existing subscribers.

Что настраивается только в Adapty

Стор никогда не изменяет эти настройки.

ЭлементПочему это остаётся в Adapty
Цена подключённого продукта стораЗаполнитель, фиксируется при создании. Помогает различать продукты, но в стор не передаётся. Аналитика, интеграции и SDK используют реальные цены стора.
Уровни доступаAdapty управляет доступом к платному контенту. У сторов нет аналогичного механизма.
ID promotional offer и win-back offerAdapty нужен ID для подписания покупки. Сам оффер создаётся в консоли стора.

Что происходит на устройстве

Цена, которую покупатель видит на пейволе, поступает из StoreKit или Google Play Billing в момент открытия пейвола — не из Adapty. Изменение цены в консоли стора доходит до пользователей сразу после публикации. Выпускать обновление приложения не нужно, и в Adapty менять ничего не нужно.

В обратном направлении: SDK Adapty отправляет каждую покупку в Adapty с указанием цены, валюты и страны. Adapty использует эти значения для записи выручки в валюте покупателя.

Stripe, Paddle и пользовательские сторы

Интеграции Stripe и Paddle передают транзакции, но не каталог продуктов. Покупки поступают в Adapty через вебхук провайдера или, в случае пользовательских сторов, через ваш собственный бэкенд. Каждый продукт и ID цены нужно добавлять вручную. Если ID отсутствует в Adapty, он ни с чем не совпадёт — такие транзакции и их выручка не появятся в отчётах. Для Stripe и Paddle то же самое происходит, когда продукт есть, но у него не указана Subscription duration. Ни один из этих случаев никак не обозначается, поэтому добавляйте ID и длительность для каждого продукта, который вы продаёте.

Расхождения в продуктах и ценах

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

Что видитеВозможные причиныЧто делать
Цена в Adapty отличается от цены в стореНа экране Products отображается цена, которую вы указали при создании продукта. Если вы отправили продукт в сторы, Adapty использовал её как начальную цену. Изменить её впоследствии нельзя, поэтому как только сторы берут управление ценой — значения расходятся. Цены, которые платят покупатели сейчас, — это цены по странам.Ничего делать не нужно. С покупателей снимается цена стора, а отчёты о выручке используют фактически уплаченную сумму. Чтобы изменить цену для покупателей, отредактируйте её в консоли каждого стора или загрузите CSV с ценами, чтобы обновить оба стора сразу.
Продукт отсутствует в выпадающем спискеТри возможные причины: учётные данные стора перестали работать — список оказывается пустым. Продукт, созданный менее 10 минут назад, мог ещё не попасть в кешированную копию списка App Store в Adapty. Выбранная Subscription duration фильтрует список: Lifetime, Non-Subscriptions и Consumables показывают разовые продукты, все остальные значения — подписки.Установите Subscription duration в соответствии с типом продукта в сторе. Если продукт был создан несколько минут назад, попробуйте снова чуть позже. В противном случае проверьте учётные данные стора.
Introductory offer не отображается в AdaptyAdapty создаёт introductory offer только при отправке нового продукта в стор и показывает только те офферы, которые создал сам. Оффер, настроенный самостоятельно в консоли стора, никогда не появится в окне Edit product.Ничего делать не нужно. Introductory offers применяются автоматически, когда покупатель соответствует условиям, — добавлять их в Adapty не требуется.
Скидка не применилась при покупкеВозможно, покупатель не соответствовал условиям — это решает стор, а не Adapty. Либо promotional offer в App Store не был применён, потому что Adapty не смог его подписать с помощью вашего In-App Purchase Key.Убедитесь, что ключ загружен и действителен, затем проверьте условия оффера в сторе.
Транзакции Stripe перестали появляться после изменения ценыИзменение цены в Stripe создаёт новый price_id, а Adapty сопоставляет события по точной паре product_id + price_id. События с новой ценой ни с чем не совпадают, хотя Stripe по-прежнему сообщает об успешной доставке вебхука.Добавьте новый price_id к продукту в Adapty — до этого выручка не будет фиксироваться. См. раздел Stripe.
Покупатель приобрёл продукт, но не получил уровень доступаID продукта в сторе, который он купил, не привязан ни к одному продукту в Adapty. Adapty фиксирует покупку в строке продукта, созданной автоматически, а эта строка не содержит уровня доступа.Создайте продукт в Adapty с точным ID продукта из стора и назначьте ему уровень доступа.
Обновления перестали поступатьОдин из учётных данных стора перестал работать. Каждый из них отвечает за определённую часть обмена данными.Определите, какая часть перестала работать, и замените только её учётные данные — см. раздел Если обновления перестали поступать.

Если обновления перестали приходить

Adapty не сигнализирует об учётных данных, которые перестали работать. Каждый набор данных отвечает за свою часть обмена, поэтому по симптому можно понять, что именно нужно заменить.

Что перестало работатьУчётные данные для замены
Список продуктов, статусы проверки или публикация продуктов и цен в стореApp Store: ключ App Store Connect API. Google Play: файл ключа сервисного аккаунта.
Новые транзакции, продления и возвратыApp Store: серверные уведомления. Google Play: уведомления разработчика в реальном времени.
Promotional offers при покупкеApp Store: ключ встроенных покупок.
Валидация покупок для каждого пользователяApp Store: общий секрет. Google Play: файл ключа сервисного аккаунта.

Замена учётных данных в консоли стора не обновляет их в Adapty. Загрузите новые в App settings.