Refund Saver

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

Refund Saver автоматически обрабатывает такие запросы, защищая вашу выручку и повышая вероятность отказа в необоснованных возвратах. Он работает как в App Store, так и в Google Play и охватывает все типы встроенных покупок: автообновляемые подписки, разовые подписки, расходуемые и нерасходуемые покупки (включая продукты с пожизненным доступом).

Refund Saver dashboard chart showing refund metrics
Tip

Удерживайте подписчиков до отмены. Retention Messaging показывает персональное сообщение прямо на экране отмены подписки Apple — весомый аргумент остаться в момент, когда подписчик нажимает «Отменить».

Как работает Refund Saver

  1. Когда пользователь инициирует запрос на возврат, стор отправляет уведомление с запросом данных о транзакции и использовании приложения.

    Если вы игнорируете или задерживаете ответ, стор, скорее всего, одобрит возврат.

  2. Adapty Refund Saver автоматически отвечает на эти уведомления и отправляет стору необходимые данные.

    Это позволяет сократить количество необоснованных возвратов, экономя время и защищая ваш доход.

  3. Adapty фиксирует каждый исход — возврат одобрен или отклонён. Эти данные используются в аналитике Refund Saver на дашборде.

Различия между сторами

Refund Saver работает в обоих сторах, но каждый из них обрабатывает возвраты по-своему.

App StoreGoogle Play
Что Refund Saver отвечаетЗапрос на подтверждение потребления транзакцииПроверку возврата по заказу. Банк пользователя инициирует её как чарджбэк
Согласие пользователяТребуетсяНе требуется
Как Adapty узнаёт результатApp Store отправляет уведомлениеAdapty опрашивает статус заказа до тех пор, пока Google не завершит проверку

В Google Play пользователь может получить возврат средств двумя способами. Запрос на возврат Google обрабатывает без вашего участия, поэтому Refund Saver его не видит. Чарджбэк — другое дело: пользователь просит банк отменить платёж, Google запрашивает вашу позицию до урегулирования спора, и Refund Saver отвечает за вас. Если чарджбэк выигрывает пользователь, вы теряете и свою долю от суммы покупки, и банковскую комиссию за чарджбэк.

Требования, специфичные для стора

App Store

Когда пользователь запрашивает возврат средств у Apple, та проводит проверку. Перед принятием решения Apple отправляет вам consumption request — запрос с подробностями о том, как пользователь использовал покупку. Refund Saver отвечает на этот запрос с указанием желаемого результата и данными о потреблении пользователем.

Чтобы использовать Refund Saver в App Store, необходимо:

  1. Включите уведомления App Store Server Notifications V2: Refund Saver не работает с V1-уведомлениями, которые Apple уже устарели.
  2. Добавьте ключ In-App Purchase: Refund Saver подписывает ответ Apple ключом In-App Purchase. Adapty нужны Issuer ID, Key ID и файл .p8 в App settings → iOS SDK, а также ваш Bundle ID — без всех четырёх данных ответить на запрос consumption request невозможно. См. Генерация ключа In-App Purchase.
  3. Раскройте использование данных о потреблении в Политике конфиденциальности: Apple требует такое раскрытие, и это ваша ответственность, а не Adapty. См. App Privacy Details от Apple — там указано, что именно нужно раскрывать.
  4. Получите согласие пользователя на передачу данных: Это тоже ваша ответственность — Apple требует явного согласия до того, как Adapty передаст данные пользователя. См. Получение согласия пользователя.

Google Play

Чтобы использовать Refund Saver в Google Play, подключите стор и включите RTDN — оба шага входят в стандартную интеграцию Google Play: Настройка интеграции Google Play Store и Включение уведомлений в реальном времени (RTDN). Google сообщает о каждом запросе на возврат средств через RTDN, поэтому без него запросы останутся без ответа. Согласие пользователя не требуется — оспаривание чарджбэка не предполагает передачи персональных данных.

Включение Refund Saver

Refund Saver включается один раз. После активации Adapty автоматически отвечает на запросы возврата средств из App Store и Google Play — при условии, что оба стора корректно подключены к Adapty и выполнены требования для каждого стора.

  1. Откройте раздел Refund Saver в дашборде Adapty.
  2. Нажмите Turn on refund saver.
Раздел Refund Saver с выбранной вкладкой Apple, отображающий подсказку по настройке платформы Apple и кнопку Turn on refund saver

Настройка Refund Saver

После включения функции можно настроить Refund Saver. Настройки применяются на двух уровнях:

  • Настройки на уровне приложения: настройка предпочтения по возвратам для каждого стора и политика согласия по умолчанию — согласие, которое Refund Saver принимает для пользователей без записанного значения согласия. Оба параметра задаются в окне Edit Refund saver preferences.
  • Переопределение для отдельного пользователя: предпочтение по возвратам и значение согласия для конкретного пользователя. Когда они установлены, они имеют приоритет над настройками на уровне приложения. Задайте предпочтение через дашборд, SDK или server-side API — все три способа записывают одно и то же значение. Обновление согласия выполняется через SDK или API.

Установите предпочтение по возврату средств для каждого стора

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

  1. Чтобы изменить настройки, в разделе Refund Saver нажмите Refund Saver Settings.
  2. В окне Edit Refund saver preferences выберите вкладку Apple или Google.
    Apple tab of the Edit Refund saver preferences window with the list of refund request preferences
  3. Выберите нужный вариант в поле Default refund request preference:
ОпцияОписание
Decline first refund request, grant all next(по умолчанию) Для каждой транзакции, с которой сталкивается Refund Saver, он сначала просит стор отклонить возврат. Если та же транзакция появляется снова, Refund Saver рекомендует одобрить возврат. Такой подход снижает недовольство пользователей из-за несправедливых отказов — они могут повторно запросить возврат и, скорее всего, его получат.
Always declineПросит стор отклонять каждый запрос на возврат, включая повторные запросы по той же транзакции.
Always refundПредлагает стору одобрять каждый запрос на возврат.
Grant prorated refundПредлагает Apple вернуть только неиспользованную часть покупки, так что вы сохраняете доход за уже использованный период. Только App Store — в Google-вкладке этого варианта нет.
No preferenceНе передавать стору никаких рекомендаций. В этом случае стор самостоятельно определит результат на основе своих внутренних политик и истории пользователя, без влияния ваших настроек. Это наиболее нейтральный вариант.

Выберите подходящую настройку

Отклонение всех запросов не гарантирует меньше возвратов. Стор воспринимает ваш ответ лишь как рекомендацию. Разработчики отмечают, что Apple может одобрить большую часть запросов, даже если вы просите отклонить их все. Повторные отказы по одной и той же транзакции также дают пользователю повод подать запрос снова. Для большинства приложений вариант Decline first refund request, grant all next позволяет воспользоваться преимуществом отклонения первого запроса, не создавая паттерна повторных отказов.

Частичный возврат — промежуточный вариант между отказом и одобрением. Работает только в App Store. Вы возвращаете неиспользованную часть покупки и оставляете остальное, вместо того чтобы рисковать всей суммой при отказе. Частичный возврат подходит для покупок, которые пользователь использовал частично: набор монет, где потрачена половина, или годовой план, отменённый на втором месяце. Google принимает только отказ, одобрение или отсутствие предпочтений при рассмотрении возврата, поэтому Refund Saver не может запросить частичный возврат там. Вы по-прежнему можете сделать это вручную через Play Console в разделе управления заказами.

Как Adapty рассчитывает использованную долю

Пропорциональный возврат средств покрывает неиспользованную часть покупки, поэтому Apple должна знать, какую часть покупки пользователь уже использовал.

  • Автопродлеваемые подписки: Apple самостоятельно рассчитывает израсходованную долю, а Adapty отправляет предпочтение в Apple без указания процента потребления.
  • Все остальные типы продуктов: Adapty рассчитывает израсходованную долю и отправляет её в Apple вместе с предпочтением. Adapty берёт долю из одного из двух источников:
    • Виртуальная валюта: Израсходованная доля баланса виртуальной валюты, предоставленного покупкой, усреднённая по всем валютам, которые она предоставила. Точность израсходованной доли зависит от того, насколько корректно ваше приложение сообщает о тратах через серверный API.
    • Период доступа: Истёкшая доля периода — используется, когда покупка не предоставляла виртуальную валюту.

Apple принимает пропорциональный возврат только за частично использованную покупку. В остальных случаях Adapty отправляет другое предпочтение:

  • За полностью использованную покупку Adapty просит Apple отклонить возврат.
  • За неиспользованную покупку Adapty просит Apple одобрить полный возврат.
  • За покупку, которая не предоставляет ни виртуальную валюту, ни период доступа, у Adapty нет данных о потреблении, и он отвечает Apple без указания предпочтения. Расходуемая покупка, не начисляющая виртуальную валюту, попадает в этот случай.

Default consent policy применяется к пользователям, для которых не зафиксировано значение согласия. Ваше приложение не передало их согласие через SDK или серверный API. Политика определяет, как Refund Saver обрабатывает таких пользователей. Выберите вариант, соответствующий подходу к получению согласия, описанному в разделе Получите согласие пользователя: в окне Edit Refund saver preferences на вкладке Apple задайте параметр Default consent policy.

Настройка политики согласия по умолчанию на вкладке Apple в окне редактирования параметров Refund Saver

ВариантОписание
Opt-out(по умолчанию) Если Adapty не знает статус согласия пользователя, предполагается, что согласие было дано, и Refund Saver передаст данные, связанные с возвратом, в Apple.
Opt-in(рекомендуется Apple) Если Adapty не знает статус согласия пользователя, предполагается, что согласие не было дано, и Refund Saver не передаст никаких данных в Apple.

Настройте поведение возврата для конкретного пользователя в дашборде

Вы можете задать индивидуальные настройки для конкретных пользователей. Откройте профиль пользователя и найдите карточку Refund saver settings в нижней части левой колонки.

Настройка на уровне пользователя применяется для обоих сторов. Установите Refund request preference в значение Grant refund, Grant prorated refund, Decline refund или No preference. Adapty применяет это значение к запросам на возврат средств от данного пользователя как в App Store, так и в Google Play. Для Grant prorated refund нет эквивалента в Google, поэтому Adapty отправляет No preference в Google Play.

Note

Настройки на уровне пользователя имеют приоритет над настройками по умолчанию на уровне приложения — включая поведение «Отклонить первый запрос на возврат, одобрить все последующие».

Карточка настроек Refund Saver в профиле пользователя на дашборде
Info

Согласие требуется только для App Store — проверка возврата средств в Google Play не затрагивает персональные данные и не требует согласия.

Способ получения согласия пользователя на передачу данных — на ваше усмотрение, однако Apple требует действительного согласия пользователя перед передачей каких-либо персональных данных. Apple рекомендует использовать подход с явным согласием (opt-in): встроенные в приложение подсказки объясняют, как будут использоваться данные, и требуют явного действия от пользователя для подтверждения согласия. Если пользователь игнорирует или отклоняет запрос, это не считается согласием. Подробнее см. в руководстве Apple.

Если явное согласие пользователей нецелесообразно для вашего приложения, можно рассмотреть подход с отказом (opt-out). Он предполагает включение в Условия использования пункта об обмене данными, согласно которому пользователи соглашаются на передачу данных, принимая эти условия. Обязательно чётко укажите, как пользователи могут отозвать своё согласие.

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

«Если мы получаем запрос на возврат средств за встроенную покупку, мы можем предоставить Apple информацию об активности пользователя в части встроенных покупок. Это может включать такие данные, как время с момента установки приложения, общее время использования приложения, анонимный идентификатор аккаунта, было ли полностью использовано содержимое встроенной покупки, включала ли она пробный период, общая потраченная сумма и общая сумма возврата.»

После выбора подхода задайте соответствующую политику согласия по умолчанию в дашборде.

Проверьте статус согласия пользователя, чтобы убедиться, что его выбор достиг Adapty. В дашборде Adapty откройте профиль пользователя и найдите настройку Allow data sharing в карточке Refund saver settings. Yes и No отображают зафиксированный выбор пользователя; Not set означает, что Refund Saver следует вашей политике согласия по умолчанию.

Note

Отслеживание сэкономленных средств по запросам на возврат

В разделе Refund Saver показано, сколько запросов на возврат обработал Adapty и как каждый из них был разрешён. Чтобы посмотреть данные по отдельному стору, выберите вкладку Apple или Google в верхней части страницы. All Platforms объединяет данные обоих сторов.

Раздел Refund Saver с карточками Saved by Refund Saver, Refunds requested и Win rate над таблицей обработанных запросов на возврат

Google не уведомляет Adapty о решении по запросу на возврат, поэтому Adapty периодически проверяет статус заказа до завершения проверки. Из-за этого данные по Google Play появляются позже, чем по App Store.

Раздел Refund Saver охватывает только запросы, которые дошли до Refund Saver. Чтобы увидеть все возвраты по вашему приложению — включая те, которые Google обрабатывает без вашего участия, — используйте графики Refund money и Refund events в Analytics.

Управление Refund Saver из кода приложения

Ваше приложение может записывать два значения для каждого пользователя через iOS SDK:

  • Предпочтение при запросе возврата: что Adapty рекомендует при ответе на запросы возврата от этого пользователя. Значение относится к профилю, а не к конкретной платформе, поэтому предпочтение при запросе возврата применяется как в App Store, так и в Google Play.
  • Согласие на передачу данных: разрешает ли Adapty отправлять данные о покупках этого пользователя в Apple. Согласие применяется только к App Store.

Используйте SDK для обработки выборов пользователя в вашем собственном интерфейсе — в диалоге подтверждения или переключателе настроек. Дашборд и серверный API записывают те же два значения. На Android аналогичных методов нет — мультиплатформенные фреймворки записывают эти значения только на iOS.

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

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

SDK принимает только значения grant, decline и no-preference. Чтобы установить Grant prorated refund для пользователя, используйте дашборд или серверный API.

Чтобы сообщить Adapty, дал ли конкретный пользователь согласие, используйте метод updateCollectingRefundDataConsent. Согласие передаётся только в Apple: при проверке возврата средств в Google Play это поле не используется вовсе. Значение сохраняется на сервере в привязке к профилю, поэтому одного вызова на каждое изменение достаточно.