Бан читера не помешает Apple или Google вернуть ему деньги, поэтому продумайте возврат средств забаненному игроку до того, как выдать бан
Бан закрывает доступ, но не останавливает процедуру возврата в магазине. О возврате средств забаненному игроку по-прежнему решают Apple или Google, у ваших доказательств жёсткие ограничения, а отменённый возврат может обязать вас восстановить то, что вы забрали. Вот что вы контролируете и сколько это стоит.

Главное
- Бан игрока в вашем приложении не отменяет его покупки в App Store или Google Play. Apple и Google по-прежнему решают о возвратах по своим правилам, и забаненный игрок может запросить деньги обратно в любом из магазинов, как любой другой покупатель.
- Когда покупатель App Store просит возврат, Apple отправляет CONSUMPTION_REQUEST и просит ответить через Send Consumption Information в течение 12 часов. В запросе нет поля для бана, отметки о читерстве или нарушения условий использования.
- Apple отклоняет данные о потреблении с ошибкой HTTP 400 InvalidCustomerConsentedError, если customerConsented не равно true, поэтому отправить доказательства о забаненном игроке можно, только если он согласился на передачу данных о потреблении.
- В уведомлении Apple REFUND_REVERSED сказано, что если ваше приложение отозвало контент или услуги из-за возврата, их нужно восстановить. Это противоречит любой политике, которая банит игроков за возврат.
- В Google Play разработчик может вернуть деньги за заказ и сразу закрыть доступ, вызвав orders.refund с revoke, равным true, но заказы старше 3 лет вернуть нельзя, а израсходованные предметы должно обрабатывать ваше собственное приложение.
- Google Play запрашивает вашу позицию по чарджбэку через orders.reviewrefund в течение 24 часов, а для заказов, оформленных после 3 августа 2026 года, проигранный чарджбэк обойдётся вам в цену покупки за вычетом сервисного сбора Play плюс комиссии банка за чарджбэк.
Бан закрывает игроку доступ к вашей игре, но никак не влияет на его покупки. Обычно следом приходит запрос забаненного игрока на возврат средств, и он идёт в Apple или Google, а не к вам. Каждый магазин решает его по своим правилам, и читер, который хочет вернуть деньги, для этой очереди просто ещё один запрос на возврат. Планируйте бан с учётом этого, потому что сам бан это единственная часть спора, которую вы полностью контролируете.
Бан и возврат это два отдельных решения
Ваши условия использования регулируют аккаунт. Правила магазина регулируют платёж. Бан это ваше решение о том, кто может играть. Возврат это решение Apple или Google о том, вернутся ли деньги. Ни одно из решений не отменяет другое, и магазин никогда не спрашивает, забанили ли вы кого-то, прежде чем принять решение.
Крупные издатели говорят об этом прямо. Страница поддержки Riot по Wild Rift сообщает игрокам, что из-за особенностей сторонних магазинов приложений Riot не может сама оформить возврат в магазине и что если Apple, Google или Samsung отказывают в возврате, Riot больше ничего сделать не может. В таком положении находится любой мобильный разработчик. Повлиять на решение магазина вы можете только в двух местах и только тогда, когда магазин сам об этом попросит.
| Путь возврата | Кто решает | Можно ли отправить доказательства | Ваш срок |
|---|---|---|---|
| Запрос на возврат в App Store | Apple | Да, через Send Consumption Information после CONSUMPTION_REQUEST | 12 часов |
| Возврат в Google Play в первые 48 часов | Нет | Нет | |
| Возврат в Google Play после 48 часов | Вы, по своей политике и местному законодательству | Неприменимо | Неприменимо |
| Чарджбэк в Google Play, требующий проверки разработчиком | Google, затем банк | Да, через orders.reviewrefund | 24 часа |
| Чарджбэк по карте за покупку в App Store | Apple и банк | Нет | Нет |
Что вы можете сообщить Apple о забаненном игроке
Apple отправляет уведомление CONSUMPTION_REQUEST, когда покупатель просит возврат за продукт любого типа, от расходуемых покупок до автовозобновляемых подписок. На ответ через Send Consumption Information у вас 12 часов. Apple говорит, что учитывает эту информацию при принятии решения наряду с другими факторами, и ваш refundPreference один из них.
Тело запроса небольшое. В нём есть customerConsented, consumptionPercentage, deliveryStatus, refundPreference и sampleContentProvided. И всё. Ничто в нём не описывает поведение игрока, поэтому сообщить Apple, что аккаунт забанен за читерство, нельзя. Сообщить Apple можно, какая часть покупки использована и предпочли бы вы отказ в возврате.
Значения deliveryStatus для «забанен» не существует
Apple определяет deliveryStatus как признак того, доставило ли приложение встроенную покупку (In-App Purchase), которая работает правильно. Значения: DELIVERED, UNDELIVERED_QUALITY_ISSUE, UNDELIVERED_WRONG_ITEM, UNDELIVERED_SERVER_OUTAGE и UNDELIVERED_OTHER. Если статус не DELIVERED, Apple требует, чтобы consumptionPercentage было равно 0, иначе запрос завершится ошибкой. Подумайте, прежде чем помечать покупку забаненного игрока как недоставленную. Так вы сообщите Apple, что покупатель ничего не получил, а это самый сильный довод в пользу возврата.
От согласия зависит, можете ли вы вообще ответить
Сервер Apple отклоняет ConsumptionRequest с ошибкой HTTP 400 InvalidCustomerConsentedError, если customerConsented имеет любое значение, кроме true. В документации Apple также описано, что должен содержать запрос согласия, например понятное пояснение, что данные покупателя передаются Apple для рассмотрения возврата и что он может отозвать согласие. Если игрок не давал согласия или отозвал его, отправить вам нечего. Собирайте согласие при регистрации, а не после бана.
Что происходит, если Apple отменяет возврат
Уведомление Apple REFUND_REVERSED означает, что App Store отменил ранее одобренный возврат из-за спора, который инициировал покупатель. Документация Apple говорит конкретно: если ваше приложение отозвало контент или услуги из-за возврата, их нужно восстановить. Поэтому правилу, которое банит каждого, кто получил возврат, нужен путь отката. Привяжите бан к событию возврата, чтобы его отмена могла аккуратно снять бан.

Что вы можете сделать в Google Play
Страница Google о возвратах сообщает покупателям, что в зависимости от обстоятельств они могут получить возврат в течение 48 часов после встроенной покупки, а после 48 часов им следует обращаться к разработчику. Там же сказано, что вернуть товар за возврат средств можно только один раз и что возвращённый товар у покупателя изымается. Значит, забаненный игрок, который обратился в Google в первые 48 часов, получает решение Google. После этого запрос попадает к вам.
Верните деньги и отзовите покупку сами
Метод Google orders.refund возвращает деньги за подписку или встроенный заказ. Установите revoke в true, и доступ к товару закроется сразу, а регулярная подписка перестанет продлеваться. Google указывает два ограничения. Заказы старше 3 лет вернуть нельзя, а израсходованные встроенные товары должно обрабатывать ваше приложение, потому что Google не может забрать валюту, которую игрок уже потратил. Если вы решили вернуть деньги забаненному игроку, чтобы закрыть вопрос, отзовите доступ в том же вызове, чтобы предмет у него не остался.
Сразу отклоняйте покупки с забаненного аккаунта
Забаненный игрок, который покупает снова, это реальный риск, если ваш клиент всё ещё показывает магазин. Руководство Google по биллингу говорит, что если покупка не прошла ваши проверки на право доступа, мошенничество или злоупотребления, её не следует ни выдавать, ни подтверждать. Если переждать трёхдневное окно подтверждения, заказ технически будет возвращён, но Google советует на это не полагаться. Вместо этого отзовите и верните деньги через API: purchases.subscriptionsv2.revoke с полным возвратом для подписок или orders.refund с revoke, равным true, для разовых продуктов.
Ответьте на проверку чарджбэка в течение 24 часов
Когда чарджбэк в Google Play требует проверки разработчиком, Google отправляет PendingRefundReviewNotification и даёт вам 24 часа, чтобы вызвать orders.reviewrefund. Google учитывает только ваш первый вызов. Тело принимает refundPreference со значением DECLINE, APPROVE или NEUTRAL, флаг sampleContentProvided, необязательное значение consumptionPercentageMilliunits и до 1000 consumptionUsageEvents, каждое из которых может содержать ваш obfuscatedAccountId, время потребления и описание того, что было использовано. Доказательством служат события использования, записанные до бана. Событий после бана нет, поэтому сохраняйте историю, когда закрываете аккаунт.
Во что обходится возврат средств забаненному игроку
Сам бан вам ничего не стоит. Возврат, который за ним следует, может обойтись вам тремя способами. Во-первых, выручку, полученную с покупки, удержат из будущей выплаты. Во-вторых, расходы, которые эта покупка уже вызвала, остаются оплаченными. В-третьих, в Google Play к проигранному чарджбэку теперь добавляется комиссия банка.
- Вычисления: каждый матч, сессия и серверная симуляция, которые игрок запускал благодаря возвращённой покупке, это мощности, за которые вы уже заплатили.
- Вызовы API: античит-проверки, вызовы матчмейкинга и любые сторонние сервисы с оплатой за запрос были израсходованы до бана.
- Хранение: инвентари, повторы и логи, которые вы храните как доказательства для бана, стоят денег всё время, пока вы их храните.
- Выплаты: если покупки игрока профинансировали призы, доли выручки авторов или партнёрские комиссии, эти деньги уже ушли с вашего счёта и вместе с возвратом не вернутся.
Стоит ли банить игрока за запрос на возврат?
Многие игры делают нечто подобное. Страницы поддержки Riot советуют игрокам Wild Rift, забаненным после ухода баланса в минус, выполнить шаги по чарджбэку, чтобы вернуться в игру. Заблокировать траты, которые были отменены, вполне обоснованно. Банить без разбора каждого, кто просит возврат, обосновать сложнее, и регуляторы по защите прав потребителей это заметили.
В июле 2017 года Корейское агентство по защите прав потребителей (Korea Consumer Agency) потребовало от Niantic пересмотреть условия Pokémon GO, которые сочло несправедливыми, в том числе удаление аккаунтов без возврата средств. Агентство заявило, что такая практика может нарушать законное право потребителя отменять покупки. Это один регулятор и один случай, но это ясный сигнал, что принцип «мы вас забанили, поэтому вы теряете всё» можно оспорить.
Чек-лист бана, который выдержит запрос на возврат
- Записывайте потребление по каждой покупке с метками времени заранее, до того как оно понадобится. И Apple, и Google спрашивают об использовании, а не о поведении.
- Собирайте согласие на передачу данных о потреблении при регистрации, чтобы иметь право ответить на CONSUMPTION_REQUEST забаненного игрока.
- Указывайте deliveryStatus честно. Не называйте доставленный товар недоставленным только потому, что позже забанили аккаунт.
- Сохраняйте историю покупок и использования забаненного аккаунта, а не удаляйте её вместе с аккаунтом.
- Блокируйте новые покупки в магазине с забаненных аккаунтов, а те, что всё же проскочили, возвращайте и отзывайте.
- Связывайте записи о банах с событиями возврата, чтобы REFUND_REVERSED мог восстановить ровно то, что забрал возврат.
Частые вопросы
- Может ли забаненный игрок всё равно получить возврат от Apple или Google?
- Да. Бан в вашем приложении не меняет положение игрока в магазине. Apple решает о возвратах в App Store, Google решает о возвратах в Play, запрошенных в течение 48 часов, а игрок также может оспорить списание в своём банке. Право голоса у вас есть только тогда, когда Apple отправляет CONSUMPTION_REQUEST или Google запрашивает проверку чарджбэка.
- Могу ли я сообщить Apple, что забанил игрока за читерство?
- Нет. У ConsumptionRequest от Apple пять полей: customerConsented, consumptionPercentage, deliveryStatus, refundPreference и sampleContentProvided. Ни одно из них не описывает поведение игрока. Вы можете сообщить, какая часть покупки использована, и установить refundPreference в DECLINE, а Apple учитывает это предпочтение как один из нескольких факторов.
- Стоит ли самому вернуть деньги забаненному игроку в Google Play?
- Можно, и если вы это делаете, вызовите orders.refund с revoke, равным true, чтобы возврат и потеря доступа произошли одновременно. Google не возвращает деньги за заказы старше 3 лет, а валюту, которую игрок уже израсходовал, должно обрабатывать ваше приложение, поскольку Google не может её забрать.
- Что происходит с баном, если Apple отменяет возврат?
- Apple отправляет уведомление REFUND_REVERSED и указывает, что ваше приложение должно восстановить весь контент или услуги, отозванные из-за возврата. Если возврат был единственной причиной ограничить аккаунт, снимите это ограничение. Бан за читерство действует сам по себе и с возвратом не связан.
- Законно ли банить игроков, которые запрашивают возврат?
- Это зависит от того, где находятся ваши игроки, и это рискованнее, чем кажется. В 2017 году Корейское агентство по защите прав потребителей (Korea Consumer Agency) заявило, что удаление аккаунтов Pokémon GO без возврата средств может нарушать законное право потребителей отменять покупки. Отзыв предметов, за которые вернули деньги, обычная практика. Наказание за сам запрос на возврат провоцирует именно такие претензии.
Источники и дополнительное чтение
- App Store Server API: Send Consumption Information
- App Store Server API: ConsumptionRequest
- App Store Server Notifications: notificationType
- Google Play Developer API: orders.refund
- Google Play Developer API: orders.reviewrefund
- Google Play Billing: Integrate the library, handle rejected or unfulfilled purchases
- Google Play Help: Apps, games, and in-app purchases refund policies
- Play Console Help: Updates to refund protection and chargeback cost responsibility
- Riot Games Support: Cash refunds in Wild Rift
- Korea JoongAng Daily: Pokemon Go panned for unfair refunds policy (July 3, 2017)
RefundHalt
Автопилот возвратов для App Store и Google Play
Читайте дальше
Чрезмерные запросы на возврат обходятся дороже самих возвратов: оба магазина приложений считают их сигналом качества
Правило 5.6.4 Apple прямо называет чрезмерные запросы на возврат признаком того, что приложение не соответствует стандартам качества, а соглашение Google о распространении позволяет удалять приложения новых разработчиков по доле возвратов. Разбираем, что пишет каждый магазин, во что обходится удаление и как не попасть под удар.
Проверяйте серверные уведомления App Store, прежде чем реагировать на возврат, ведь отправить запрос на ваш URL вебхука может кто угодно
Уведомление о возврате остается обычным HTTPS-запросом, пока вы не проверили его подпись. Рассказываем, как проверять серверные уведомления App Store и сообщения RTDN из Google Play, что подписывает каждый магазин и во что обходится поддельный или ошибочно отклоненный возврат.