Kotlin Multiplatform SDKでFlowとPaywall Builderを使ってアプリ内課金を有効にする

このガイドでは、Adapty Kotlin Multiplatform SDK v4(ベータ版)の API を使用しています。v3 をお使いの場合は、対応するメソッド名について移行ガイドを参照してください。

アプリ内課金を有効にするには、3 つの重要な概念を理解する必要があります:

  • プロダクト – ユーザーが購入できるもの(サブスクリプション、消耗型アイテム、永続アクセス)
  • フロー & ペイウォール – ノーコードのフロー & ペイウォールビルダーで作成した、プロダクトをユーザーに提示する画面。SDK は getFlow を使って取得します。独自のコードで UI を構築したい場合は、カスタムペイウォールの実装をご覧ください。
  • プレースメント – アプリ内でフロー & ペイウォールを表示する場所とタイミング(main、onboarding、settings など)。ダッシュボードでプレースメントに紐付け、コード内ではプレースメント ID を指定して取得します。これにより、A/B テストの実施や、ユーザーごとに異なる表示を簡単に行えます。

Adapty では、アプリで購入を有効にする方法を3つ提供しています。アプリの要件に応じて、いずれかを選択してください。

実装方法複雑さ使用するケース
Adapty フロー & ペイウォールビルダー✅ 簡単ノーコードビルダーで購入可能なフローまたはペイウォールを作成します。Adapty が自動的にレンダリングし、複雑な購入ロジック、レシート検証、サブスクリプション管理をすべて裏側で処理します。
カスタムペイウォール🟡 中程度アプリコードでペイウォール UI を実装しますが、プロダクト提供の柔軟性を維持するために Adapty からフローオブジェクトを取得します。ガイドをご覧ください。
オブザーバーモード🔴 難しいすでに独自の購入処理インフラを持っており、それを引き続き使用したい場合に選びます。なお、オブザーバーモードには Adapty での制限事項があります。記事をご覧ください。
Important

以下の手順では、Adapty フロー & ペイウォールビルダーで作成したフローまたはペイウォールの実装方法を説明します。

ペイウォールのUIを独自に構築したい場合は、カスタムペイウォールの実装を参照してください。

Adapty フロー & ペイウォールビルダーで作成したフローまたはペイウォールをアプリに表示するには、アプリのコードで以下を行うだけです。

  1. フローまたはペイウォールを取得する: Adapty から取得します。
  2. 表示するだけで購入処理はAdaptyが担当: ビューをアプリ内に表示します。
  3. ボタンアクションを処理する: ユーザー操作とアプリの応答を関連付けます。たとえば、ユーザーがボタンをタップしたときにリンクを開いたり、ペイウォールを閉じたりします。

始める前に

始める前に、以下の手順を完了してください:

  1. Adapty ダッシュボードでアプリを App Store および/または Google Play に接続する。
  2. Adapty でプロダクトを作成する。
  3. フローまたはペイウォールを作成し、そこにプロダクトを追加する。
  4. プレースメントを作成し、フローまたはペイウォールを追加する。
  5. アプリのコードに Adapty SDK をインストールして有効化する。
Tip

これらの手順を最も素早く完了するには、クイックスタートガイドに従うか、Developer CLIを使用してフローとプレースメントを作成してください。

1. フローまたはペイウォールを取得する

フローとペイウォールは、ダッシュボードで設定されたプレースメントに関連付けられています。プレースメントを使用すると、異なるオーディエンスに対して異なるフローやペイウォールを表示したり、A/B テストを実行したりすることができます。

Adapty Flow & Paywall Builder で作成したフローまたはペイウォールを取得するには、次の手順を行います:

  1. getFlow メソッドを使用して、プレースメント ID から flow オブジェクトを取得します。

  2. createFlowView メソッドを使ってフロービューを作成します。このビューには、表示に必要なUI要素とスタイルが含まれています。フローにビューが設定されていない場合、createFlowView はエラーを返します。エラーは onError で処理してください。

Important

ビューを取得するには、フローまたはペイウォールを公開してください。未公開の編集があるフローまたはペイウォールのステータスは Dirty となり、そのプレースメントは最後に公開されたバージョンを引き続き使用します。

Adapty.getFlow("YOUR_PLACEMENT_ID")
    .onSuccess { flow ->
        AdaptyUI.createFlowView(flow)
            .onSuccess { view ->
                view.present()
            }
            .onError { error ->
                // the flow has no view configured, or view creation failed
            }
    }
    .onError { error ->
        // handle the error
    }

2. フローまたはペイウォールを表示する

フローを取得したら、あとは数行追加するだけで表示できます。

デバイス画面にビジュアルフローを表示するには、まずビューを作成する必要があります。AdaptyUI.createFlowView() メソッドを呼び出してください:

AdaptyUI.createFlowView(flow)
    .onSuccess { view ->
        view.present()
    }
    .onError { error ->
        // handle the error
    }

ビューが正常に作成されたら、デバイスの画面に表示できます。各ビューは一度しか使用できません。dismiss() を呼び出した後、フローを再度表示するには createFlowView を再度呼び出してください。

Tip

フローやペイウォールの表示方法の詳細については、ガイドを参照してください。

3. ボタンアクションの処理

フローやペイウォールでユーザーがボタンをクリックすると、Kotlin Multiplatform SDK は購入、復元、画面を閉じる操作、リンクを開く操作を自動的に処理します。

ただし、カスタムまたは事前定義された ID を持つボタンは、コード内でアクションを処理する必要があります。また、デフォルトの動作をオーバーライドしたい場合もあります。

たとえば、以下は閉じるボタンのデフォルトの動作です。コードに追加する必要はありませんが、必要な場合の実装方法を確認できます。

デフォルトでは、購入が完了してもフローは開いたままになります。購入完了後にフローを閉じたい場合は、flowViewDidFinishPurchase コールバック内でビューを閉じてください。

Tip

ボタンのアクションとイベントの処理方法については、ガイドをご覧ください。

AdaptyUI.setFlowsEventsObserver(object : AdaptyUIFlowsEventsObserver {
    override fun flowViewDidPerformAction(view: AdaptyUIFlowView, action: AdaptyUIAction) {
        when (action) {
            is AdaptyUIAction.CloseAction -> mainUiScope.launch { view.dismiss() }
            else -> Unit
        }
    }

    override fun flowViewDidFinishPurchase(
        view: AdaptyUIFlowView,
        product: AdaptyPaywallProduct,
        purchaseResult: AdaptyPurchaseResult
    ) {
        if (purchaseResult !is AdaptyPurchaseResult.UserCanceled) {
            mainUiScope.launch { view.dismiss() }
        }
    }
})

次のステップ

フローまたはペイウォールをアプリに表示する準備が整いました。App Store サンドボックスまたはGoogle Play Storeでテスト購入を行い、フローからテスト購入を完了できることを確認してください。

次に、適切なユーザーにペイウォールを表示したり有料機能へのアクセスを提供したりするために、ユーザーのアクセスレベルを確認する必要があります。

完全な例

以下は、これらのステップをアプリにまとめて統合する方法です。

// Set up the observer for handling flow events
AdaptyUI.setFlowsEventsObserver(object : AdaptyUIFlowsEventsObserver {
    override fun flowViewDidPerformAction(view: AdaptyUIFlowView, action: AdaptyUIAction) {
        when (action) {
            is AdaptyUIAction.CloseAction -> mainUiScope.launch { view.dismiss() }
            else -> Unit
        }
    }

    override fun flowViewDidFinishPurchase(
        view: AdaptyUIFlowView,
        product: AdaptyPaywallProduct,
        purchaseResult: AdaptyPurchaseResult
    ) {
        if (purchaseResult !is AdaptyPurchaseResult.UserCanceled) {
            mainUiScope.launch { view.dismiss() }
        }
    }
})

// Get and display the flow
Adapty.getFlow("YOUR_PLACEMENT_ID")
    .onSuccess { flow ->
        AdaptyUI.createFlowView(flow)
            .onSuccess { view ->
                view.present()
            }
            .onError { error ->
                // the flow has no view configured — use custom logic
            }
    }
    .onError { error ->
        // handle the error
    }