Усі статті
Deep dive8 хв читання

Повернення коштів за платний застосунок ніколи не доходить до вашого сервера, тому помітити його має сам застосунок

Повернення коштів за застосунки з оплатою під час купівлі оминають усі сповіщення, які слухає ваш сервер. 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 PlayApp 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 надходить через сповіщення, створені для вбудованих продуктів і підписок. Жоден магазин не документує процесу надання доказів для купівлі самого застосунку.

Джерела та додаткове читання

RefundHalt

Автопілот повернень для App Store і Google Play

Читайте далі

Наступний запит на повернення вже в дорозі.

Налаштуйте RefundHalt за час, потрібний, щоб прочитати черговий лист у підтримку про повернення, яке ви не встигли оскаржити.