Kotlin Multiplatform SDKでボタンアクションに応答する

購入と復元のみが自動で処理されます。 ペイウォールを閉じたりリンクを開いたりするような、それ以外のボタンアクションはすべて、アプリのコードで適切なレスポンスを実装する必要があります。

Adaptyのペイウォールビルダーを使ってペイウォールを作成する場合、ボタンを適切に設定することが重要です:

  1. ペイウォールビルダーにボタンを追加し、既存のアクションを割り当てるか、カスタムアクションIDを作成します。
  2. 割り当てた各アクションを処理するコードをアプリに記述します。

このガイドでは、コード内でカスタムアクションと既存アクションを処理する方法を説明します。

AdaptyUIPaywallsEventsObserverを設定する

ペイウォールのアクションを処理するには、AdaptyUIPaywallsEventsObserverインターフェースを実装し、AdaptyUI.setPaywallsEventsObserver()で設定する必要があります。これはアプリのライフサイクルの早い段階、通常はメインアクティビティやアプリの初期化時に行います。


// In your app initialization
AdaptyUI.setPaywallsEventsObserver(MyAdaptyUIPaywallsEventsObserver())

ペイウォールを閉じる

ペイウォールを閉じるボタンを追加するには:

  1. ペイウォールビルダーでボタンを追加し、Closeアクションを割り当てます。
  2. アプリのコードで、ペイウォールを閉じるcloseアクションのハンドラーを実装します。

Kotlin Multiplatform SDKでは、CloseActionAndroidSystemBackActionがデフォルトでペイウォールを閉じます。ただし、必要に応じてコードでこの動作をオーバーライドできます。たとえば、あるペイウォールを閉じたときに別のペイウォールを開くといった使い方が可能です。


class MyAdaptyUIPaywallsEventsObserver : AdaptyUIPaywallsEventsObserver {
    override fun paywallViewDidPerformAction(view: AdaptyUIPaywallView, action: AdaptyUIAction) {
        when (action) {
            AdaptyUIAction.CloseAction, AdaptyUIAction.AndroidSystemBackAction -> view.dismiss()
        }
    }
}

// Set up the observer
AdaptyUI.setPaywallsEventsObserver(MyAdaptyUIPaywallsEventsObserver())

createNativePaywallViewを使用している場合、view.dismiss()を呼び出しても効果はありません。このビューはKMPスタックを通じて表示されるのではなく、レイアウトに埋め込まれているためです。代わりに、レイアウトからビューを削除し、dispose()を呼び出してください。

ペイウォールからURLを開く

リンクのグループ(利用規約や購入の復元など)を追加したい場合は、ペイウォールビルダーにLink要素を追加し、Open URLアクションが設定されたボタンと同じ方法で処理してください。

ペイウォールからリンクを開くボタン(例:利用規約プライバシーポリシー)を追加するには:

  1. ペイウォールビルダーでボタンを追加し、Open URLアクションを割り当てて、開きたいURLを入力します。
  2. アプリのコードで、受け取ったURLをブラウザで開くopenUrlアクションのハンドラーを実装します。

Kotlin Multiplatform SDKでは、OpenUrlActionが開くべきURLを提供します。確認ダイアログの表示やアプリ独自のURL処理方法を使用するなど、URL開封処理のカスタムロジックを実装できます。


class MyAdaptyUIPaywallsEventsObserver(
    private val uriHandler: UriHandler
) : AdaptyUIPaywallsEventsObserver {
    override fun paywallViewDidPerformAction(view: AdaptyUIPaywallView, action: AdaptyUIAction) {
        when (action) {
            is AdaptyUIAction.OpenUrlAction -> {
                // Show confirmation dialog before opening URL
                mainUiScope.launch {
                    val selectedAction = view.showDialog(
                        title = "Open URL?",
                        content = action.url,
                        primaryActionTitle = "Cancel",
                        secondaryActionTitle = "Open"
                    ).getOrNull()

                    when (selectedAction) {
                        AdaptyUIDialogActionType.PRIMARY -> {
                            // User cancelled
                        }
                        AdaptyUIDialogActionType.SECONDARY -> {
                            // User confirmed - open URL
                            uriHandler.openUri(action.url)
                        }
                        else -> Unit
                    }
                }
            }
        }
    }
}

// Set up the observer with UriHandler
AdaptyUI.setPaywallsEventsObserver(MyAdaptyUIPaywallsEventsObserver(uriHandler))

アプリへのログイン

ユーザーをアプリにログインさせるボタンを追加するには:

  1. ペイウォールビルダーでボタンを追加し、ID「login」のCustomアクションを割り当てます。
  2. アプリのコードで、ユーザーを識別するカスタムアクションのハンドラーを実装します。

class MyAdaptyUIObserver : AdaptyUIObserver {
    override fun paywallViewDidPerformAction(view: AdaptyUIView, action: AdaptyUIAction) {
        when (action) {
            is AdaptyUIAction.CustomAction -> {
                if (action.action == "login") {
                    // Handle login action - navigate to login screen
                    // This depends on your app's navigation system
                    // For example, in Compose Multiplatform:
                    // navController.navigate("login")
                }
            }
        }
    }
}

カスタムアクションを処理する

その他のアクションを処理するボタンを追加するには:

  1. ペイウォールビルダーでボタンを追加し、Customアクションを割り当ててIDを設定します。
  2. アプリのコードで、作成したアクションIDのハンドラーを実装します。

たとえば、別のサブスクリプションオファーや買い切り購入がある場合、別のペイウォールを表示するボタンを追加できます:


class MyAdaptyUIPaywallsEventsObserver : AdaptyUIPaywallsEventsObserver {
    override fun paywallViewDidPerformAction(view: AdaptyUIPaywallView, action: AdaptyUIAction) {
        when (action) {
            is AdaptyUIAction.CustomAction -> {
                when (action.action) {
                    "login" -> {
                        // Handle login action - navigate to login screen
                        // This depends on your app's navigation system
                        // For example, in Compose Multiplatform:
                        // navController.navigate("login")
                    }
                }
            }
        }
    }
}

// Set up the observer
AdaptyUI.setPaywallsEventsObserver(MyAdaptyUIPaywallsEventsObserver())