Unityにおけるリモートコンフィグペイウォールのペイウォールとプロダクトの取得

リモートコンフィグとカスタムペイウォールを表示する前に、それらに関する情報を取得する必要があります。このトピックはリモートコンフィグとカスタムペイウォールに関するものです。Flow & Paywall Builder または old Paywall Builder でカスタマイズされたフローやペイウォールの取得については、フローとペイウォールの取得を参照してください。

Tip

Adapty SDK がモバイルアプリにどのように組み込まれているか、実際の例を見たいですか?ペイウォールの表示、購入処理、その他の基本的な機能を含むフルセットアップを示したサンプルアプリをご覧ください。

モバイルアプリでフローとプロダクトの取得を始める前に(クリックして展開)
  1. Adapty ダッシュボードでプロダクトを作成します。

  2. Adapty ダッシュボードでフローまたはペイウォールを作成し、プロダクトを組み込みます。

  3. Adapty ダッシュボードでプレースメントを作成し、フローまたはペイウォールをプレースメントに組み込みます。

  4. モバイルアプリにAdapty SDK をインストールします。

フローの情報を取得する

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

プロダクトを表示するには、GetFlow メソッドを使ってプレースメントのいずれかから AdaptyFlow を取得する必要があります。

Important

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

Adapty.GetFlow(
    "YOUR_PLACEMENT_ID",
    AdaptyPlacementFetchPolicy.Default,
    TimeSpan.FromSeconds(5),
    (flow, error) => {
        if (error != null) {
            // handle the error
            return;
        }

        // flow - the requested flow
    }
);
パラメータ必須/任意説明
placementId必須プレースメントの識別子。Adapty ダッシュボードでプレースメントを作成する際に指定した値です。
fetchPolicyデフォルト: AdaptyPlacementFetchPolicy.Default

fetchPolicy は、SDK がどのレイヤーを最初に読み込むかを設定するものであり、キャッシュを使用できるかどうかを制御するものではありません。デフォルトでは、SDK はまずサーバーにアクセスし、そのリクエストが失敗した場合にキャッシュデータを返します。ユーザーが常に最新のデータを取得できるため、この設定を推奨します。

ただし、ユーザーが不安定なインターネット環境にいると思われる場合は、AdaptyPlacementFetchPolicy.ReturnCacheDataElseLoad の使用を検討してください。この設定では順序が逆になり、まずキャッシュを読み込み、キャッシュがない場合にのみサーバーにアクセスします。ユーザーが最新データを取得できない場合もありますが、インターネット接続が不安定であっても読み込みが速くなります。キャッシュは定期的に更新されるため、セッション中にネットワークリクエストを避けるために使用しても安全です。

3 つ目のポリシー AdaptyPlacementFetchPolicy.ReturnCacheDataIfNotExpiredElseLoad(maxAge) は、両者の中間に位置します。指定した TimeSpan よりキャッシュが新しい場合はキャッシュを優先して読み込み、古くなった場合はサーバーにアクセスします。

キャッシュはアプリを再起動しても保持され、アプリの再インストール時または手動でクリアした場合にのみ削除されます。

Adapty SDK はフローとペイウォールを 2 つのレイヤーに保存します。1 つは上記の定期更新されるキャッシュ、もう 1 つはフォールバックペイウォールです。また、CDN を使用してフローとペイウォールをより高速に取得し、CDN が利用できない場合に備えてスタンドアロンのフォールバックサーバーも用意しています。このシステムは、インターネット接続が不安定な状況でも信頼性を確保しながら、常にフローとペイウォールの最新バージョンを取得できるよう設計されています。

loadTimeoutデフォルト: 5 秒

このメソッドのタイムアウト上限を設定します。タイムアウトに達した場合、キャッシュデータまたはローカルフォールバックが返されます。

まれに、内部で複数のリクエストが発生するため、loadTimeout に指定した時間よりもわずかに遅れてタイムアウトする場合があります。

プロダクトIDをハードコードしないでください!フローはリモートで設定されるため、利用可能なプロダクト、プロダクトの数、特別オファー(無料トライアルなど)は随時変更される可能性があります。これらのシナリオにコードが対応できるようにしてください。

例えば、最初に2つのプロダクトを取得した場合、アプリはその2つのプロダクトを表示する必要があります。その後3つのプロダクトを取得した場合は、コードを変更することなく3つすべてを表示できる必要があります。ハードコードする必要があるのは、プレースメントIDのみです。

レスポンスパラメータ:

パラメーター説明
FlowAdaptyFlow オブジェクト。フロー識別子、ペイウォールのバリエーション(Paywalls — それぞれ独自のプロダクト識別子を持つ)、RemoteConfigs リスト(設定済みロケールごとに1エントリ)、およびその他のプロパティを含みます。フローのプロダクトを取得するには、GetPaywallProducts(flow) を呼び出してください。
Note

v4では、GetFlowにlocaleパラメーターはありません。CreateFlowViewでフローをレンダリングする際、ローカライゼーションは自動的に解決されます。カスタムペイウォールの場合、利用可能なすべてのロケールがflow.RemoteConfigsにまとめて返されます。ユーザーのデバイスやアプリの設定に合ったロケールを選択してください。詳細はローカライゼーションとロケールコードを参照してください。

プロダクトの取得

フローを取得したら、それに対応するプロダクトの配列を取得できます:

Adapty.GetPaywallProducts(flow, (products, error) => {
    if (error != null) {
        // handle the error
        return;
    }

    // products - the requested products array
});

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

パラメータ説明
ProductsAdaptyPaywallProduct オブジェクトのリスト。プロダクト識別子、プロダクト名、価格、通貨、サブスクリプション期間、その他いくつかのプロパティを含みます。

独自のフロー設計を実装する際、AdaptyPaywallProduct オブジェクトのプロパティにアクセスする必要があります。以下に最もよく使用されるプロパティを示します。

プロパティ説明
Titleプロダクトのタイトルを表示するには、product.LocalizedTitle を使用します。ローカライズはデバイスのロケールではなく、ユーザーが選択したストアの国に基づいて行われます。
Priceローカライズされた価格を表示するには、product.Price.LocalizedString を使用します。このローカライズはデバイスのロケール情報に基づいています。product.Price.Amount を使用して数値として価格を取得することもできます。値はローカル通貨で提供されます。関連する通貨記号を取得するには、product.Price.CurrencySymbol を使用します。
Subscription Period期間(週、月、年など)を表示するには、product.Subscription?.LocalizedPeriod を使用します。このローカライズはデバイスのロケールに基づいています。サブスクリプション期間をプログラムで取得するには、product.Subscription?.Period を使用します。そこから Unit 列挙型にアクセスして長さを取得できます(AdaptySubscriptionPeriodUnit.Day、AdaptySubscriptionPeriodUnit.Week、AdaptySubscriptionPeriodUnit.Month、AdaptySubscriptionPeriodUnit.Year、または AdaptySubscriptionPeriodUnit.Unknown)。NumberOfUnits の値で期間単位の数を取得できます。たとえば、四半期ごとのサブスクリプションの場合、Unit プロパティに AdaptySubscriptionPeriodUnit.Month、NumberOfUnits プロパティに 3 が表示されます。
Introductory Offerサブスクリプションに初回オファーが含まれていることを示すバッジなどのインジケーターを表示するには、product.Subscription?.Offer?.Phases プロパティを確認してください。これは最大2つの割引フェーズ(無料トライアルフェーズと初回価格フェーズ)を含むことができるリストです。各フェーズオブジェクトには以下の便利なプロパティが含まれています:
• PaymentMode:AdaptyPaymentMode.FreeTrial、AdaptyPaymentMode.PayAsYouGo、AdaptyPaymentMode.PayUpFront、AdaptyPaymentMode.Unknown の値を持つ列挙型。無料トライアルは AdaptyPaymentMode.FreeTrial タイプになります。
• Price:割引価格を含む AdaptyPrice オブジェクト — 数値には Price.Amount、表示には Price.LocalizedString を使用します。無料トライアルの場合は Price.Amount が 0 になります。
• LocalizedNumberOfPeriods:デバイスのロケールを使用してローカライズされた、オファーの長さを説明する文字列。たとえば、3日間のトライアルオファーの場合、このフィールドには "3 days" が表示されます。
• SubscriptionPeriod:あるいは、このプロパティでオファー期間の個別の詳細を取得できます。オファーに対して前のセクションで説明したものと同じ方法で機能します。
• LocalizedSubscriptionPeriod:ユーザーのロケールに合わせてフォーマットされた割引のサブスクリプション期間。

デフォルトオーディエンスフローによるフロー取得の高速化

通常、フローの取得はほぼ瞬時に行われるため、この処理を高速化することを特に気にする必要はありません。ただし、オーディエンスやプレースメントの数が多く、ユーザーのインターネット接続が不安定な場合は、フローの取得に予想以上の時間がかかることがあります。そのような状況では、何も表示しないよりもスムーズなユーザー体験を提供するために、デフォルトのフローを表示したい場合があるでしょう。

これに対処するには、GetFlowForDefaultAudience メソッドを使用できます。このメソッドは、指定されたプレースメントの All Users オーディエンス向けフローを取得します。ただし、推奨されるアプローチは GetFlow メソッドでフローを取得することであり、詳細は上記の フロー情報の取得 セクションを参照してください。

Warning

GetFlow を推奨する理由

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

  • 後方互換性の問題: 異なるアプリバージョン(現行バージョンと将来のバージョン)で異なるフローを表示する必要がある場合、課題が生じる可能性があります。現行(レガシー)バージョンに対応したフローを設計するか、現行(レガシー)バージョンのユーザーがレンダリングされないフローで問題に遭遇することを受け入れるかのどちらかになります。
  • ターゲティングの喪失: すべてのユーザーが All Users オーディエンス向けに設計された同一のフローを見ることになり、国、マーケティングのアトリビューション、または独自のカスタム属性に基づくパーソナライズされたターゲティングが失われます。

これらのデメリットを受け入れてでも高速なフローフェッチのメリットを活用したい場合は、以下のように GetFlowForDefaultAudience メソッドを使用してください。そうでない場合は、上記の GetFlow を使用してください。

Adapty.GetFlowForDefaultAudience(
    "YOUR_PLACEMENT_ID",
    AdaptyPlacementFetchPolicy.Default,
    (flow, error) => {
        if (error != null) {
            // handle the error
            return;
        }

        // flow - the requested flow
    }
);
パラメーター必須/任意説明
placementId必須プレースメントの識別子。Adapty ダッシュボードでプレースメントを作成する際に指定した値です。
fetchPolicyデフォルト: AdaptyPlacementFetchPolicy.Default

fetchPolicy は、SDK がどのレイヤーを最初に読み取るかを設定するもので、キャッシュを使用できるかどうかを制御するものではありません。デフォルトでは、SDK はまずサーバーにアクセスし、リクエストが失敗した場合にキャッシュデータを返します。ユーザーが常に最新のデータを受け取れるため、この設定を推奨します。

ただし、ユーザーが不安定なインターネット環境にいると思われる場合は、AdaptyPlacementFetchPolicy.ReturnCacheDataElseLoad の使用を検討してください。これは順序を逆にして、まずキャッシュを読み取り、キャッシュが存在しない場合のみサーバーにアクセスします。最新のデータを取得できない場合がありますが、インターネット接続が不安定でも高速な読み込みが実現できます。キャッシュは定期的に更新されるため、ネットワークリクエストを避けるためにセッション中に使用しても問題ありません。

3つ目のポリシー AdaptyPlacementFetchPolicy.ReturnCacheDataIfNotExpiredElseLoad(maxAge) は、その中間に位置します。キャッシュのコピーが指定した TimeSpan より新しい間はキャッシュを優先して読み取り、古くなった場合はサーバーにアクセスします。

キャッシュはアプリを再起動しても保持され、アプリの再インストールまたは手動クリーンアップ時にのみ削除されます。

リモートコンフィグとカスタムペイウォールを紹介する前に、それらに関する情報を取得する必要があります。このトピックはリモートコンフィグとカスタムペイウォールに関するものです。ペイウォールビルダーでカスタマイズされたペイウォールの取得方法については、ペイウォールビルダーのペイウォールと設定の取得を参照してください。

Tip

Adapty SDK がモバイルアプリにどのように組み込まれているか、実際の例を見たいですか?ペイウォールの表示、購入処理、その他の基本的な機能を含むフルセットアップを示したサンプルアプリをご覧ください。

モバイルアプリでペイウォールとプロダクトの取得を開始する前に(クリックして展開)
  1. Adapty ダッシュボードでプロダクトを作成します。

  2. ペイウォールを作成し、プロダクトをペイウォールに組み込む(Adapty ダッシュボード内)。

  3. プレースメントを作成し、ペイウォールをプレースメントに組み込む(Adapty ダッシュボード内)。

  4. Adapty SDK をインストールする(モバイルアプリ内)。

ペイウォール情報の取得

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

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

Important

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

Adapty.GetPaywall("YOUR_PLACEMENT_ID", "en", (paywall, error) => {
  if(error != null) {
    // handle the error
    return;
  }
  
  // paywall - the resulting object
});
パラメーター必須/任意説明
placementId必須プレースメントの識別子。Adapty ダッシュボードでプレースメントを作成する際に指定した値です。
locale

任意

デフォルト: en

ペイウォールのローカライズの識別子。このパラメーターは、マイナス(-)文字で区切られた1つ以上のサブタグで構成される言語コードを指定します。最初のサブタグは言語、2番目は地域を表します。

例: en は英語、pt-br はブラジルポルトガル語を表します。

ロケールコードとその推奨される使用方法については、ローカライズとロケールコードを参照してください。

fetchPolicyデフォルト: AdaptyPlacementFetchPolicy.Default

fetchPolicy は、SDKが最初にどのレイヤーを読み取るかを設定します(キャッシュを使用するかどうかではありません)。デフォルトでは、SDKはまずサーバーにアクセスし、リクエストが失敗した場合にキャッシュされたデータを返します。ユーザーが常に最新のデータを取得できるため、この方法を推奨します。

ただし、ユーザーのインターネット接続が不安定な場合は、AdaptyPlacementFetchPolicy.ReturnCacheDataElseLoad を検討してください。これは順序を逆にして、まずキャッシュを読み取り、キャッシュが存在しない場合のみサーバーにアクセスします。ユーザーは最新のデータを取得できない場合がありますが、インターネット接続の状態に関わらず、読み込みが速くなります。キャッシュはセッション中のネットワークリクエストを避けるために使用しても安全なほど定期的に更新されます。

3つ目のポリシー AdaptyPlacementFetchPolicy.ReturnCacheDataIfNotExpiredElseLoad(maxAge) は中間に位置するもので、キャッシュされたコピーが指定した TimeSpan より新しい場合はキャッシュを先に読み取り、古くなった場合はサーバーにアクセスします。

キャッシュはアプリを再起動しても保持され、アプリの再インストール時または手動でクリアした場合にのみ削除されます。

Adapty SDK はペイウォールを2つのレイヤーに保存します: 上述の定期的に更新されるキャッシュとフォールバックペイウォールです。また、ペイウォールをより速く取得するためにCDNを使用し、CDNにアクセスできない場合に備えてスタンドアロンのフォールバックサーバーも使用します。このシステムは、インターネット接続が不安定な状況でも信頼性を確保しながら、常に最新バージョンのペイウォールを取得できるよう設計されています。

loadTimeoutデフォルト: 5秒

このメソッドのタイムアウトを制限する値。タイムアウトに達した場合、キャッシュされたデータまたはローカルフォールバックが返されます。

内部で複数のリクエストが実行される場合があるため、まれに loadTimeout で指定した時間より若干遅れてタイムアウトが発生することがあります。

プロダクトIDはハードコードしないでください!ペイウォールはリモートで設定されるため、利用可能なプロダクト、プロダクトの数、特典(無料トライアルなど)は時間とともに変わる場合があります。これらのシナリオをコードで処理するようにしてください。
例えば、最初に2つのプロダクトを取得した場合、アプリはその2つを表示します。後で3つのプロダクトを取得した場合も、コード変更なしにすべての3つを表示できるようにしてください。ハードコードが必要なのはプレースメントIDだけです。

レスポンスパラメータ:

パラメータ説明
PaywallプロダクトIDのリスト、ペイウォール識別子、リモートコンフィグ、その他いくつかのプロパティを含む AdaptyPaywall オブジェクト。

プロダクトの取得

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

Adapty.GetPaywallProducts(paywall, (products, error) => {
  if(error != null) {
    // handle the error
    return;
  }
  
  // products - the requested products array
});

レスポンスパラメータ:

パラメータ説明
Productsプロダクト識別子、プロダクト名、価格、通貨、サブスクリプション期間、その他いくつかのプロパティを含む AdaptyPaywallProduct オブジェクトのリスト。

独自のペイウォールデザインを実装する場合、AdaptyPaywallProduct オブジェクトのプロパティへのアクセスが必要になるでしょう。以下によく使用されるプロパティを示しますが、すべての利用可能なプロパティの詳細はリンク先のドキュメントを参照してください。

プロパティ説明
Titleプロダクトのタイトルを表示するには、product.LocalizedTitle を使用します。なお、このローカライズはデバイスのロケールではなく、ユーザーが選択したストアの国に基づきます。
Price価格のローカライズされた表示には product.Price.LocalizedString を使用します。このローカライズはデバイスのロケール情報に基づきます。数値として価格を取得するには product.Price.Amount を使用します。値はローカル通貨で提供されます。対応する通貨記号を取得するには product.Price.CurrencySymbol を使用します。
Subscription Period期間(週、月、年など)を表示するには product.Subscription?.LocalizedPeriod を使用します。このローカライズはデバイスのロケールに基づきます。サブスクリプション期間をプログラムで取得するには product.Subscription?.Period を使用します。そこから Unit 列挙型にアクセスして期間の長さを取得できます(AdaptySubscriptionPeriodUnit.Day、AdaptySubscriptionPeriodUnit.Week、AdaptySubscriptionPeriodUnit.Month、AdaptySubscriptionPeriodUnit.Year、または AdaptySubscriptionPeriodUnit.Unknown)。NumberOfUnits の値で期間の単位数を取得できます。例えば、四半期ごとのサブスクリプションの場合、Unit プロパティには AdaptySubscriptionPeriodUnit.Month、NumberOfUnits プロパティには 3 が表示されます。
Introductory Offerサブスクリプションに初回オファーが含まれているかどうかをバッジなどで表示するには、product.Subscription?.Offer?.Phases プロパティを確認します。これは最大2つの割引フェーズ(無料トライアルフェーズと初回価格フェーズ)を含むリストです。各フェーズオブジェクトには以下の便利なプロパティが含まれています:
• PaymentMode:AdaptyPaymentMode.FreeTrial、AdaptyPaymentMode.PayAsYouGo、AdaptyPaymentMode.PayUpFront、AdaptyPaymentMode.Unknown の値を持つ列挙型。無料トライアルは AdaptyPaymentMode.FreeTrial 型になります。
• Price:割引価格を持つ AdaptyPrice オブジェクト。数値には Price.Amount、表示には Price.LocalizedString を使用します。無料トライアルの場合は Price.Amount に 0 が入ります。
• LocalizedNumberOfPeriods:オファーの期間をデバイスのロケールでローカライズした文字列。例えば、3日間のトライアルオファーの場合、このフィールドには "3 days" が表示されます。
• SubscriptionPeriod:オファー期間の個別の詳細をこのプロパティで取得することもできます。オファーに対しても前のセクションで説明した方法と同様に機能します。
• LocalizedSubscriptionPeriod:ユーザーのロケールに合わせてフォーマットされた割引のサブスクリプション期間。

デフォルトオーディエンスペイウォールでペイウォール取得を高速化する

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

この問題を解決するには、GetPaywallForDefaultAudience メソッドを使用できます。このメソッドは、指定されたプレースメントの All Users オーディエンス向けペイウォールを取得します。ただし、推奨されるアプローチは、上記のペイウォールの取得セクションで説明した getPaywall メソッドを使用することです。

Warning

GetPaywallForDefaultAudience の代わりに GetPaywall の使用を検討してください。前者には次のような重要な制限があります:

  • 互換性の問題: 複数のアプリバージョンをサポートする際に問題が生じる可能性があり、後方互換性のある設計が必要になるか、古いバージョンでは正しく表示されない場合があります。
  • パーソナライズなし: 「すべてのユーザー」オーディエンス向けのコンテンツのみが表示され、国・アトリビューション・カスタム属性に基づいたターゲティングは利用できません。

これらのデメリットよりも高速なフェッチが優先されるユースケースでは、以下に示すように GetPaywallForDefaultAudience を使用してください。それ以外の場合は、上記で説明した GetPaywall を使用してください。

Adapty.GetPaywallForDefaultAudience("YOUR_PLACEMENT_ID", "en", (paywall, error) => {
  if(error != null) {
    // handle the error
    return;
  }
  
  // paywall - the resulting object
});

パラメータ:

パラメータ必須/任意説明
placementId必須対象のプレースメントの識別子。Adapty ダッシュボードでプレースメントを作成する際に指定した値です。
locale

任意

デフォルト: en

ペイウォールのローカライズ識別子。このパラメータは、マイナス(-)で区切られた1つまたは2つのサブタグで構成される言語コードを指定します。最初のサブタグは言語、2番目は地域を表します。

例: en は英語、pt-br はブラジルポルトガル語を表します。

fetchPolicyデフォルト: AdaptyPlacementFetchPolicy.Default

fetchPolicy は、SDKがキャッシュを使用するかどうかではなく、どのレイヤーを最初に読み込むかを設定します。デフォルトでは、SDKはまずサーバーにアクセスし、リクエストが失敗した場合にキャッシュデータを返します。ユーザーが常に最新のデータを取得できるため、このオプションを推奨します。

ただし、ユーザーがインターネット接続が不安定な状況に置かれていると考える場合は、AdaptyPlacementFetchPolicy.ReturnCacheDataElseLoad の使用を検討してください。この設定では順序が逆になり、まずキャッシュを読み込み、キャッシュにデータがない場合のみサーバーにアクセスします。最新データが取得できない場合もありますが、接続状況に関わらず読み込みが速くなります。キャッシュは定期的に更新されるため、セッション中にネットワークリクエストを避けるために使用しても安全です。

3つ目のポリシー AdaptyPlacementFetchPolicy.ReturnCacheDataIfNotExpiredElseLoad(maxAge) は、この2つの中間に位置します。キャッシュのコピーが指定した TimeSpan より新しい場合はキャッシュを先に読み込み、古い場合はサーバーにアクセスします。

キャッシュはアプリを再起動しても保持され、アプリの再インストール時または手動でのクリア時にのみ削除されます。

Adapty SDK はペイウォールをローカルに2つのレイヤーで保存します。上記の定期更新キャッシュとフォールバックペイウォールです。また、ペイウォールをより高速に取得するためにCDNを使用し、CDNに接続できない場合に備えてスタンドアロンのフォールバックサーバーも用意しています。このシステムは、インターネット接続が不安定な状況でも信頼性を確保しながら、常に最新バージョンのペイウォールを取得できるよう設計されています。