---
title: "Android SDKのペイウォールを使ってアプリ内課金を有効にする"
description: "アプリ内サブスクリプション管理のためのAdaptyセットアップクイックスタートガイド。"
---

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

- [**プロダクト**](product) – ユーザーが購入できるもの（サブスクリプション、消耗型アイテム、永続アクセスなど）
- [**ペイウォール**](paywalls) – どのプロダクトを提供するかを定義する設定です。Adaptyでは、プロダクトを取得する唯一の方法がペイウォールです。この設計により、アプリのコードを変更せずに、提供内容・価格・プロダクトの組み合わせを変更できます。
- [**プレースメント**](placements) – アプリ内でペイウォールを表示する場所とタイミング（`main`、`onboarding`、`settings` など）。ダッシュボードでプレースメントにペイウォールを設定し、コードでプレースメントIDを指定して取得します。A/B テストの実施や、ユーザーごとに異なるペイウォールを表示するのも簡単です。

Adaptyでは、アプリ内課金を有効にする方法が3つあります。アプリの要件に合わせて選択してください。

| 実装方法 | 複雑さ | 適しているケース |
|------------------------|------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Adapty ペイウォールビルダー | ✅ 簡単 | [ノーコードビルダーで完全な購入対応ペイウォールを作成する](quickstart-paywalls)場合。Adaptyが自動的にレンダリングし、複雑な購入フロー・レシート検証・サブスクリプション管理をすべてバックグラウンドで処理します。 |
| 手動作成のペイウォール | 🟡 中程度 | アプリのコードでペイウォールUIを実装しつつ、プロダクト提供の柔軟性を維持するためにAdaptyからペイウォールオブジェクトを取得する場合。[ガイド](android-quickstart-manual)を参照してください。 |
| オブザーバーモード | 🔴 難しい | 独自の購入処理インフラがすでにあり、そのまま利用したい場合。ただし、オブザーバーモードにはAdaptyでの制限があります。[記事](observer-vs-full-mode)を参照してください。 |

:::important
**以下の手順は、Adaptyペイウォールビルダーで作成したペイウォールを実装する方法を説明しています。**

ペイウォールビルダーを使用しない場合は、[手動作成のペイウォールで購入を処理するガイド](android-making-purchases)を参照してください。
:::

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

1. **ペイウォールを取得する**: AdaptyからペイウォールOBJECTを取得します。
2. **ペイウォールを表示し、Adaptyが購入を処理する**: 取得したペイウォールコンテナをアプリに表示します。
3. **ボタンアクションを処理する**: ペイウォール上のユーザー操作とアプリの反応を関連付けます。例えば、ユーザーがボタンをクリックしたときにリンクを開いたり、ペイウォールを閉じたりします。

## 始める前に \{#before-you-start\}

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

1. Adapty ダッシュボードで[アプリをGoogle Playに接続する](initial-android)。
2. Adaptyで[プロダクトを作成する](create-product)。
3. [ペイウォールを作成してプロダクトを追加する](create-paywall)。
4. [プレースメントを作成してペイウォールを追加する](create-placement)。
5. アプリのコードに[Adapty SDKをインストールして有効化する](sdk-installation-android)。

:::tip
これらの手順を最短で完了するには、[クイックスタートガイド](quickstart)に従うか、[Developer CLI](developer-cli-quickstart)を使ってペイウォールとプレースメントを作成してください。
:::

## 1. ペイウォールを取得する \{#1-get-the-paywall\}

ペイウォールはダッシュボードで設定したプレースメントに関連付けられています。プレースメントを使うと、異なるオーディエンスに異なるペイウォールを表示したり、[A/B テスト](ab-tests)を実施したりできます。

Adaptyペイウォールビルダーで作成したペイウォールを取得するには、以下の手順が必要です。

1. `getPaywall`メソッドを使って[プレースメント](placements)IDで`paywall`オブジェクトを取得し、それがビルダーで作成されたペイウォールかどうかを確認します。

2. `getViewConfiguration`メソッドを使ってペイウォールのビュー設定を取得します。ビュー設定には、ペイウォールを表示するためのUI要素とスタイリング情報が含まれています。

:::important
ビュー設定を取得するには、ペイウォールビルダーの **Show on device** トグルをオンにする必要があります。オフのままでは空のビュー設定が返され、ペイウォールが表示されません。
:::

<Tabs groupId="current-os" queryString>

<TabItem value="kotlin" label="Kotlin" default>

```kotlin showLineNumbers
Adapty.getPaywall("YOUR_PLACEMENT_ID") { result ->
    if (result is AdaptyResult.Success) {
        val paywall = result.value
        
        if (!paywall.hasViewConfiguration) {
            return@getPaywall
        }
        
        AdaptyUI.getViewConfiguration(paywall) { configResult ->
            if (configResult is AdaptyResult.Success) {
                val viewConfiguration = configResult.value
            }
        }
    }
}
```
</TabItem>
<TabItem value="java" label="Java" default>

```java showLineNumbers

Adapty.getPaywall("YOUR_PLACEMENT_ID", result -> {
    if (result instanceof AdaptyResult.Success) {
        AdaptyPaywall paywall = ((AdaptyResult.Success<AdaptyPaywall>) result).getValue();
        
        if (!paywall.hasViewConfiguration()) {
            return;
        }
        
        AdaptyUI.getViewConfiguration(paywall, configResult -> {
            if (configResult instanceof AdaptyResult.Success) {
                AdaptyUI.LocalizedViewConfiguration viewConfiguration =
                    ((AdaptyResult.Success<AdaptyUI.LocalizedViewConfiguration>) configResult).getValue();
                // use loaded configuration
            }
        });
    }
});
```
</TabItem>

</Tabs>

## 2. ペイウォールを表示する \{#2-display-the-paywall\}

ペイウォールの設定が取得できたら、数行のコードを追加するだけでペイウォールを表示できます。

デバイスの画面にビジュアルペイウォールを表示するには、まず設定を行う必要があります。`AdaptyUI.getPaywallView()`メソッドを呼び出すか、`AdaptyPaywallView`を直接作成してください。

<Tabs groupId="current-os" queryString>
  <TabItem value="kotlin" label="Kotlin (option 1)" default>

```kotlin showLineNumbers
   val paywallView = AdaptyUI.getPaywallView(
       activity,
       viewConfiguration,
       null, // products = null means auto-fetch
       eventListener,
   )
```
</TabItem>
<TabItem value="kotlin2" label="Kotlin (option 2)" default>

```kotlin showLineNumbers
   val paywallView =
        AdaptyPaywallView(activity) // or retrieve it from xml
   ...
   with(paywallView) {
       showPaywall(
           viewConfiguration,
           null, // products = null means auto-fetch
		   eventListener,
       )
   }
```

</TabItem>
<TabItem value="java" label="Java (option 1)" default>

```java showLineNumbers
AdaptyPaywallView paywallView = AdaptyUI.getPaywallView(
        activity,
        viewConfiguration,
        null, // products = null means auto-fetch
        eventListener,
);
```
</TabItem>
<TabItem value="java2" label="Java (option 2)" default>

```java showLineNumbers
AdaptyPaywallView paywallView =
  new AdaptyPaywallView(activity); //add to the view hierarchy if needed, or you receive it from xml
...
paywallView.showPaywall(viewConfiguration, products, eventListener);
```

</TabItem>
<TabItem value="XML" label="XML" default>

```xml showLineNumbers
<com.adapty.ui.AdaptyPaywallView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
```
</TabItem>
</Tabs>

ビューが正常に作成されたら、ビュー階層に追加してデバイスの画面に表示できます。

:::tip
ペイウォールの表示方法の詳細については、[ガイド](android-present-paywalls)を参照してください。
:::

## 3. ボタンアクションを処理する \{#3-handle-button-actions\}

ユーザーがペイウォールのボタンをクリックすると、Android SDKは購入・復元・ペイウォールのクローズ・リンクのオープンを自動的に処理します。

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

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

:::tip
ボタンの[アクション](android-handle-paywall-actions)と[イベント](android-handling-events)の処理方法については、ガイドを参照してください。
:::

<Tabs groupId="current-os" queryString>

<TabItem value="kotlin" label="Kotlin" default>

```kotlin showLineNumbers title="Kotlin"
override fun onActionPerformed(action: AdaptyUI.Action, context: Context) {
    when (action) {
        AdaptyUI.Action.Close -> (context as? Activity)?.onBackPressed() // default behavior
    }
}
```
</TabItem>
<TabItem value="java" label="Java" default>

```java showLineNumbers
@Override
public void onActionPerformed(@NonNull AdaptyUI.Action action, @NonNull Context context) {
    if (action instanceof AdaptyUI.Action.Close) {
        if (context instanceof Activity) {
            ((Activity) context).onBackPressed();
        }
    }
}
```
</TabItem>

</Tabs>

## 次のステップ \{#next-steps\}

---
no_index: true
---
import Callout from '../../../components/Callout.astro';

<Callout type="tip">
ご質問やお困りのことがあれば、[サポートフォーラム](https://adapty.featurebase.app/)をご覧ください。よくある質問への回答を見つけたり、ご自身の質問を投稿することができます。チームとコミュニティがサポートいたします！
</Callout>

ペイウォールをアプリに表示する準備が整いました。[Google Play Storeでのテスト購入](testing-on-android)を行い、ペイウォールからテスト購入を完了できることを確認してください。

次に、適切なユーザーにペイウォールを表示したり有料機能へのアクセスを付与したりするために、[ユーザーのアクセスレベルを確認する](android-check-subscription-status)必要があります。

## 完全な実装例 \{#full-example\}

以下は、これらのすべての手順をアプリに統合した例です。

<Tabs groupId="current-os" queryString>

<TabItem value="kotlin" label="Kotlin" default>

```kotlin showLineNumbers title="Kotlin"
class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        Adapty.getPaywall("YOUR_PLACEMENT_ID") { paywallResult ->
            if (paywallResult is AdaptyResult.Success) {
                val paywall = paywallResult.value

                if (!paywall.hasViewConfiguration) {
                    // Use custom logic
                    return@getPaywall
                }

                AdaptyUI.getViewConfiguration(paywall) { configResult ->
                    if (configResult is AdaptyResult.Success) {
                        val viewConfiguration = configResult.value

                        val paywallView = AdaptyUI.getPaywallView(
                            this,
                            viewConfiguration,
                            null, // products = null means auto-fetch
                            object : AdaptyUIEventListener {
                                override fun onActionPerformed(action: AdaptyUI.Action, context: Context) {
                                    when (action) {
                                        is AdaptyUI.Action.Close -> {
                                            (context as? Activity)?.onBackPressed()
                                        }
                                    }
                                }
                            }
                        )

                        setContentView(paywallView)
                    }
                }
            }
        }
    }
}

```
</TabItem>
<TabItem value="java" label="Java" default>

```java showLineNumbers
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Adapty.getPaywall("YOUR_PLACEMENT_ID", paywallResult -> {
            if (paywallResult instanceof AdaptyResult.Success) {
                AdaptyPaywall paywall = ((AdaptyResult.Success<AdaptyPaywall>) paywallResult).getValue();

                if (!paywall.hasViewConfiguration()) {
                    // Use custom logic
                    return;
                }

                AdaptyUI.getViewConfiguration(paywall, configResult -> {
                    if (configResult instanceof AdaptyResult.Success) {
                        AdaptyUI.LocalizedViewConfiguration viewConfiguration =
                            ((AdaptyResult.Success<AdaptyUI.LocalizedViewConfiguration>) configResult).getValue();

                        AdaptyPaywallView paywallView = AdaptyUI.getPaywallView(
                            this,
                            viewConfiguration,
                            null, // products = null means auto-fetch
                            new AdaptyUIEventListener() {
                               @Override
                                    public void onActionPerformed(@NonNull AdaptyUI.Action action, @NonNull Context context) {
                                        if (action instanceof AdaptyUI.Action.Close) {
                                            if (context instanceof Activity) {
                                                ((Activity) context).onBackPressed();
                                            }
                                        }
                                    }
                            }
                        );

                        setContentView(paywallView);
                    }
                });
            }
        });
    }
}

```
</TabItem>

</Tabs>