Все статьи
Deep dive8 мин чтения

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

Возврат за non-consumable, будь то пожизненная разблокировка, отключение рекламы или постоянный pro-уровень, это единственный возврат, который можно по-настоящему обратить, потому что функцию можно забрать обратно. Вот сколько это стоит в App Store и Google Play, почему Apple никогда не спрашивает вас первым и как сделать так, чтобы revoke сработал.

Открытый латунный навесной замок рядом с чеком и одним ключом, иллюстрирующий возврат за non-consumable, когда разработчик забирает разблокированную функцию обратно

Главное

  • Non-consumable, это разовая покупка, которую клиент сохраняет навсегда: отключение рекламы, пожизненная pro-разблокировка, постоянная функция. В отличие от consumable, при выдаче ничего не сгорает, поэтому возврат за non-consumable, это тот единственный возврат, когда можно вернуть деньги и одновременно забрать функцию обратно.
  • Это делает возврат за non-consumable самой чистой из ваших потерь. Вы теряете цену продажи, а магазин отменяет свою комиссию, но здесь нет вычислений, нет вызовов API и нет выданного результата, за который вы заплатили и который нельзя вернуть. Потеря ограничена ценой.
  • Загвоздка в цене. Пожизненная разблокировка обычно ваш самый дорогой товар по единой цене, часто в десять-тридцать раз дороже месячной подписки, поэтому один возврат за non-consumable, это более крупный единичный удар, чем почти любой другой возврат на вашем аккаунте.
  • В App Store Apple решает каждый возврат за non-consumable самостоятельно через reportaproblem.apple.com, и для non-consumable нет CONSUMPTION_REQUEST. Apple отправляет такой запрос доказательств только для consumable и автопродлеваемых подписок, поэтому по non-consumable у вас нет ни окна для аргументов, ни какого-либо канала для доказательств.
  • Apple всё же сообщает вам, что это произошло. Уведомление App Store Server Notification типа REFUND приходит для consumable, non-consumable и не продлеваемых подписок, а подписанная транзакция несёт revocationDate и revocationReason. StoreKit также убирает продукт из Transaction.currentEntitlements, и это ваш сигнал отключить функцию.
  • В Google Play вы можете вернуть деньги за non-consumable сами из Play Console или через API orders.refund, а передача revoke со значением true немедленно прекращает доступ. Собственный 48-часовой самообслуживаемый возврат Google проходит без вашего участия, а неподтверждённая разовая покупка автоматически возвращается и отзывается через 3 дня.
  • Ловушка в том, чтобы ограничивать доступ на клиенте. Если возвращённый non-consumable всё ещё помечен как приобретённый в кэшированном чеке или в клиентском флаге, клиент сохраняет функцию после того, как деньги ушли, поэтому вы теряете цену и продолжаете предоставлять разблокировку. Проверяйте право доступа на своём сервере против отзыва, при каждом запуске.

Продаёте пожизненную разблокировку, отключение рекламы или постоянный pro-уровень, значит, вы продаёте non-consumable, ту единственную покупку, где возврат действительно может обратить то, что вы дали. Возврат за consumable забирает деньги, которые вы уже потратили на выдачу монет или кредитов. Возврат за подписку обращает доступ, который вы всё равно сдавали в аренду. Возврат за non-consumable иной, и в одном узком смысле это самый добрый возврат, который вам достанется: клиент не сохраняет ничего. Вы возвращаете цену, забираете функцию, и, в отличие от consumable, на вашей стороне гроссбуха не остаётся счёта за вычисления. Это хорошая новость. Плохая новость в том, что non-consumable обычно самая дорогая единичная вещь, которую вы продаёте, поэтому тот единственный возврат, который можно чисто обратить, ещё и один из самых крупных.

Что такое non-consumable и почему его возврат ведёт себя иначе

Магазин распределяет каждую покупку по типу, и тип решает, что возврат может, а что не может отменить. Non-consumable стоит на противоположном конце от consumable.

Non-consumable покупается один раз и остаётся навсегда

Встроенная покупка non-consumable, это постоянное право доступа. Клиент покупает её один раз и владеет ею всю жизнь аккаунта: отключение рекламы, пожизненный pro-уровень, разблокировка полной версии, постоянный набор функций. Apple бесплатно восстанавливает её на всех устройствах клиента, а Google Play привязывает её к аккаунту. Нет ни продления, ни истечения, поэтому ценность не отмеряется со временем и не расходуется при активации. Она просто включается и остаётся включённой.

При выдаче ничего не тратится, поэтому возврат может обратить её чисто

Это и есть вся причина, почему возврат за non-consumable иной. Когда вы выдаёте пачку монет, монеты тратятся, и ваш счёт за вычисления реален и потрачен. Когда вы выдаёте non-consumable, вы переключаете флаг. Нет затрат на каждое использование, привязанных к продаже, поэтому, когда деньги обращаются, вы можете переключить флаг обратно и остаться почти в целости. Магазин даже помогает: на обеих платформах возвращённый non-consumable отзывается, клиент теряет доступ и не может купить его снова и вернуть деньги во второй раз.

Во что вам на самом деле обходится возврат за non-consumable

Число, которое появляется в ваших отчётах, это цена продажи, уходящая обратно. По non-consumable это число, это почти вся история, что и отличает его от consumable, где цена продажи лишь начало потери.

ЗатратаКогда вы её платитеВозвращается при возврате
Цена покупкиПри покупкеНет, вся сумма обращается клиенту
Комиссия магазина с продажиПри покупкеОбычно да, магазин отменяет свою долю
Вычисления или вызовы API для выдачи разблокировкиИх нет, вы переключаете флагВозвращать нечего, ничего не потеряно
Сама функцияВы предоставили доступДа, revoke забирает её обратно
Банковская комиссия за chargeback, если спор уходит в банкПосле списанияНет, и в Google Play теперь вы платите и её

Потеря, это цена, и цена, это проблема

Поскольку нет затрат на выполнение, которые остались бы неприкаянными, возврат за non-consumable обходится вам в цену продажи и почти ни во что больше. Беда в масштабе. Возврат месячной подписки возвращает несколько долларов. Пожизненная разблокировка часто оценивается в 30, 60 или 120 долларов именно потому, что клиент платит один раз, поэтому один возврат за non-consumable может равняться году дохода от подписки другого пользователя. Вы увидите их гораздо меньше, чем возвратов по подпискам, но каждый бьёт сильнее, и небольшая группа пожизненных возвратов может перевесить насыщенный месяц обычного оттока.

Две руки возвращают маленький латунный ключ через стол, а деньги скользят обратно в другую сторону, иллюстрируя возврат за non-consumable, когда функцию забирают, а цену возвращают

Сторона App Store, где Apple никогда не спрашивает вас первым

В App Store у вас нет переключателя возврата, а для non-consumable нет и канала для доказательств. О каждом из этих двух стоит сказать точно, потому что второй удивляет разработчиков, которые полагали, что поток consumption покрывает всё.

Для non-consumable нет CONSUMPTION_REQUEST

Apple решает каждый возврат сама, по одному запросу за раз, через reportaproblem.apple.com. Для consumable, а с 2024 года и для автопродлеваемой подписки, Apple отправляет на ваш сервер CONSUMPTION_REQUEST и даёт вам 12 часов, чтобы отправить обратно сведения о потреблении. Non-consumable не получает ничего из этого. Нет запроса о потреблении, нет 12-часового окна и нет поля для заполнения, потому что Apple считает постоянную разблокировку либо принадлежащей, либо нет, и измерять тут нечего. По возврату за non-consumable у вас нет права голоса. У вас есть уведомление.

Уведомление REFUND, это то, как вы узнаёте, что это произошло

Что вы действительно получаете, это уведомление App Store Server Notification типа REFUND. Apple отправляет его для consumable, non-consumable и не продлеваемых подписок, а подписанная транзакция внутри несёт revocationDate, отметку времени возврата, и revocationReason. StoreKit выводит тот же факт на устройстве: возвращённый продукт выпадает из Transaction.currentEntitlements, и StoreKit вызывает ваш обработчик отзыва прав доступа, чтобы приложение могло отключить функцию. Относитесь к уведомлению как к триггеру, а к проверке права доступа как к источнику истины. Когда revocationDate установлен, разблокировка окончена.

Сторона Google Play, где вы можете вернуть деньги, но быстрый путь обходит вас

Google Play даёт разработчику больше прямого контроля, чем Apple, хотя самые болезненные возвраты всё же происходят без вас.

Вы можете вернуть деньги и отозвать non-consumable сами

Вы можете оформить возврат за non-consumable из Play Console или методом orders.refund в Play Developer API по любому заказу младше трёх лет. Этот вызов принимает параметр revoke, и установка его в true немедленно прекращает доступ к встроенному товару. Google Play затем считает, что клиент больше не владеет продуктом, удаляет возвращённое приложение и блокирует цикл повторной покупки и возврата по тому же товару. Это то единственное место, где у вас есть чистый рычаг: возврат плюс revoke действительно забирают постоянную разблокировку обратно.

48-часовой и 3-дневный пути проходят без вас

Два возврата в Google Play по non-consumable происходят без вашего участия. В течение 48 часов с момента покупки клиент может получить самообслуживаемый возврат прямо из магазина, и вас не спрашивают. Отдельно, если ваш сервер так и не подтверждает покупку в течение 3 дней, Google Play автоматически возвращает за неё деньги и отзывает её, исходя из предположения, что клиент заплатил и так и не получил товар. Оба этих случая решаются до того, как вы выскажетесь, а Voided Purchases API, это то, как вы узнаёте об этом постфактум, чтобы снять право доступа.

Что это значит в деньгах, когда non-consumable становится chargeback

Возврат, это дешёвая версия потери продажи non-consumable. Chargeback, это дорогая версия, и на пожизненной цене разрыв велик.

Путь спора стоит дороже и возвращает меньше

Когда клиент идёт в свой банк, а не в магазин, продажа возвращается как chargeback, и chargeback окончателен. В App Store у вас нет окна consumption, чтобы защитить non-consumable, поэтому подавать нечего. В Google Play с 3 августа 2026 года chargeback перекладывает цену покупки за вычетом сервисного сбора Play, плюс банковскую комиссию за chargeback, на разработчика, а Google продолжает покрывать свой собственный сервисный сбор. На пожизненной разблокировке за 90 долларов это превращает чистый возврат, который вы могли бы поглотить, в более крупную, окончательную потерю с пришпиленной к ней банковской комиссией.

Удерживайте недовольного клиента на дорожке возврата

Урок тот же, к которому подталкивает каждый магазин: возврат обращает продажу и обычно возвращает комиссию, chargeback не делает ни того, ни другого и добавляет комиссию. Клиент, который может получить простой возврат, редко звонит в банк. В Google Play вы можете ответить на рассмотрение chargeback через orders.reviewrefund в течение 24 часов, и Google предлагает Review Refund API, чтобы поделиться деталями транзакции, и он мог оспорить мошеннические споры от вашего имени. Пользуйтесь этим, но не полагайтесь на это. Более дешёвый ход, это сделать честный возврат простым ещё до того, как спор начнётся.

Как терять меньше на возвратах за non-consumable

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

Проверяйте право доступа на сервере, при каждом запуске

Определяйте доступ по серверной проверке против текущего состояния транзакции, а не по кэшированному чеку или клиентскому флагу, записанному один раз при покупке. Когда приходит уведомление REFUND, или право доступа исчезает, или revoke установлен в Google Play, отключайте функцию на своей стороне. Возвращённый non-consumable, который всё ещё работает, это тот единственный случай, когда самый чистый возврат становится чистой потерей.

Наблюдайте за пожизненными и разовыми товарами как за отдельной когортой

Поскольку возвраты за non-consumable редки, но крупны, они растворяются внутри смешанного показателя возвратов. Отслеживайте их отдельно, по товару. Скопление на одном пожизненном уровне обычно указывает на что-то конкретное: цену, которая обогнала ценность, функцию, которая сломалась после обновления, или описание в магазине, которое обещало больше, чем даёт разблокировка. Читайте возвраты за non-consumable против продаж non-consumable, и причину обычно легко назвать.

Подтверждайте быстро и честно исполняйте законные возвраты

Подтверждайте каждую покупку вовремя, чтобы никогда случайно не запустить 3-дневный автовозврат, а когда возврат подлинный, забирайте функцию обратно без трения, вместо того чтобы оставлять раздражённого клиента эскалировать в свой банк. Возврат, это меньшая потеря. Chargeback, это тот, который несёт комиссию.

Коротко

Возврат за non-consumable, это тот редкий возврат, который можно действительно обратить, потому что постоянная разблокировка ничего не стоит вам при выдаче и может быть забрана прямо обратно. Вы теряете цену, магазин отменяет свою долю, и здесь нет неприкаянного счёта за вычисления, как на consumable. Сложность в том, что пожизненная разблокировка обычно ваш самый дорогой товар, поэтому каждый возврат, это крупный единичный удар, Apple решает его сама без запроса о потреблении, на который нужно отвечать, а Google Play вернёт за него деньги без вас в течение 48 часов или на отметке подтверждения в 3 дня. Проверяйте право доступа на своём сервере, отзывайте чисто, подтверждайте быстро и удерживайте недовольного клиента на дорожке возврата, а не на дорожке chargeback.

Частые вопросы

Могу ли я сам вернуть деньги за встроенную покупку non-consumable?
В Google Play, да. Вы можете вернуть деньги за non-consumable из Play Console или через API orders.refund по любому заказу младше трёх лет, а установка параметра revoke в true немедленно прекращает доступ. В App Store, нет. Apple решает каждый возврат через reportaproblem.apple.com, и для non-consumable нет CONSUMPTION_REQUEST, поэтому у вас вообще нет окна для доказательств.
Отправляет ли Apple CONSUMPTION_REQUEST при возврате за non-consumable?
Нет. Apple отправляет CONSUMPTION_REQUEST только для consumable и, с 2024 года, автопродлеваемых подписок. Non-consumable не получает ни запроса о потреблении, ни 12-часового окна, потому что Apple считает постоянную разблокировку просто принадлежащей или нет. Вы узнаёте о возврате через уведомление App Store Server Notification типа REFUND и revocationDate в транзакции, а не через запрос, на который нужно ответить.
Как мне узнать, что non-consumable клиента был возвращён?
В App Store приходит уведомление REFUND, и подписанная транзакция несёт revocationDate и revocationReason, а StoreKit убирает продукт из Transaction.currentEntitlements. В Google Play Voided Purchases API сообщает об этом, а уведомления в реальном времени отмечают отмену. В обоих случаях проверяйте право доступа на своём сервере и отключайте функцию, когда покупка отозвана.
Получу ли я свои деньги обратно чисто при возврате за non-consumable?
Чище, чем при любом другом типе возврата. Цена покупки обращается клиенту, и магазин обычно возвращает свою комиссию, но, поскольку non-consumable ничего не стоит выдать, на вашей стороне нет неприкаянного счёта за вычисления или API, как это бывает с consumable. Ваша потеря, это по сути цена продажи, при условии что вы действительно отзываете функцию.
Что произойдёт, если я не подтвержу покупку non-consumable в Google Play?
Google Play автоматически возвращает деньги и отзывает покупку, если вы не подтвердите её в течение 3 дней, исходя из предположения, что клиент заплатил и так и не получил товар. Вызывайте purchases.products.acknowledge со своего сервера, как только проверите покупку, чтобы никогда не запускать возврат, которого вы не намеревались.

Источники и дополнительное чтение

RefundHalt

Автопилот возвратов для App Store и Google Play

Читайте дальше

Deep dive8 мин чтения

Несанкционированные встроенные покупки, сделанные детьми, почти всегда возвращаются родителю, а расходы несёте вы

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

Deep dive8 мин чтения

Вы никогда не владели app refund tax, поэтому возврат стоит вам вашей доли, а не итога в чеке

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

Следующий запрос на возврат уже в пути.

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