Пользователь видит кнопку «купить» и считает, что везде она работает одинаково. На самом деле под ней три разные схемы, и от того, какая выбрана, зависит и цена, и то, кому жаловаться, если что-то пошло не так.
Три схемы
Встроенные покупки магазина. Платёж проходит через App Store или Google Play, деньги идут магазину, разработчик получает остаток за вычетом комиссии. Так обязаны продаваться цифровые товары внутри приложения: подписки, уровни, снятие ограничений.
Оплата напрямую картой. Разрешена для физических товаров и услуг из реального мира: доставка еды, такси, билеты, оплата ЖКХ. Комиссии магазина нет, есть комиссия платёжного сервиса — обычно она в разы меньше.
Оплата на сайте. Приложение остаётся витриной, деньги принимает сайт. Схема живёт на грани правил магазинов, и правила эти регулярно меняются.
Граница между первой и второй схемой — не техническая, а формальная: цифровое благо внутри приложения против товара или услуги вне его. Именно поэтому подписка на музыку идёт через магазин, а оплата поездки — нет.
Куда уходит комиссия
Магазины берут заметную долю с каждой встроенной покупки; для небольших разработчиков в ряде программ ставка ниже. Для приложения с подписками это не «издержка», а конструктивный элемент экономики: цена подписки закладывается с учётом комиссии, иначе бизнес не сходится.
Из этого следует неочевидное для пользователя: одна и та же подписка на сайте часто дешевле, чем в приложении. Разница — примерно та самая комиссия.
Возвраты, о которых не думают заранее
При встроенной покупке возврат оформляет магазин, и часто без участия разработчика. Приложение узнаёт об этом постфактум — и обязано отобрать выданное: закрыть доступ, снять премиум, вернуть ограничения. Если такой обработки нет, пользователь получает деньги обратно и сохраняет купленное.
То же и с подписками: продление, отмена, льготный период, восстановление покупок на новом устройстве — всё это отдельные состояния, и каждое надо обработать. Именно здесь чаще всего и находят ошибки при проверке приложения магазином.
Что это значит для владельца приложения
Платежи почти всегда оказываются дороже в разработке, чем ожидалось, и причина не в сложности кода. Сложность в состояниях: оплачено, но не подтверждено; подтверждено, но не доставлено; возвращено; продлено; отменено, но действует до конца периода. Каждое надо не забыть и каждое проверить.
Подробно, с примерами того, где эти состояния расходятся с реальностью, — этот разбор.
Практический вывод для пользователя
Перед оформлением подписки в приложении загляните на сайт сервиса: если там дешевле, разница почти наверняка равна комиссии магазина. А при возврате обращайтесь в магазин, а не к разработчику — деньги у магазина, и решение тоже за ним.