---
title: "Kotlin Multiplatform SDKでリモートコンフィグペイウォールのペイウォールとプロダクトを取得する"
description: "Adapty Kotlin Multiplatform SDKでペイウォールとプロダクトを取得し、ユーザーの収益化を強化します。"
---

リモートコンフィグやカスタムペイウォールを表示する前に、それらの情報を取得する必要があります。このトピックはリモートコンフィグおよびカスタムペイウォールに関するものです。ペイウォールビルダーでカスタマイズされたペイウォールの取得方法については、[ペイウォールビルダーのペイウォールとその設定を取得する](kmp-get-pb-paywalls)を参照してください。

:::tip

Adapty SDK がモバイルアプリにどのように統合されているか、実際の例を見てみませんか？ペイウォールの表示、購入処理、その他の基本機能を含む完全なセットアップを実演している[サンプルアプリ](sample-apps)をご覧ください。

:::

<details>
   <summary>モバイルアプリでペイウォールとプロダクトの取得を始める前に（クリックして展開）</summary>

   1. Adapty ダッシュボードで[プロダクトを作成する](create-product)。

2. Adapty ダッシュボードで[ペイウォールを作成し、プロダクトをペイウォールに追加する](create-paywall)。

3. Adapty ダッシュボードで[プレースメントを作成し、ペイウォールをプレースメントに追加する](create-placement)。

4. モバイルアプリに[Adapty SDKをインストールする](sdk-installation-kotlin-multiplatform)。
</details>

## ペイウォール情報を取得する \{#fetch-paywall-information\}

Adaptyでは、[プロダクト](product)はApp StoreとGoogle Playの両方のプロダクトを組み合わせたものです。これらのクロスプラットフォームプロダクトはペイウォールに統合されており、特定のモバイルアプリのプレースメントで表示できます。

プロダクトを表示するには、`getPaywall`メソッドを使用していずれかの[プレースメント](placements)から[ペイウォール](paywalls)を取得する必要があります。

:::important
**プロダクトIDをハードコードしないでください。** ハードコードすべき唯一のIDはプレースメントIDです。ペイウォールはリモートで設定されるため、プロダクトの数や利用可能なオファーはいつでも変更される可能性があります。アプリはこれらの変更を動的に処理する必要があります。今日2つのプロダクトが返され、明日3つになった場合でも、コードを変更せずにすべてを表示できるようにしてください。
:::

```kotlin showLineNumbers

Adapty.getPaywall(
    placementId = "YOUR_PLACEMENT_ID", 
    locale = "en",
    fetchPolicy = AdaptyPaywallFetchPolicy.Default,
    loadTimeout = 5.seconds
).onSuccess { paywall ->
    // the requested paywall
}.onError { error ->
    // handle the error
}
```

| パラメータ | 必須/任意 | 説明 |
|---------|--------|-----------|
| **placementId** | 必須 | [プレースメント](placements)の識別子。Adapty ダッシュボードでプレースメントを作成する際に指定した値です。 |
| **locale** | <p>任意</p><p>デフォルト: `en`</p> | <p>[ペイウォールのローカライズ](add-remote-config-locale)の識別子。このパラメータはマイナス（**-**）文字で区切られた1つ以上のサブタグで構成される言語コードである必要があります。最初のサブタグは言語、2番目は地域を表します。</p><p></p><p>例: `en` は英語、`pt-br` はブラジルポルトガル語を表します。</p> |
| **fetchPolicy** | デフォルト: `AdaptyPaywallFetchPolicy.Default` | <p>デフォルトでは、SDKはサーバーからデータを読み込もうとし、失敗した場合はキャッシュされたデータを返します。ユーザーが常に最新のデータを取得できるため、この方法を推奨します。</p><p></p><p>ただし、ユーザーが不安定なインターネット環境にいると思われる場合は、`AdaptyPaywallFetchPolicy.ReturnCacheDataElseLoad`を使用してキャッシュが存在する場合にキャッシュデータを返すことを検討してください。このシナリオでは、ユーザーが最新のデータを取得できない場合がありますが、インターネット接続が不安定でも読み込み時間が短縮されます。キャッシュは定期的に更新されるため、ネットワークリクエストを避けるためにセッション中に使用しても安全です。</p><p></p><p>キャッシュはアプリの再起動後も保持され、アプリの再インストールまたは手動のクリーンアップ時にのみクリアされます。</p><p></p><p>Adapty SDKはペイウォールを2つのレイヤーで保存します: 上記の定期的に更新されるキャッシュと[フォールバックペイウォール](kmp-use-fallback-paywalls)。また、ペイウォールをより速く取得するためにCDNを使用し、CDNに到達できない場合のスタンドアロンフォールバックサーバーも使用します。このシステムは、インターネット接続が不安定な場合でも、常に最新バージョンのペイウォールを確実に取得できるように設計されています。</p> |
| **loadTimeout** | デフォルト: 5秒 | <p>このメソッドのタイムアウト上限を設定します。タイムアウトに達した場合、キャッシュされたデータまたはローカルフォールバックが返されます。</p><p></p><p>まれに、この操作が内部で複数のリクエストで構成されているため、`loadTimeout`で指定した時間より少し遅くタイムアウトする場合があります。</p> |

プロダクトIDをハードコードしないでください！ペイウォールはリモートで設定されるため、利用可能なプロダクト、プロダクトの数、特別オファー（無料トライアルなど）は随時変更される可能性があります。コードがこれらのシナリオに対応できるようにしてください。  
例えば、最初に2つのプロダクトを取得した場合、アプリはその2つを表示すべきです。後で3つのプロダクトを取得した場合、コードを変更せずに3つすべてを表示できるようにしてください。ハードコードすべき唯一のものはプレースメントIDです。

レスポンスパラメータ:

| パラメータ | 説明 |
| :-------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Paywall   | プロダクトIDのリスト、ペイウォール識別子、リモートコンフィグ、その他いくつかのプロパティを含む[`AdaptyPaywall`](https://kmp.adapty.io///adapty/com.adapty.kmp.models/-adapty-paywall/)オブジェクト。 |

## プロダクトを取得する \{#fetch-products\}

ペイウォールを取得したら、それに対応するプロダクト配列を取得できます:

```kotlin showLineNumbers
Adapty.getPaywallProducts(paywall).onSuccess { products ->
    // the requested products
}.onError { error ->
    // handle the error
}
```

レスポンスパラメータ:

| パラメータ | 説明 |
| :-------- |:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Products  | プロダクト識別子、プロダクト名、価格、通貨、サブスクリプション期間、その他いくつかのプロパティを含む[`AdaptyPaywallProduct`](https://kmp.adapty.io///adapty/com.adapty.kmp.models/-adapty-paywall-product/)オブジェクトのリスト。 |

独自のペイウォールデザインを実装する場合、[`AdaptyPaywallProduct`](https://kmp.adapty.io///adapty/com.adapty.kmp.models/-adapty-paywall-product/)オブジェクトのプロパティにアクセスする必要があるでしょう。以下は最もよく使用されるプロパティですが、利用可能なすべてのプロパティの詳細はリンク先のドキュメントを参照してください。

| プロパティ | 説明 |
|-------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **Title** | プロダクトのタイトルを表示するには、`product.localizedTitle`を使用します。ローカライズはデバイス自体のロケールではなく、ユーザーが選択したストアの国に基づいています。 |
| **Price** | ローカライズされた価格を表示するには、`product.price.localizedString`を使用します。このローカライズはデバイスのロケール情報に基づいています。`product.price.amount`を使用して価格を数値として取得することもできます。値はローカル通貨で提供されます。関連する通貨記号を取得するには、`product.price.currencySymbol`を使用します。 |
| **Subscription Period** | 期間（週、月、年など）を表示するには、`product.subscriptionDetails?.localizedSubscriptionPeriod`を使用します。このローカライズはデバイスのロケールに基づいています。プログラムでサブスクリプション期間を取得するには、`product.subscriptionDetails?.subscriptionPeriod`を使用します。そこから`unit`列挙型にアクセスして長さ（DAY、WEEK、MONTH、YEAR、またはUNKNOWN）を取得できます。`numberOfUnits`の値は期間単位の数を示します。例えば、四半期サブスクリプションの場合、unitプロパティに`MONTH`、numberOfUnitsプロパティに`3`が表示されます。 |
| **Introductory Offer** | サブスクリプションに初回オファーが含まれているかどうかを示すバッジやインジケーターを表示するには、`product.subscriptionDetails?.introductoryOfferPhases`プロパティを確認してください。これは最大2つの割引フェーズ（無料トライアルフェーズと初回価格フェーズ）を含むことができるリストです。各フェーズオブジェクトには以下の便利なプロパティがあります:<br/>• `paymentMode`: `FREE_TRIAL`、`PAY_AS_YOU_GO`、`PAY_UPFRONT`、`UNKNOWN`の値を持つ列挙型。無料トライアルは`FREE_TRIAL`タイプになります。<br/>• `price`: 数値としての割引価格。無料トライアルの場合は`0`を確認してください。<br/>• `localizedNumberOfPeriods`: デバイスのロケールを使用してローカライズされた、オファーの長さを説明する文字列。例えば、3日間のトライアルオファーの場合、このフィールドに`3 days`と表示されます。<br/>• `subscriptionPeriod`: オファー期間の個別の詳細を取得するには、このプロパティを使用します。オファーに対しても前のセクションと同じ方法で機能します。<br/>• `localizedSubscriptionPeriod`: ユーザーのロケール向けにフォーマットされた割引のサブスクリプション期間。 |

## デフォルトオーディエンスのペイウォールでペイウォール取得を高速化する \{#speed-up-paywall-fetching-with-default-audience-paywall\}

通常、ペイウォールはほぼ即座に取得されるため、このプロセスを高速化することを心配する必要はありません。ただし、多数のオーディエンスとペイウォールがあり、ユーザーのインターネット接続が弱い場合、ペイウォールの取得に想定以上の時間がかかる可能性があります。そのような状況では、ペイウォールをまったく表示しないよりも、スムーズなユーザーエクスペリエンスを確保するためにデフォルトのペイウォールを表示したい場合があります。

これに対処するために、指定されたプレースメントの**All Users**オーディエンス向けペイウォールを取得する`getPaywallForDefaultAudience`メソッドを使用できます。ただし、推奨されるアプローチは上記の[ペイウォール情報を取得する](fetch-paywalls-and-products-kmp#fetch-paywall-information)セクションで詳しく説明されている`getPaywall`メソッドを使用することである点を理解することが重要です。

:::warning
`getPaywall`を推奨する理由

`getPaywallForDefaultAudience`メソッドにはいくつかの重大な欠点があります:

- **潜在的な後方互換性の問題**: 異なるアプリバージョン（現在および将来）に対して異なるペイウォールを表示する必要がある場合、課題が生じる可能性があります。現在の（レガシー）バージョンをサポートするペイウォールを設計するか、現在の（レガシー）バージョンのユーザーがレンダリングされないペイウォールで問題が発生する可能性を受け入れるかのいずれかになります。
- **ターゲティングの喪失**: すべてのユーザーが**All Users**オーディエンス向けに設計された同じペイウォールを見ることになるため、パーソナライズされたターゲティング（国、マーケティングアトリビューション、独自のカスタム属性に基づくものを含む）が失われます。

これらの欠点を許容してペイウォール取得の高速化のメリットを得たい場合は、以下のように`getPaywallForDefaultAudience`メソッドを使用してください。そうでなければ、[上記](fetch-paywalls-and-products-kmp#fetch-paywall-information)で説明した`getPaywall`を使用してください。
:::

```kotlin showLineNumbers

Adapty.getPaywallForDefaultAudience(
    placementId = "YOUR_PLACEMENT_ID",
    locale = "en",
    fetchPolicy = AdaptyPaywallFetchPolicy.Default
).onSuccess { paywall ->
    // the requested paywall
}.onError { error ->
    // handle the error
}
```

| パラメータ | 必須/任意 | 説明 |
|---------|--------|-----------|
| **placementId** | 必須 | [プレースメント](placements)の識別子。Adapty ダッシュボードでプレースメントを作成する際に指定した値です。 |
| **locale** | <p>任意</p><p>デフォルト: `en`</p> | <p>[ペイウォールのローカライズ](add-remote-config-locale)の識別子。このパラメータはマイナス（**-**）文字で区切られた1つ以上のサブタグで構成される言語コードである必要があります。最初のサブタグは言語、2番目は地域を表します。</p><p></p><p>例: `en` は英語、`pt-br` はブラジルポルトガル語を表します。</p><p></p> |
| **fetchPolicy** | デフォルト: `AdaptyPaywallFetchPolicy.Default` | <p>デフォルトでは、SDKはサーバーからデータを読み込もうとし、失敗した場合はキャッシュされたデータを返します。ユーザーが常に最新のデータを取得できるため、この方法を推奨します。</p><p></p><p>ただし、ユーザーが不安定なインターネット環境にいると思われる場合は、`AdaptyPaywallFetchPolicy.ReturnCacheDataElseLoad`を使用してキャッシュが存在する場合にキャッシュデータを返すことを検討してください。このシナリオでは、ユーザーが最新のデータを取得できない場合がありますが、インターネット接続が不安定でも読み込み時間が短縮されます。キャッシュは定期的に更新されるため、ネットワークリクエストを避けるためにセッション中に使用しても安全です。</p><p></p><p>キャッシュはアプリの再起動後も保持され、アプリの再インストールまたは手動のクリーンアップ時にのみクリアされます。</p> |