Как 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 offer | Adapty нужен 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 не отображается в Adapty | Adapty создаёт 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.