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

リモートコンフィグやカスタムペイウォールを表示する前に、それらの情報を取得する必要があります。このトピックはリモートコンフィグおよびカスタムペイウォールに関するものです。ペイウォールビルダーでカスタマイズされたペイウォールの取得については、[ペイウォールビルダーのペイウォールと設定の取得](flutter-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-flutter)します。
</details>

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

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

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

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

```dart showLineNumbers
try {
  final paywall = await Adapty().getPaywall(id: "YOUR_PLACEMENT_ID", locale: "en");
  // the requested paywall
} on AdaptyError catch (adaptyError) {
  // handle the error
} catch (e) {
}
```

| パラメーター | 必須 | 説明 |
|---------|--------|-----------|
| **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><p>ロケールコードの詳細と推奨される使用方法については、[ローカライズとロケールコード](flutter-localizations-and-locale-codes)を参照してください。</p> |
| **fetchPolicy** | デフォルト: `.reloadRevalidatingCacheData` | <p>デフォルトでは、SDKはサーバーからデータを読み込もうとし、失敗した場合はキャッシュされたデータを返します。ユーザーが常に最新のデータを取得できるため、この設定を推奨します。</p><p></p><p>ただし、ユーザーがインターネット接続の不安定な環境にいると思われる場合は、`.returnCacheDataElseLoad`を使用してキャッシュデータが存在する場合に返すことを検討してください。このシナリオでは、ユーザーは最新データを取得できないことがありますが、インターネット接続が不安定でも読み込みが速くなります。キャッシュは定期的に更新されるため、ネットワークリクエストを避けるためにセッション中に使用しても安全です。</p><p></p><p>キャッシュはアプリの再起動後も保持され、アプリの再インストールまたは手動でのクリーンアップ時にのみクリアされます。</p><p></p><p>Adapty SDKはペイウォールを2層で保存しています：上記の定期更新キャッシュと[フォールバックペイウォール](flutter-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://pub.dev/documentation/adapty_flutter/latest/adapty_flutter/AdaptyPaywall-class.html)オブジェクト。 |

## プロダクトの取得 \{#fetch-products\}

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

```dart showLineNumbers
try {
  final products = await Adapty().getPaywallProducts(paywall: paywall);
  // the requested products array
} on AdaptyError catch (adaptyError) {
  // handle the error
} catch (e) {
}
```

レスポンスパラメーター：

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

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

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

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

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

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

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

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

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

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

:::note
`getPaywallForDefaultAudience`メソッドはFlutter SDKではまだサポートされていませんが、近日中にサポートが追加される予定です。
:::

| パラメーター | 必須 | 説明 |
|---------|--------|-----------|
| **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><p>ロケールコードの詳細と推奨される使用方法については、[ローカライズとロケールコード](flutter-localizations-and-locale-codes)を参照してください。</p> |
| **fetchPolicy** | デフォルト: `.reloadRevalidatingCacheData` | <p>デフォルトでは、SDKはサーバーからデータを読み込もうとし、失敗した場合はキャッシュされたデータを返します。ユーザーが常に最新のデータを取得できるため、この設定を推奨します。</p><p></p><p>ただし、ユーザーがインターネット接続の不安定な環境にいると思われる場合は、`.returnCacheDataElseLoad`を使用してキャッシュデータが存在する場合に返すことを検討してください。このシナリオでは、ユーザーは最新データを取得できないことがありますが、インターネット接続が不安定でも読み込みが速くなります。キャッシュは定期的に更新されるため、ネットワークリクエストを避けるためにセッション中に使用しても安全です。</p><p></p><p>キャッシュはアプリの再起動後も保持され、アプリの再インストールまたは手動でのクリーンアップ時にのみクリアされます。</p> |