Возврат за платное приложение никогда не доходит до вашего сервера, поэтому заметить его должно само приложение
Возвраты за приложения с оплатой при покупке обходят все уведомления, которые слушает ваш сервер. Google дает покупателям два часа на возврат и удаляет приложение, Apple по вашему договору может вернуть деньги в течение 90 дней, и ни один из них не запрашивает доказательств. Здесь разобрано, что сообщает каждый магазин, сколько это стоит и как проверить возврат в приложении.

Главное
- Возврат за платное приложение касается цены самой загрузки приложения, а не встроенной покупки, и ни Apple, ни Google не документируют для него серверное уведомление.
- Справка Play Console от Google говорит, что после покупки платного приложения у покупателя есть до двух часов, чтобы вернуть его с полным возвратом денег, и вернуть конкретное приложение можно только один раз.
- Правила возврата Google Play говорят, что в рамках возврата приложение удаляется, а покупатель, который снова купит то же приложение, второй возврат не получит.
- Тип REFUND в App Store Server Notifications V2 от Apple охватывает расходуемые и нерасходуемые покупки, автовозобновляемые и невозобновляемые подписки. Покупки самого приложения в этом списке нет.
- Apple Developer Program License Agreement, Schedule 2 раздел 6.3, позволяет Apple вернуть деньги покупателю, который отказывается в течение 90 дней после загрузки, а разработчик возмещает Apple эту сумму.
- Документация StoreKit от Apple указывает revocationDate в AppTransaction, подписанной записи о покупке приложения, которую приложение может проверить на устройстве.
- Ни CONSUMPTION_REQUEST, ни orders.reviewrefund от Google Play не задокументированы для покупок загрузки приложения, поэтому решение о возврате за платное приложение принимается без доказательств разработчика.
Приложения с оплатой при покупке возвращают через боковую дверь, за которой большинство инструментов для работы с возвратами никогда не следит. Когда покупатель возвращает само приложение, а не что-то купленное внутри него, Apple и Google забирают деньги из вашей выплаты, не отправив вашему серверу ни одного уведомления. Google хотя бы удаляет приложение. На iOS разработчики на собственных форумах Apple сообщают, что покупатели после возврата продолжают им пользоваться. Если вы продаете платное приложение, возврат за него это единственный возврат, который вы увидите только как отрицательную строку в отчете, если приложение не проверит его на устройстве.
Правила возврата за платные приложения в Google Play и App Store
Оба магазина считают покупку загрузки отдельным продуктом со своими правилами. Вот что говорит документация каждого из них.
| Правило | Google Play | App Store |
|---|---|---|
| Быстрый самостоятельный возврат | До двух часов после покупки, полный возврат | Не задокументирован |
| Более длинное окно для запроса | Покупатель может подать запрос в течение 48 часов, затем обращается к разработчику | Apple может вернуть деньги в течение 90 дней после загрузки, по Schedule 2 договора с разработчиком |
| Сколько раз | Один раз на приложение. Повторную покупку вернуть нельзя | Не задокументировано |
| Что происходит с приложением | Удаляется в рамках возврата | Не задокументировано. Разработчики сообщают, что покупатели сохраняют доступ после возврата |
| Разработчик может вернуть деньги | Да, только полные возвраты, через Play Console | Нет |
| Серверное уведомление вам | Не задокументировано | Не задокументировано |
| Запрос доказательств у вас | Не задокументирован | Не задокументирован |
Как работает двухчасовой возврат в Google Play
Справка Play Console от Google говорит об этом прямо: после покупки платного приложения у пользователя есть до двух часов, чтобы вернуть его с полным возвратом денег, и вернуть приложение можно только один раз. Правила возврата для покупателей добавляют, что в течение 48 часов покупатель может получить возврат в зависимости от покупки, что в рамках возврата приложение удаляется и что тот, кто снова купит то же приложение, возврат за него не получит. После 48 часов Google направляет покупателей к разработчику.
Как Apple возвращает деньги за платное приложение
В App Store покупатель обращается к Apple через reportaproblem.apple.com, выбирает причину и отмечает приложение. Apple обещает ответ в срок от 24 до 48 часов. Вернуть деньги за покупку в App Store самостоятельно вы не можете. Внешнюю границу задает ваш договор. Раздел 6.3 Schedule 2 соглашения Apple Developer Program License Agreement гласит, что если покупатель хочет отказаться в течение девяноста дней после загрузки или приложение не соответствует вашим спецификациям или применимому законодательству, Apple может вернуть полную цену, а вы возмещаете Apple эту сумму или предоставляете ей кредит на эту сумму.
Почему ваш сервер никогда не узнает о возврате за платное приложение
Каждый сигнал о возврате, который отправляют оба магазина, создан для встроенных покупок. Apple описывает свой notificationType как событие встроенной или внешней покупки, которое вызвало уведомление. Ее тип REFUND охватывает расходуемую покупку, нерасходуемую покупку, автовозобновляемую подписку или невозобновляемую подписку. Get Refund History возвращает встроенные покупки клиента, за которые были возвращены деньги. Загрузки приложения нет ни в одном из этих списков.
У Google то же самое. Уведомления разработчикам в реальном времени охватывают подписки, разовые продукты и аннулированные покупки, а productType аннулированной покупки это либо подписка, либо разовая покупка. Voided Purchases API, по собственному описанию, применяется к разовым встроенным заказам и подпискам и смотрит назад только на 30 дней.
Вызывает ли возврат за платное приложение CONSUMPTION_REQUEST?
Нет. Документация Apple говорит, что CONSUMPTION_REQUEST отправляется, когда клиент запрашивает возврат за расходуемую встроенную покупку или автовозобновляемую подписку. Это один из всего двух процессов возврата в обоих магазинах, которые запрашивают у разработчика доказательства. Второй это проверка чарджбэка в Google Play, на которую отвечают через orders.reviewrefund в течение 24 часов, и она приходит тем же потоком уведомлений о встроенных покупках. Ни один из них не задокументирован для загрузок приложений. Решение о возврате за платное приложение принимается без всего, что вы могли бы отправить.
Продолжает ли покупатель пользоваться приложением после возврата?
В Google Play правила говорят, что приложение удаляется. По iOS на форумах Apple есть темы от разработчиков, которые спрашивают именно об этом. В одной, от марта 2025, сказано: «Когда пользователь возвращает приложение с оплатой при покупке, у него по-прежнему есть доступ к приложению.» Другая, от 2022 года, подозревает, что покупатели покупают, устанавливают, оформляют возврат и продолжают пользоваться. Третья, от июня 2025, спрашивает, сообщают ли App Store Server Notifications V2 о возвратах на уровне приложения вообще. Ни в одной из трех нет ответа от Apple.
Сколько денег вам стоит возврат за платное приложение
Сторона выплат предсказуема. Справка Play Console говорит, что Google возвращает свою сервисную комиссию, когда вы делаете возврат, поэтому из вашей выплаты вычитается ваша доля, а не цена на витрине. Возврат, оформленный после того, как Google вам заплатил, вычитается из будущей выплаты, и если ваш баланс остается отрицательным не менее 48 часов, Google может списать деньги с вашего банковского счета. Со стороны Apple договор говорит, что вы возмещаете сумму, равную цене. На практике RevenueCat в 2022 году сообщил, что Apple вычла сумму после комиссии, показанную как Extended Partner Share, то есть Apple не оставила себе свою долю.
Не возвращаются те расходы, которые вы понесли, чтобы обслужить этого покупателя. Вот наглядный пример. Платное фотоприложение за $6.99 применяет фильтры через облачную модель и синхронизирует проекты с облачным хранилищем. Вы заплатили за рекламу, которая привела покупателя.
| Статья расходов | Возвращается в Google Play | Возвращается в App Store |
|---|---|---|
| Ваша доля от $6.99 | Забирается из вашей выплаты | Забирается из вашей выплаты |
| Сервисная комиссия магазина | Возвращается вам Google | Не взимается, по отчету RevenueCat |
| Уже использованные облачные вычисления и вызовы API | Нет | Нет |
| Хранилище для синхронизированных проектов | Нет | Нет |
| Расходы на рекламу для привлечения покупателя | Нет | Нет |
| Текущие серверные расходы, если покупатель продолжает пользоваться приложением | Прекращаются, приложение удалено | Продолжаются, пока ваше приложение не проверит |
Именно в последней строке iOS становится дорогой. Покупатель, который оставил приложение после возврата, продолжает обращаться к вашему бэкенду, и каждый запрос к модели, каждая синхронизация и каждый вызов API после возврата это расход без выручки за ним. Для платного приложения без серверных расходов возврат означает потерянную продажу. Для приложения с бэкендом он может превратиться в постоянно растущий счет.
Как обнаружить возврат за платное приложение внутри приложения
Раз сервер ничего не узнает, проверка должна начинаться на устройстве и затем сообщать вашему серверу.
На iOS читайте revocationDate в AppTransaction
AppTransaction это подписанная App Store запись о покупке приложения клиентом. Документация StoreKit от Apple теперь указывает в ней свойство revocationDate, описанное как дата отзыва покупки приложения. Читайте AppTransaction.shared при запуске, проверяйте результат и считайте revocationDate, отличное от nil, возвращенной загрузкой. Отправляйте подписанное значение на свой сервер, чтобы он перестал обслуживать этот аккаунт.
- appTransactionID, по словам Apple, остается неизменным для Apple Account даже после возврата или повторной покупки, поэтому привязывайте к нему свои записи, и покупатель, который заплатит снова, будет узнан.
- AppTransaction.refresh() получает свежую запись из App Store, но показывает запрос на вход. Apple советует вызывать его только после явного действия пользователя, например нажатия кнопки восстановления покупок.
- Подписанное значение хранится на устройстве. Документация Apple не описывает для него серверного уведомления, поэтому ваш сервер знает только то, что сообщит приложение.

На Android запросите у Play Integrity вердикт о лицензии
Удаление со стороны Google решает большинство случаев, но копия может его пережить, например установленная из резервной копии в обход магазина. Play Integrity API возвращает appLicensingVerdict для аккаунта, в который выполнен вход. LICENSED означает, что у пользователя есть право на приложение. UNLICENSED означает, что его нет, и Google предлагает показать диалог GET_LICENSED. UNEVALUATED означает, что Google не смог проверить, например потому, что пользователь не вошел в Google Play. Google также отмечает, что на некоторых старых устройствах пользователь сохраняет право после удаления, поэтому LICENSED не на каждом устройстве доказывает действующую покупку.
Сделайте сервер привратником
Проверки на клиенте можно вырезать патчем. Защищать стоит платную работу, которую выполняет ваш бэкенд, поэтому пусть бэкенд отклоняет вызовы от аккаунта, чей последний отчет был возвратом, вердиктом UNLICENSED или отсутствием вердикта после выбранного вами льготного периода. Именно это не дает возврату превратиться в бесплатные вычисления.
Когда платному приложению стоит перейти на встроенные покупки
Собственное руководство Apple по смене бизнес-модели описывает переход от платного приложения к бесплатному со встроенными покупками и использование originalAppVersion в AppTransaction, чтобы и дальше давать премиум-функции тем, кто купил платную версию. Выгода такого шага для возвратов конкретна. Как только цена переносится на нерасходуемую покупку или подписку, возвраты приходят как уведомления REFUND и аннулированные покупки, на которые ваш сервер может реагировать, а запрос на возврат за подписку в App Store вызывает CONSUMPTION_REQUEST. Это те сигналы, которые слушает RefundHalt и на которые отвечает в пределах 12-часового и 24-часового окон. Платная загрузка не дает вам ни одного из них.
Частые вопросы
- Сколько времени есть у покупателя, чтобы вернуть платное приложение в Google Play?
- До двух часов после покупки для полного возврата, согласно справке Play Console от Google, и только один раз на приложение. Правила возврата Google также говорят, что покупатель может получить возврат в течение 48 часов, после чего Google направляет его к разработчику. В рамках возврата приложение удаляется.
- Уведомляет ли Apple мой сервер, когда кто-то возвращает мое платное приложение?
- Такое уведомление не задокументировано. App Store Server Notifications от Apple охватывают события встроенных покупок, а тип REFUND перечисляет только расходуемые и нерасходуемые покупки, автовозобновляемые и невозобновляемые подписки. Приложение может прочитать revocationDate в AppTransaction на устройстве и сообщить его вашему серверу.
- Сохраняет ли покупатель доступ к платному приложению на iOS после возврата?
- Разработчики на форумах Apple сообщают, что сохраняет, а документация Apple не описывает ни одного шага, который удаляет приложение после возврата. Проверяйте revocationDate в AppTransaction при запуске и пусть ваш сервер перестает обслуживать аккаунты, которые сообщают о возвращенной загрузке.
- Могу ли я сам вернуть деньги за платное приложение?
- В Google Play да. Play Console позволяет оформлять полные возвраты за платные приложения, но никогда частичные, и Google возвращает свою сервисную комиссию. В App Store нет. Вернуть деньги за покупку в App Store может только Apple.
- Могу ли я оспорить возврат за платное приложение данными об использовании?
- Нет. CONSUMPTION_REQUEST от Apple задокументирован для расходуемых покупок и автовозобновляемых подписок, а проверка чарджбэка в Google Play через orders.reviewrefund приходит через уведомления, созданные для встроенных продуктов и подписок. Ни один магазин не документирует процесс предоставления доказательств для покупки самого приложения.
Источники и дополнительное чтение
- Play Console Help: Issue refunds and cancellations
- Google Play Help: Apps, games and in-app purchases refund policies
- Google Play Developer API: Voided Purchases API
- Android Developers: Real-time developer notifications reference
- Android Developers: Play Integrity API integrity verdicts
- Apple Developer Documentation: notificationType (App Store Server Notifications V2)
- Apple Developer Documentation: AppTransaction
- Apple Developer Documentation: Supporting business model changes by using the app transaction
- Apple Developer Program License Agreement, Schedule 2 section 6.3
- Apple Support: Request a refund for apps or content that you bought from Apple
- Apple Developer Forums: How to detect refund for paid app? (March 2025)
- Apple Developer Forums: AppTransactionId support and app-level refunds (June 2025)
- RevenueCat: Does Apple keep its commission after you refund a purchase?
RefundHalt
Автопилот возвратов для App Store и Google Play
Читайте дальше
Если ваше приложение всё ещё работает на App Store Server Notifications V1, Apple никогда не спрашивает вас о возвратах за подписки
Apple объявила App Store Server Notifications V1 устаревшей в июне 2023 года, и V1 так и не получила CONSUMPTION_REQUEST для подписок, REFUND_DECLINED и REFUND_REVERSED. Рассказываем, что упускает сервер на V1, во что это обходится и как перейти на V2, не потеряв ни одного возврата.
Возврат по месячной подписке Apple с 12-месячным обязательством может закончить весь год или только один его месяц
В месячной подписке с 12-месячным обязательством Apple делит возвраты на два случая. Возврат за прошлый месяц не останавливает списания. Возврат за текущий месяц сразу прекращает обязательство. Разбираем, как каждый случай приходит на ваш сервер, во что он обходится и что отправлять в Apple.