フローアクションへの応答 - Kotlin Multiplatform

Adapty Flow Builder またはペイウォールビルダーを使用してフローやペイウォールを構築する場合、ボタンを適切に設定することが重要です。

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

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

購入、リストア、フロー/ペイウォールのクローズ、リンクの開封は自動的に処理されます。 カスタムアクションなど、それ以外のボタンアクションはすべて、アプリコードで適切なレスポンス実装が必要です。

AdaptyUIFlowsEventsObserverを設定する

フローのアクションを処理するには、AdaptyUIFlowsEventsObserverインターフェースを実装し、AdaptyUI.setFlowsEventsObserver()で設定する必要があります。これはアプリのライフサイクルの早い段階、通常はメインアクティビティまたはアプリの初期化時に行ってください。


// In your app initialization
AdaptyUI.setFlowsEventsObserver(MyAdaptyUIFlowsEventsObserver())

すべてのボタンアクションは、AdaptyUIAction シールドクラス(CloseActionAndroidSystemBackActionOpenUrlActionCustomAction)として flowViewDidPerformAction(view, action) コールバックに渡されます。

flowViewDidPerformAction をオーバーライドすると、特定のアクションだけでなくすべてのアクションに対するデフォルト処理が置き換えられます。以下の例に示すように、動作を変更する意図がない限り、CloseAction(フローを閉じる)および OpenUrlAction(URLを開く)のデフォルト処理はそのまま残してください。

フローとペイウォールを閉じる

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

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

Kotlin Multiplatform SDK では、CloseAction はデフォルトでフローまたはペイウォールを閉じる動作をトリガーします。ただし、必要に応じてコード内でこの動作をオーバーライドできます。たとえば、あるフローを閉じると別のフローが開くようにすることも可能です。


class MyAdaptyUIFlowsEventsObserver : AdaptyUIFlowsEventsObserver {
    override fun flowViewDidPerformAction(view: AdaptyUIFlowView, action: AdaptyUIAction) {
        when (action) {
            is AdaptyUIAction.CloseAction ->
                mainUiScope.launch { view.dismiss() } // default behavior
            is AdaptyUIAction.OpenUrlAction ->
                AdaptyUI.openWebUrl(action.url, action.openIn) // default behavior
            else -> Unit
        }
    }
}

// Set up the observer
AdaptyUI.setFlowsEventsObserver(MyAdaptyUIFlowsEventsObserver())

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

Android のシステムバックボタンを処理する

Android のシステムバックボタンを押す(またはバックジェスチャーを使用する)と、AdaptyUIAction.AndroidSystemBackAction が発行されます。デフォルトでは、このアクションは無視されます。フローは開いたままになり、ユーザーは Close ボタンやビルダーの on_device_back アクションなど、あなたが定義したパスを通じてフローを終了します。システムバックボタンでフローを閉じたい場合は、このアクションを自分で処理してください:

class MyAdaptyUIFlowsEventsObserver : AdaptyUIFlowsEventsObserver {
    override fun flowViewDidPerformAction(view: AdaptyUIFlowView, action: AdaptyUIAction) {
        when (action) {
            is AdaptyUIAction.CloseAction ->
                mainUiScope.launch { view.dismiss() } // default behavior
            is AdaptyUIAction.AndroidSystemBackAction ->
                mainUiScope.launch { view.dismiss() } // not handled by default
            is AdaptyUIAction.OpenUrlAction ->
                AdaptyUI.openWebUrl(action.url, action.openIn) // default behavior
            else -> Unit
        }
    }
}

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

リンクのグループ(利用規約と購入履歴の復元など)を追加したい場合は、ビルダーで Link 要素を追加し、Open URL アクションを持つボタンと同じ方法で処理してください。

フローやペイウォールからリンクを開くボタン(Terms of usePrivacy policy など)を追加するには、ビルダーでボタンを追加し、Open URL アクションを割り当てて、開きたいURLを入力してください。

デフォルトでは、SDKは受け取ったURLをaction.openInに応じて外部ブラウザまたはアプリ内ブラウザでネイティブに開くため、コードは不要です。確認ダイアログを先に表示するなど、カスタムロジックが必要な場合のみハンドラーをオーバーライドしてください。


class MyAdaptyUIFlowsEventsObserver(
    private val uriHandler: UriHandler
) : AdaptyUIFlowsEventsObserver {
    override fun flowViewDidPerformAction(view: AdaptyUIFlowView, 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
                    }
                }
            }
            else -> Unit
        }
    }
}

// Set up the observer with UriHandler
AdaptyUI.setFlowsEventsObserver(MyAdaptyUIFlowsEventsObserver(uriHandler))

アプリにログインする

アプリへのログインボタンを追加するには:

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

class MyAdaptyUIFlowsEventsObserver : AdaptyUIFlowsEventsObserver {
    override fun flowViewDidPerformAction(view: AdaptyUIFlowView, 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")
                }
            }
            else -> Unit
        }
    }
}

カスタムアクションの処理

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

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

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


class MyAdaptyUIFlowsEventsObserver : AdaptyUIFlowsEventsObserver {
    override fun flowViewDidPerformAction(view: AdaptyUIFlowView, action: AdaptyUIAction) {
        when (action) {
            is AdaptyUIAction.CustomAction -> {
                when (action.action) {
                    "openNewFlow" -> {
                        // Display another flow or paywall
                    }
                }
            }
            else -> Unit
        }
    }
}

// Set up the observer
AdaptyUI.setFlowsEventsObserver(MyAdaptyUIFlowsEventsObserver())

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

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 アクションを持つボタンと同じ方法で処理してください。

ペイウォールからリンクを開くボタン(Terms of usePrivacy policy など)を追加するには:

  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」のカスタムアクションを割り当てます。
  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())