How can we help?

Бюллетень: устаревшая валидация чека выводится из эксплуатации

  • Обновлено
Раздел Подробности
Что нового?

7 сентября 2026 года AppsFlyer прекратит поддержку устаревшего бэкенд-сервиса валидации чека. Устаревший метод validateAndLogInAppPurchase все еще присутствует в перечисленных выше версиях SDK, но будет удален в будущих обновлениях.

Устаревший метод будет полностью удален в предстоящих релизах SDK. Приложения, обновленные до версии v7.0.0 или более поздней, не смогут вызывать устаревший метод.

AppsFlyer предлагает два поддерживаемых альтернативных решения:

  • Валидация чека Бесплатное решение, которое валидирует покупки через магазины приложений, используя новый validateAndLog метод SDK.
  • Доход магазина ROI360. Премиум-решение для измерения дохода, которое включает отслеживание возвратов, полную видимость жизненного цикла подписки и расчет чистого дохода.
Дата вступления в силу

Применяются следующие даты:

  • Дата обновления: 24/12/2025
  • Дата полного вывода из эксплуатации: 7 сентября 2026 года
Важно знать
  • Теперь онбординг обязателен. В отличие от Legacy, новая валидация чека работает только после настройки типа продукта и учетных данных магазина в AppsFlyer. Без этой настройки SDK возвращает ошибку.
  • Валовой доход заменяет пользовательские значения дохода. Новая валидация чека фиксирует валовой доход, возвращаемый магазином, а не значение, которое вы передаете в вызове SDK. Если раньше вы передавали пользовательское значение (например, чистый доход после вычета комиссии магазина), после миграции ожидайте расхождения в дэшбордах и постбэках партнеров. Для чистого дохода используйте ROI360 Store Revenue.
  • Для дэшбордов и постбэков используются только цена и валюта из ответа валидации магазина. В отличие от Legacy, новый validateAndLogInAppPurchase не принимает цену или валюту в вызове SDK. Эти значения извлекаются напрямую из ответа валидации магазина. Любой af_revenue, который вы передаете как дополнительный параметр, попадает в объект custom_data события, но не используется в дэшбордах или постбэках.
  • Новый обязательный параметр: PurchaseType. Указывает SDK, является ли транзакция разовой покупкой или подпиской.
Что необходимо сделать:

Чтобы перейти на одно из двух решений (до 7 сентября 2026 года), выполните одно из следующих действий:

Более подробную информацию см. здесь:

Часто задаваемые вопросы

Как узнать, какие из моих приложений все еще используют устаревшую валидацию чека?

Legacy не отображается как тип продукта на странице настроек дохода, поэтому подтвердить использование Legacy только через UI нельзя. Используйте следующие методы вместе:

  • Сначала просканируйте сырые данные. Найдите события af_purchase с event_source: SDK и is_receipt_validated: true. Это возможные кандидаты, но вызовы logEvent могут создавать похожие события, поэтому само по себе это не является окончательным подтверждением.
  • Подтвердите это в коде SDK. Если ваше приложение вызывает validateAndLogInAppPurchase с устаревшей сигнатурой, оно использует Legacy. Устаревшая сигнатура включает:
    • Android: лицензионный ключ, полезная нагрузка JSON, цена, валюта
    • iOS: идентификатор продукта, цена, валюта, идентификатор транзакции ID
  • Свяжитесь со своим CSM. Они могут подтвердить, какие из ваших приложений все еще используют Legacy.

Что именно произойдет 7 сентября 2026 года?

Бэкенд-сервис Legacy для валидации чека отключается. Начиная с этого дня:

  • Начиная со следующих версий SDK, прежний метод validateAndLogInAppPurchase помечен как устаревший:
  • События af_purchase, которые валидируются и регистрируются этим методом, больше не записываются в AppsFlyer.
  • Дэшборды, сырые данные и партнерские постбэки больше не получают данные о покупках из Legacy.

Чтобы продолжать получать данные о валидированных покупках, перейдите на один из поддерживаемых вариантов до 7 сентября 2026 года.

Повлияет ли включение новой валидации чека на рабочие версии моего приложения, которые по-прежнему вызывают устаревший метод?

№ Оба продукта работают параллельно до 7 сентября 2026 года. Включение новой валидации чека в AppsFlyer не влияет на версии приложения, которые по-прежнему вызывают устаревший метод. Они продолжают работать как раньше до даты прекращения поддержки.

Что будет с пользователями старых версий приложения, которые так и не обновятся?

Пользователи старых версий приложения продолжат генерировать валидированные события af_purchase до 7 сентября 2026 года. Чтобы продолжать получать данные о валидированных покупках, заранее выпустите обновленную версию приложения, чтобы она успела охватить большую часть ваших пользователей до прекращения поддержки.

Могу ли я позже перейти с валидации чека на ROI360 Store Revenue?

Да Оба продукта используют один и тот же метод SDK validateAndLogInAppPurchase (v2), поэтому переход с валидации чека на ROI360 Store Revenue не требует изменения SDK или релиза приложения. Чтобы переключиться, измените тип продукта на странице настроек дохода и выполните дополнительную настройку ROI360 (уведомления сервера App Store для iOS, Google Play RTDN для Android). См. Переключение на ROI360 Store Revenue с валидации чека.

Если вы хотите пойти дальше и включить автоматическое обнаружение покупок, полное покрытие жизненного цикла подписки (включая продления, обновления и существующих подписчиков), а также обработку изменения цены подписки, интегрируйте компонент SDK Purchase Connector. Для этого потребуется обновить приложение, но это необязательно. Ручной поток validateAndLogInAppPurchase (v2) работает в ROI360 Store Revenue и без него.

Можно ли полностью пропустить валидацию покупок в AppsFlyer?

Да Вы можете отправлять события покупок в приложении с помощью стандартного API logEvent. Но вы потеряете:

  • Валидацию чека в магазинах приложений, которая отфильтровывает мошеннические покупки
  • Флаг af_validated в событиях: имеет значение true, когда AppsFlyer успешно проверяет покупку в магазине, и false, когда проверка не проходит. Без валидации этот флаг отсутствует.
  • Точные постбэки по доходу для ваших UA-партнеров. Без валидации любое значение af_revenue, которое вы передаете, записывается и отправляется в сети как есть, без подтверждения того, что покупка действительно произошла

По этим причинам AppsFlyer рекомендует использовать валидацию чека или ROI360 Store Revenue, а не полностью пропускать валидацию.

Что произойдет, если в службе валидации Apple или Google произойдет сбой?

Это зависит от того, какой продукт вы используете:

  • Валидация чека: callback SDK возвращает код ошибки. Ваше приложение должно обработать сбой и реализовать собственную логику повторных попыток.
  • ROI360 Store Revenue: AppsFlyer автоматически повторяет валидацию после восстановления сервиса магазина и заново генерирует все пропущенные события за период сбоя.

Почему после миграции изменился доход на моем дэшборде?

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

Если вам нужен чистый доход, используйте ROI360 Store Revenue. Он записывает как валовой, так и чистый доход (валовой за вычетом комиссий магазина и налогов).

Что происходит с моим пользовательским значением af_revenue?

Если вы по-прежнему передаете значение af_revenue, оно сохраняется в событии внутри объекта custom_data. Дэшборды и постбэки партнеров используют валовое значение из ответа магазина, а не ваше пользовательское значение.

Увидят ли мои партнеры новый валовой доход в постбэках?

Да После миграции постбэки af_purchase передают валовой доход из магазина. Если раньше в Legacy вы передавали пользовательское значение, ваши партнеры увидят другое значение. Обязательно предупредите своих UA-партнеров перед развертыванием миграции, особенно тех, кто использует данные о доходе для оптимизации кампаний.

Как изменятся названия событий после миграции?

В Legacy для всех типов транзакций создавалось одно событие af_purchase. В новой валидации чека используются разные названия событий:

  • Разовая покупка: af_purchase
  • Начало пробного периода: af_ars_trial_started
  • Начало подписки: af_ars_subscription_started
  • Покупка в песочнице: af_purchase_sandbox_sdk
  • Подписка или пробный период в песочнице: af_ars_sandbox_sdk

Полный набор событий жизненного цикла подписки (продления, отмены, возвраты средств, апгрейды) доступен только в ROI360 Store Revenue. Полный список событий см. в статье О валидации чека.

Можно ли использовать ответ валидации SDK, чтобы управлять доступом к купленному контенту?

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

Как новый метод различает подписки и разовые покупки?

Новый метод validateAndLogInAppPurchase требует обязательного параметра PurchaseType. Укажите значение one-time или subscription в зависимости от типа транзакции.

Решение Валидация чека для покупок в приложении теперь официально не поддерживается во всех SDK AppsFlyer.

В вашем приложении интегрирован новый метод validateAndLogInAppPurchase (v2), но продукт не настроен в дэшборде AppsFlyer. Откройте Settings > ROI360 > Revenue settings > Purchases & subscriptions, выберите валидация чека или ROI360 и выполните шаги настройки.

Почему в новой сборке SDK регистрируются только события песочницы, а не af_purchase?

af_purchase регистрируется только для транзакций в production. Транзакции в sandbox регистрируются как af_purchase_sandbox_sdk. Чтобы создать реальное событие af_purchase, выполняйте тестирование через production-конвейер (не TestFlight на iOS и не Licensed Tester на Android).

This article was translated using AI and may contain errors. For the most accurate information, please refer to the English version using the language selector.


Share article: