Enable purchases with Flow Builder in iOS SDK

To enable in-app purchases, you need to understand three key concepts:

  • Products – anything users can buy (subscriptions, consumables, lifetime access)
  • Flows – screen sequences that present products to users, built in the no-code Flow Builder. The SDK retrieves them via getFlow. If you’d rather build the UI in your own code, use a paywall instead — see Implement paywalls manually.
  • Placements – where and when you show flows in your app (like main, onboarding, settings). You attach flows to placements in the dashboard, then request them by placement ID in your code. This makes it easy to run A/B tests and show different flows to different users.

Adapty offers you three ways to enable purchases in your app. Select one of them depending on your app requirements:

ImplementationComplexityWhen to use
Adapty Flow Builder✅ EasyYou create a complete, purchase-ready flow in the no-code builder. Adapty automatically renders it and handles all the complex purchase flow, receipt validation, and subscription management behind the scenes.
Manually created paywalls🟡 MediumYou implement your paywall UI in your app code, but still get the flow object from Adapty to maintain flexibility in product offerings. See the guide.
Observer mode🔴 HardYou already have your own purchase handling infrastructure and want to keep using it. Note that the observer mode has its limitations in Adapty. See the article.

The steps below show how to implement a flow created in the Adapty Flow Builder.

If you’d rather build the paywall UI yourself, see Implement paywalls manually.

To display a flow created in the Adapty Flow Builder, in your app code, you only need to:

  1. Get the flow: Get it from Adapty.
  2. Display it and Adapty will handle purchases for you: Show the view in your app.
  3. Handle button actions: Associate user interactions with your app’s response to them. For example, open links or close the flow when users click buttons.

Before you start

Before you start, complete these steps:

  1. Connect your app to the App Store in the Adapty Dashboard.
  2. Create your products in Adapty.
  3. Create a flow and add products to it.
  4. Create a placement and add your flow to it.
  5. Install and activate the Adapty SDK in your app code. This guide uses Adapty iOS SDK v4 (beta) APIs.

1. Get the flow

Your flows are associated with placements configured in the dashboard. Placements allow you to run different flows for different audiences or to run A/B tests.

To get a flow created in the Adapty Flow Builder, you need to:

  1. Get the flow object by the placement ID using the getFlow method and check whether it has a view configuration.
  2. Get the view configuration using the getFlowConfiguration method. It contains the UI elements and styling needed to display the flow.
import Adapty
import AdaptyUI

func loadFlow() async {
    let flow = try await Adapty.getFlow(placementId: "YOUR_PLACEMENT_ID")

    guard flow.hasViewConfiguration else {
        print("Flow doesn't have a view configuration")
        return
    }

    flowConfiguration = try await AdaptyUI.getFlowConfiguration(forFlow: flow)
}

2. Display the flow

Now, when you have the flow configuration, it’s enough to add a few lines to display your flow.

For more details on how to display a flow, see our guide.

3. Handle button actions

When users click buttons, the iOS SDK automatically handles purchases, restoration, closing the flow, and opening links.

However, other buttons have custom or pre-defined IDs and require handling actions in your code. Or, you may want to override their default behavior.

For example, here is how to handle the close button. In UIKit, the SDK dismisses the controller automatically when .close fires — override only if you want custom behavior. In SwiftUI, you must set your isPresented binding to false yourself.

Read our guides on how to handle button actions and events.

Next steps

Have questions or running into issues? Check out our support forum where you can find answers to common questions or ask your own. Our team and community are here to help!

Your flow is ready to be displayed in the app. Test your purchases in sandbox mode to make sure you can complete a test purchase.

Now, you need to check the users’ access level to ensure you display a flow or give access to paid features to the right users.

Full example

Here is how all the steps from this guide can be integrated in your app together.