In-App Purchase (IAP) — это механизм внутриигровых покупок, который позволяет пользователям приобретать цифровые товары и услуги непосредственно внутри мобильного приложения. Платформы iOS и Android предоставляют встроенные API для проведения платежей без передачи данных банковских карт разработчику. По данным документации Apple StoreKit, IAP обрабатывает более 500 миллиардов долларов транзакций ежегодно через App Store и Google Play.
Главное
In-App Purchase (IAP) — это технология, позволяющая продавать цифровые товары и услуги внутри мобильного приложения. Платежи обрабатываются через App Store (на iOS) или Google Play (на Android), которые взимают комиссию за проведение транзакции. Разработчик получает средства за вычетом комиссии магазина.
Apple взимает комиссию 30% (15% для малого бизнеса с доходом до 1 миллиона долларов). Google Play также взимает 30% (15% на первый 1 миллион долларов дохода разработчика). С 2024 года Google тестирует программу User Choice Billing, которая позволяет разработчикам использовать альтернативные платёжные системы.
IAP обязателен для продажи цифровых товаров в приложениях согласно политикам App Store и Google Play. Физические товары, услуги (заказ такси, доставка еды) и peer-to-peer платежи могут использовать сторонние платёжные системы.
App Store и Google Play поддерживают три основных типа In-App Purchase. Каждый тип предназначен для разных моделей монетизации. Выбор типа продукта влияет на логику восстановления покупок, управление подписками и поведение при повторной установке приложения.
Consumable — это товары, которые можно приобретать многократно и которые расходуются в процессе использования. Типичные примеры: игровая валюта (монеты, алмазы), дополнительные жизни, ускорители, расходуемые бустеры. Consumable не восстанавливаются при переустановке приложения — разработчик сам управляет балансом каждого пользователя на своём сервере.
Non-Consumable — это товары, которые покупаются один раз и остаются доступными навсегда. Примеры: полная версия приложения, премиум-уровни, разблокировка фильтров, удаление рекламы. Non-consumable продукты восстанавливаются через Restore Purchases API: после переустановки пользователь может вернуть ранее купленные товары без повторной оплаты.
Auto-Renewable Subscription — это регулярные платежи за доступ к контенту или сервису на определённый период (неделя, месяц, год). Подписка автоматически продлевается, пока пользователь не отменит её в настройках аккаунта. Магазины предоставляют серверные уведомления (App Store Server Notifications, Google Play Developer Notifications) об изменении статуса подписки: продление, истечение, возврат.
Настройка In-App Purchase начинается в панелях разработчика: App Store Connect для iOS и Google Play Console для Android. Для каждого продукта указывается идентификатор (Product ID), название, описание, тип и цена в долларах США с автоматической конвертацией в региональные валюты. После создания продукт проходит модерацию магазина.
В App Store Connect продукты IAP создаются в разделе Features → In-App Purchases. Для каждого продукта выбирается тип (consumable, non-consumable, auto-renewable subscription, non-renewing subscription) и заполняются локализованные названия. Для подписок дополнительно настраиваются группы (Subscription Groups) — группы взаимозаменяемых подписок.
В Google Play Console managed products настраиваются в разделе Monetise → Products → In-app products. Google использует термины Managed Product (аналог non-consumable) и Subscription. Для consumable покупок на Android используется отдельный флаг consume, который сбрасывает продукт для повторной покупки.
Модерация IAP-продуктов в среднем занимает 24–48 часов в App Store и несколько часов в Google Play. Изменения цен применяются немедленно без повторной модерации. Product ID нельзя изменить после создания — только удалить и создать заново.
Receipt validation (проверка чека) — обязательный этап обработки In-App Purchase. Клиентское приложение отправляет чек (receipt) на собственный сервер, сервер проверяет его через API Apple (https://buy.itunes.apple.com) или Google (https://androidpublisher.googleapis.com) и только после успешной валидации зачисляет товар пользователю.
Без серверной валидации злоумышленник может подменить ответ от магазина и получить товар бесплатно. Client-side validation небезопасна, поскольку выполняется в среде, контролируемой пользователем. Серверная проверка гарантирует, что чек подлинный и оплата прошла успешно. Для Apple проверка выполняется через verifyReceipt endpoint (production или sandbox), для Google — через Android Publisher API. Оба магазина возвращают подтверждение в формате JSON.
Apple возвращает в чеке данные о покупке: product_id, transaction_id, purchase_date, expiration_date (для подписок). Google возвращает аналогичные поля через API Purchases.products.get или Purchases.subscriptions.get. Сервер должен хранить transaction_id каждого чека и отклонять повторные запросы с тем же ID для защиты от replay-атак.
Интеграция In-App Purchase требует подключения платформенных библиотек: StoreKit 2 на iOS и Billing Library 7+ на Android. API позволяют запрашивать список продуктов, инициировать покупку, обрабатывать результат и восстанавливать ранее приобретённые товары.
import StoreKit
func purchaseProduct(productID: String) async throws {
guard let product = try await Product.products(for: [productID]).first else { return }
let result = try await product.purchase()
switch result {
case .success(let verification):
let transaction = try verification.payloadValue
await validateReceipt(transaction)
await transaction.finish()
default:
break
}
}
import com.android.billingclient.api.BillingClient
import com.android.billingclient.api.BillingFlowParams
val billingClient = BillingClient.newBuilder(context)
.setListener { billingResult, purchases ->
if (billingResult.responseCode == BillingClient.BillingResponseCode.OK) {
purchases?.forEach { purchase ->
validateReceipt(purchase)
}
}
}
.build()
val params = BillingFlowParams.newBuilder()
.setProductDetails(productDetails)
.build()
billingClient.launchBillingFlow(activity, params)
const response = await fetch('https://buy.itunes.apple.com/verifyReceipt', {
method: 'POST',
body: JSON.stringify({
'receipt-data': receiptBase64,
'password': 'SHARED_SECRET'
})
})
const data = await response.json()
if (data.status === 0) {
// Чек подтверждён — зачисляем товар
await grantProduct(data.receipt.product_id)
}
Монетизация через In-App Purchase требует продуманной стратегии ценообразования и UX. Пользователи более склонны к первой покупке, если им предлагается привлекательный начальный пакет (starter pack) по низкой цене. Apple и Google рекомендуют показывать цену продукта до момента подтверждения покупки.
Subscription onboarding — критический этап конверсии. Покажите пользователю ценность подписки до запроса оплаты: бесплатный пробный период, сравнение тарифов, список преимуществ. По данным исследований, бесплатный пробный период (free trial) увеличивает конверсию в платящих пользователей на 25–40%.
Restore Purchases обязателен для non-consumable продуктов и подписок. Кнопка восстановления должна быть доступна в настройках приложения или на экране оплаты. Google и Apple могут отклонить приложение, если восстановление покупок не реализовано для соответствующих типов IAP.
Grace Period — период отсрочки для подписок, в течение которого пользователь сохраняет доступ после сбоя оплаты. iOS и Android поддерживают grace period до 30 дней. Включение grace period снижает отток (churn rate) на 10–15%.
A/B-тестирование цен IAP — важная практика монетизации. App Store Connect поддерживает локальные цены (Price Tiers) с возможностью менять цену без повторной модерации продукта. Google Play Console позволяет настраивать до 5 base-планов с разными ценами для одного subscription product. Рекомендуется тестировать не менее двух ценовых точек: текущую и новую. Тестирование проводится в течение 2–4 недель на выборке не менее 1000 пользователей на каждую ценовую точку.
Store Review и Rejection-менеджмент — обязательный этап публикации приложения с IAP. Apple особенно тщательно проверяет приложения с auto-renewable subscriptions: необходимо предоставить тестовый аккаунт с активной подпиской, показать экран отмены подписки и реализовать Restore Purchases. Google Play менее строг, но запрашивает подтверждение прав на цифровой контент. Рекомендуется добавить примечание для ревьюера (Review Notes) с описанием логики IAP.
Часто задаваемые вопросы
In-App Purchase (IAP) — это механизм покупки цифровых товаров внутри мобильного приложения. Платёж обрабатывается через App Store или Google Play, которые удерживают комиссию 30% (15% для малого бизнеса) и переводят остаток разработчику.
Существует три типа IAP: consumable (расходуемые — монеты, жизни), non-consumable (постоянные — удаление рекламы, полная версия) и auto-renewable subscription (автопродление — доступ к контенту на период). Non-consumable поддерживают восстановление покупок.
Основной метод защиты — server-side receipt validation. Клиент отправляет чек на ваш сервер, сервер проверяет его через API Apple или Google. Без серверной валидации злоумышленник может подменить ответ магазина и получить товар бесплатно.
Настройка IAP включает: создание продуктов в App Store Connect или Google Play Console, подключение StoreKit (iOS) или Billing Library (Android), реализацию покупки и серверную проверку чека. Каждый продукт проходит модерацию магазина.
Apple взимает 30% (15% для разработчиков с доходом до 1 млн долларов). Google Play также взимает 30% (15% на первый 1 млн). С 2024 года Google тестирует альтернативные платёжные системы через User Choice Billing. Разработчик может выбрать стороннего платёжного провайдера, но должен платить Google сервисный сбор 11–12%.
Итоги
Мы разработаем мобильное приложение под ключ
IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.
Читайте также