Present flows in Observer mode - Kotlin Multiplatform

If you’ve customized a flow or paywall using the builder, you don’t need to worry about rendering it in your mobile app code to display it to the user. Such a flow or paywall contains both what should be shown and how it should be shown.

This section refers to Observer mode only. If you do not work in the Observer mode, refer to the Display flows & paywalls topic.

This capability requires Adapty Kotlin Multiplatform SDK 4.0 (beta) or later — previously it was available only in the native iOS and Android SDKs. See the migration guide to upgrade.

Before you start presenting flows (Click to Expand)
  1. Set up initial integration of Adapty with the App Store and with Google Play.
  2. Install and configure Adapty SDK. Make sure to call withObserverMode(true) in the configuration builder. Refer to the Kotlin Multiplatform SDK installation guide.
  3. Create products in the Adapty Dashboard.
  4. Configure flows or paywalls in the builders and assign products to them.
  5. Create placements and assign your flows or paywalls to them.
  6. Fetch flows and their configuration in your mobile app code.

In Observer mode, the SDK does not make purchases for you. When a user taps the purchase or restore button in an Adapty-rendered flow or paywall, the SDK calls your AdaptyUIObserverModeResolver instead — perform the purchase or restore with your own code there.

  1. Implement the AdaptyUIObserverModeResolver interface:

    import com.adapty.kmp.AdaptyUIObserverModeResolver
    import com.adapty.kmp.models.AdaptyPaywallProduct
    import com.adapty.kmp.models.AdaptyUIFlowView
    
    class MyObserverModeResolver : AdaptyUIObserverModeResolver {
        override fun observerModeDidInitiatePurchase(
            view: AdaptyUIFlowView,
            product: AdaptyPaywallProduct,
            onStartPurchase: () -> Unit,
            onFinishPurchase: () -> Unit
        ) {
            onStartPurchase() // the view shows its loading indicator
            // make the purchase with your own code,
            // then report the transaction to Adapty and call:
            onFinishPurchase() // the view hides the loading indicator
        }
    
        override fun observerModeDidInitiateRestore(
            view: AdaptyUIFlowView,
            onStartRestore: () -> Unit,
            onFinishRestore: () -> Unit
        ) {
            onStartRestore()
            // restore purchases with your own code, then:
            onFinishRestore()
        }
    }

    The observerModeDidInitiatePurchase method informs you that the user has initiated a purchase, and observerModeDidInitiateRestore — that the user has initiated a restore. Trigger your custom purchase or restore flow in response.

    Also, remember to invoke the following callbacks to notify AdaptyUI about the process of the purchase or restore. This is necessary for proper flow behavior, such as showing the loader, among other things:

    CallbackDescription
    onStartPurchase()The callback should be invoked to notify AdaptyUI that the purchase is started.
    onFinishPurchase()The callback should be invoked to notify AdaptyUI that the purchase is finished.
    onStartRestore()The callback should be invoked to notify AdaptyUI that the restore is started.
    onFinishRestore()The callback should be invoked to notify AdaptyUI that the restore is finished.

    The flow stays open while your code runs — dismiss it yourself after a successful purchase or restore.

  2. Register the resolver before presenting any screen:

    import com.adapty.kmp.AdaptyUI
    
    AdaptyUI.setObserverModeResolver(MyObserverModeResolver())

    Without a registered resolver, the flow view has no way to hand the purchase over to your code, and nothing happens when the user taps the purchase button.

  3. Create and present the flow view as usual: fetch the flow and create its view, then present it. No extra parameters are needed — once the resolver is registered, every Adapty-rendered flow or paywall routes purchases and restores through it.

Don’t forget to report the transaction and associate it with the paywall. Otherwise, Adapty will not recognize the transaction and will not determine the source paywall of the purchase.