Реализация веб-пейволов в iOS SDK
Перед началом работы убедитесь, что вы настроили веб-пейвол в дашборде и установили Adapty SDK версии 3.6.1 или выше.
Веб-пейволы
Если вы работаете с пейволом, разработанным самостоятельно, для обработки веб-пейволов нужно использовать метод SDK. Метод .openWebPaywall:
- Генерирует уникальный URL, позволяющий Adapty связать конкретный показанный пользователю пейвол с веб-страницей, на которую он перенаправляется.
- Отслеживает момент возврата пользователя в приложение и затем с короткими интервалами запрашивает
.getProfile, чтобы определить, обновились ли права доступа профиля. Таким образом, если платёж прошёл успешно и права доступа обновлены, подписка активируется в приложении практически мгновенно.
do {
try await Adapty.openWebPaywall(for: product)
} catch {
print("Failed to open web paywall: \(error)")
}
Существуют две версии метода openWebPaywall:
openWebPaywall(product)— генерирует URL по пейволу и добавляет в URL данные о продукте.openWebPaywall(paywall)— генерирует URL по пейволу без добавления данных о продукте. Используйте этот вариант, если продукты в пейволе Adapty отличаются от продуктов в веб-пейволе.
Обработка ошибок
| Ошибка | Описание | Рекомендуемое действие |
|---|---|---|
| AdaptyError.paywallWithoutPurchaseUrl | У пейвола не настроен URL для веб-покупки | Проверьте, правильно ли настроен пейвол в дашборде Adapty |
| AdaptyError.productWithoutPurchaseUrl | У продукта отсутствует URL для веб-покупки | Проверьте настройки продукта в дашборде Adapty |
| AdaptyError.failedOpeningWebPaywallUrl | Не удалось открыть URL в браузере | Проверьте настройки устройства или предложите альтернативный способ покупки |
| AdaptyError.failedDecodingWebPaywallUrl | Не удалось корректно закодировать параметры в URL | Убедитесь, что параметры URL корректны и правильно отформатированы |
Пример реализации
class SubscriptionViewController: UIViewController {
var paywall: AdaptyPaywall?
@IBAction func purchaseButtonTapped(_ sender: UIButton) {
guard let paywall = paywall, let product = paywall.products.first else { return }
Task {
await offerWebPurchase(for: product)
}
}
func offerWebPurchase(for paywallProduct: AdaptyPaywallProduct) async {
do {
// Attempt to open web paywall
try await Adapty.openWebPaywall(for: paywallProduct)
} catch let error as AdaptyError {
switch error {
case .paywallWithoutPurchaseUrl, .productWithoutPurchaseUrl:
showAlert(message: "Web purchase is not available for this product.")
case .failedOpeningWebPaywallUrl:
showAlert(message: "Could not open web browser. Please try again.")
default:
showAlert(message: "An error occurred: \(error.localizedDescription)")
}
} catch {
showAlert(message: "An unexpected error occurred.")
}
}
// Helper methods
private func showAlert(message: String) { /* ... */ }
}
После того как пользователи возвращаются в приложение, обновите UI, чтобы отразить изменения профиля. AdaptyDelegate будет получать и обрабатывать события обновления профиля.
Открытие веб-пейволов во встроенном браузере
Открытие веб-пейволов во встроенном браузере поддерживается начиная с Adapty SDK v3.15.
По умолчанию веб-пейволы открываются во внешнем браузере.
Чтобы обеспечить бесшовный пользовательский опыт, вы можете открывать веб-пейволы во встроенном браузере. Это позволяет отображать страницу веб-покупки прямо внутри приложения, и пользователям не нужно переключаться между приложениями для завершения транзакции.
Чтобы включить эту возможность, передайте параметру in значение .inAppBrowser:
do {
try await Adapty.openWebPaywall(for: product, in: .inAppBrowser) // default – .externalBrowser
} catch {
print("Failed to open web paywall: \(error)")
}