Представьте: пользователь оформляет подписку, меняет устройство, переустанавливает приложение и внезапно теряет доступ. Это простой способ потерять доверие.
Именно для этого и существует кнопка «Восстановить покупку». Она может показаться необязательной, но на самом деле является обязательной, особенно для приложений, работающих по подписке.
Эта опция позволяет пользователям восстановить доступ к ранее приобретенному контенту без повторной оплаты.
Это небольшая кнопка, которая играет большую роль в обеспечении доверия, соблюдения нормативных требований и удержания пользователей.
Почему это важно
- Доверие пользователей: если кто-то заплатил один раз, он ожидает сохранить доступ независимо от устройства.
- Нагрузка на службу поддержки: запутанная или отсутствующая логика восстановления = недовольные пользователи + больше обращений в службу поддержки.
- Соответствие требованиям App Store: Apple и Google ожидают, что вы включите опцию восстановления для определенных типов продуктов.
Какие покупки можно восстановить
Восстанавливаемые покупки включают:
- Непотребляемые товары: одноразовые покупки, такие как пожизненный доступ или премиум-функции.
- Автоматически продлеваемые подписки: ежемесячные/ежегодные планы, которые синхронизируются между устройствами.
- Непродлеваемые подписки: доступ на фиксированный срок (например, 3-месячный пропуск).
Не подлежит восстановлению:
- Расходные материалы, такие как монеты, дополнительные жизни или одноразовые ускорения. Они предназначены для использования.
Как работает кнопка «Восстановить покупку»
- UI/UX. Добавьте кнопку «Восстановить покупку» — обычно в настройках или непосредственно на платежной стене.
- Триггер. При нажатии запустите восстановление с помощью:
- SKPaymentQueue.restoreCompletedTransactions() для iOS
- BillingClient.queryPurchaseHistoryAsync() для Android
- Или ваша бэкэнд-логика, если вы управляете правами на стороне сервера
- Обновите доступ. После завершения восстановления обновите статус подписки пользователя и разблокируйте контент.
- Добавьте полезную копию. Простая строка поможет уменьшить путаницу: «Используйте это, если вы сменили устройство или переустановили приложение».
- Избегайте избыточности. Если у пользователя уже есть доступ, отключите кнопку или полностью скройте ее.
- Логика учетной записи. Для приложений с входом в систему: привяжите подписки к учетным записям пользователей и синхронизируйте их через бэкэнд, чтобы упростить восстановление данных на разных устройствах.
Как восстановление покупок работает на iOS
На iOS восстановление покупок обновляет чек приложения и повторно предоставляет продукты, привязанные к Apple ID пользователя. Процесс выполняется тихо в фоновом режиме, а взаимодействие должно быть простым и понятным.
Вот как это сделать с помощью нативного StoreKit (до StoreKit 2):
1. Запустите процесс восстановления
Вызовите restoreCompletedTransactions(), чтобы запустить процесс восстановления:
SKPaymentQueue.default().restoreCompletedTransactions()Это дает StoreKit команду найти все прошлые покупки, привязанные к текущему Apple ID.
2. Обработайте восстановленные транзакции
Прослушайте очередь платежей и проверьте состояния транзакций .restored. Затем разблокируйте контент и пометьте транзакцию как завершенную:
func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
for transaction in transactions {
if transaction.transactionState == .restored {
// Unlock access based on restored product
unlockContent(transaction: transaction)
SKPaymentQueue.default().finishTransaction(transaction)
}
}
}Don’t forget to call finishTransaction(_:). Otherwise, StoreKit may continue to retry the same transaction.
3. Корректно обработайте ошибки
Восстановление может завершиться неудачей из-за недействительных чеков, проблем с сетью или отсутствия подходящих покупок у данного Apple ID. Покажите пользователю понятное сообщение и запишите ошибку в лог для отладки.
Using Adapty SDK? We handle all of this, including receipt validation and edge cases, with a single method call.
Как восстановление покупок работает на Android
На Android восстановление покупок означает проверку истории покупок пользователя через Google Play и повторную активацию непотребляемых продуктов или активных подписок. Встроенной кнопки «восстановить», как на iOS, здесь нет. Это значит, что вам нужно реализовать это вручную через billing API.
Вот как это сделать с помощью Google Play Billing Library:
1. Запрос истории покупок
Используйте queryPurchaseHistoryAsync() для получения информации о прошлых покупках пользователя:
billingClient.queryPurchaseHistoryAsync(
BillingClient.SkuType.SUBS
) { billingResult, purchaseHistoryList ->
if (billingResult.responseCode == BillingClient.BillingResponseCode.OK && purchaseHistoryList != null) {
for (purchase in purchaseHistoryList) {
// Restore subscription access
restoreEntitlement(purchase)
}
}
}Вы также можете запросить информацию о покупках в приложении, передавая BillingClient.SkuType.INAPP.
2. Валидация и разблокировка
После получения истории покупок проверьте чеки (в идеале на стороне сервера) и предоставьте доступ соответствующим образом. Обязательно проверяйте данные подписи для предотвращения подмены.
Adapty берет на себя валидацию покупок, логику доступа пользователей и кроссплатформенную синхронизацию прямо из коробки.
3. Рекомендации по UX
Поскольку пользователи Android не ожидают кнопки «Восстановить покупки», вы можете:
- Автоматически запускать восстановление при входе в систему или запуске приложения
- Или предложить незаметную опцию в Настройках для прозрачности
В любом случае убедитесь, что логика восстановления работает тихо в фоновом режиме и обновляет интерфейс при восстановлении доступа.
Заключение
Кнопка «Восстановить покупку» может выглядеть просто, но она играет ключевую роль в пути пользователя к подписке.
- Она укрепляет доверие.
- Она снижает отток.
- Она обеспечивает соответствие требованиям.
Сделайте её заметной. Сделайте её рабочей. И сделайте её понятной.




