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

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

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

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

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

```typescript showLineNumbers

try {
  const paywall = await adapty.getPaywall({ 
    placementId: 'YOUR_PLACEMENT_ID', 
    locale: 'en',
    params: {
      fetchPolicy: 'reload_revalidating_cache_data', // Load from server, fallback to cache
      loadTimeoutMs: 5000 // 5 second timeout
    }
  });
  // the requested paywall
} catch (error) {
  console.error('Failed to fetch paywall:', 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><p>ロケールコードの詳細と推奨される使い方については、[ローカライゼーションとロケールコード](capacitor-localizations-and-locale-codes)を参照してください。</p> |
| **params.fetchPolicy** | <p>任意</p><p>デフォルト: `'reload_revalidating_cache_data'`</p> | <p>デフォルトでは、SDKはサーバーからデータを読み込もうとし、失敗した場合はキャッシュデータを返します。ユーザーが常に最新のデータを取得できるため、この方法を推奨します。</p><p></p><p>ただし、ユーザーが不安定なインターネット環境を使用していると考える場合は、`'return_cache_data_else_load'`を使用して、キャッシュが存在する場合はキャッシュデータを返すようにすることを検討してください。この場合、ユーザーは最新のデータを得られない可能性がありますが、接続が不安定でも高速な読み込みを体験できます。キャッシュは定期的に更新されるため、ネットワークリクエストを避けるためにセッション中に使用しても安全です。</p><p></p><p>なお、キャッシュはアプリの再起動後も保持され、アプリの再インストールまたは手動でのクリーンアップ時にのみ削除されます。</p> |
| **params.loadTimeoutMs** | <p>任意</p><p>デフォルト: 5000 ms</p> | <p>このメソッドのタイムアウト（ミリ秒）を制限します。タイムアウトに達した場合、キャッシュデータまたはローカルフォールバックが返されます。</p><p></p><p>まれに、`loadTimeoutMs`で指定した時間よりもわずかに遅くタイムアウトする場合があります。これは、この操作が内部で複数のリクエストで構成されている場合があるためです。</p> |

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

レスポンスパラメータ：

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

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

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

```typescript showLineNumbers

try {
  const products = await adapty.getPaywallProducts({ paywall });
  // the requested products list
} catch (error) {
  console.error('Failed to fetch products:', error);
}
```

レスポンスパラメータ：

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

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

| プロパティ | 説明 |
|-------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **タイトル** | プロダクトのタイトルを表示するには、`product.localizedTitle`を使用します。ローカライゼーションはデバイスのロケールではなく、ユーザーが選択しているストアの国に基づいています。 |
| **価格** | 価格のローカライズされた表示には、`product.price?.localizedString`を使用します。このローカライゼーションはデバイスのロケール情報に基づいています。`product.price?.amount`を使って数値として価格にアクセスすることもできます。値はローカル通貨で提供されます。関連する通貨記号を取得するには、`product.price?.currencySymbol`を使用します。 |
| **サブスクリプション期間** | 期間（週、月、年など）を表示するには、`product.subscription?.localizedSubscriptionPeriod`を使用します。このローカライゼーションはデバイスのロケールに基づいています。プログラムでサブスクリプション期間を取得するには、`product.subscription?.subscriptionPeriod`を使用します。そこから`unit`プロパティにアクセスして期間の長さ（'day'、'week'、'month'、'year'、'unknown'のいずれか）を取得できます。`numberOfUnits`の値で期間単位の数を取得できます。例えば、四半期サブスクリプションの場合、unitプロパティには`'month'`、numberOfUnitsには`3`が入ります。 |
| **初回オファー** | サブスクリプションに初回オファーが含まれているかどうかを示すバッジなどのインジケーターを表示するには、`product.subscription?.offer?.phases`プロパティを確認してください。これは最大2つの割引フェーズ（無料トライアルフェーズと初回価格フェーズ）を含むリストです。各フェーズオブジェクトには以下の便利なプロパティがあります：<br/>• `paymentMode`：`'free_trial'`、`'pay_as_you_go'`、`'pay_up_front'`、`'unknown'`の値を持つ文字列。無料トライアルは`'free_trial'`タイプになります。<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-capacitor#fetch-paywall-information)セクションで説明した`getPaywall`メソッドでペイウォールを取得する方法が推奨アプローチであることを理解しておくことが重要です。

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

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

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

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

```typescript showLineNumbers

try {
  const paywall = await adapty.getPaywallForDefaultAudience({ 
    placementId: 'YOUR_PLACEMENT_ID', 
    locale: 'en',
    params: {
      fetchPolicy: 'reload_revalidating_cache_data' // Load from server, fallback to cache
    }
  });
  // the requested paywall
} catch (error) {
  console.error('Failed to fetch default audience paywall:', error);
}
```

:::note
`getPaywallForDefaultAudience`メソッドはCapacitor SDKバージョン2.11.2以降で利用可能です。
:::

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