Present new Paywall Builder paywalls in iOS SDK
If you've customized a paywall using the Paywall Builder, you don't need to worry about rendering it in your mobile app code to display it to the user. Such a paywall contains both what should be shown within the paywall and how it should be shown.
This guide is for new Paywall Builder paywalls . The process for presenting paywalls differs for paywalls designed with different versions of Paywall Builder, remote config paywalls, and Observer mode.
- For presenting Legacy Paywall Builder paywalls, check out iOS - Present legacy Paywall Builder paywalls.
- For presenting Remote config paywalls, see Render paywall designed by remote config.
- For presenting Observer mode paywalls, see iOS - Present Paywall Builder paywalls in Observer mode
Present paywalls in SwiftUI
In order to display the visual paywall on the device screen, use the .paywall
modifier in SwiftUI:
@State var paywallPresented = false // ensure that you manage this variable state and set it to `true` at the moment you want to show the paywall
var body: some View {
Text("Hello, AdaptyUI!")
.paywall(
isPresented: $paywallPresented,
paywallConfiguration: <AdaptyUI.PaywallConfiguration>,
didPerformAction: { action in
switch action {
case .close:
paywallPresented = false
default:
// Handle other actions
break
}
},
didFinishPurchase: { product, profile in paywallPresented = false },
didFailPurchase: { product, error in /* handle the error */ },
didFinishRestore: { profile in /* check access level and dismiss */ },
didFailRestore: { error in /* handle the error */ },
didFailRendering: { error in paywallPresented = false }
)
}
Parameters:
Parameter | Required | Description |
---|---|---|
isPresented | required | A binding that manages whether the paywall screen is displayed. |
paywallConfiguration | required | An AdaptyUI.PaywallConfiguration object containing visual details of the paywall. Use the AdaptyUI.paywallConfiguration(for:products:viewConfiguration:observerModeResolver:tagResolver:timerResolver:) method. Refer to Fetch Paywall Builder paywalls and their configuration topic for more details. |
didFailPurchase | required | Invoked when Adapty.makePurchase() fails. |
didFinishRestore | required | Invoked when Adapty.restorePurchases() completes successfully. |
didFailRestore | required | Invoked when Adapty.restorePurchases() fails. |
didFailRendering | required | Invoked if an error occurs while rendering the interface. In this case, contact Adapty Support. |
fullScreen | optional | Determines if the paywall appears in full-screen mode or as a modal. Defaults to true . |
didAppear | optional | Invoked when the paywall view was presented. |
didDisappear | optional | Invoked when the paywall view was dismissed. |
didPerformAction | optional | Invoked when a user clicks a button. Different buttons have different action IDs. Two action IDs are pre-defined: close and openURL , while others are custom and can be set in the builder. |
didSelectProduct | optional | If the product was selected for purchase (by a user or by the system), this callback will be invoked. |
didStartPurchase | optional | Invoked when the user begins the purchase process. |
didFinishPurchase | optional | Invoked when Adapty.makePurchase() completes successfully. |
didFinishWebPaymentNavigation | optional | Invoked when web payment navigation finishes. |
didStartRestore | optional | Invoked when the user starts the restore process. |
didFailLoadingProducts | optional | Invoked when errors occur during product loading. Return true to retry loading. |
didPartiallyLoadProducts | optional | Invoked when products are partially loaded. |
showAlertItem | optional | A binding that manages the display of alert items above the paywall. |
showAlertBuilder | optional | A function for rendering the alert view. |
placeholderBuilder | optional | A function for rendering the placeholder view while the paywall is loading. |
Refer to the iOS - Handling events topic for more details on parameters.
Present paywalls in UIKit
In order to display the visual paywall on the device screen, do the following:
-
Initialize the visual paywall you want to display by using the
.paywallController(for:products:viewConfiguration:delegate:)
method:Swiftimport Adapty
import AdaptyUI
let visualPaywall = AdaptyUI.paywallController(
with: <paywall configuration object>,
delegate: <AdaptyPaywallControllerDelegate>
)Request parameters:
Parameter Presence Description paywall configuration required An AdaptyUI.PaywallConfiguration
object containing visual details of the paywall. Use theAdaptyUI.getPaywallConfiguration(forPaywall:locale:)
method. Refer to Fetch Paywall Builder paywalls and their configuration topic for more details.delegate required An AdaptyPaywallControllerDelegate
to listen to paywall events. Refer to Handling paywall events topic for more details.Returns:
Object Description AdaptyPaywallController An object, representing the requested paywall screen -
After the object has been successfully created, you can display it on the screen of the device:
Swiftpresent(visualPaywall, animated: true)
Want to see a real-world example of how Adapty SDK is integrated into a mobile app? Check out our sample apps, which demonstrate the full setup, including displaying paywalls, making purchases, and other basic functionality.