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

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

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

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

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

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

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

フローの情報を取得する

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

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

プロダクト 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

デフォルトでは、SDK はサーバーからデータの読み込みを試み、失敗した場合はキャッシュされたデータを返します。ユーザーが常に最新のデータを取得できるため、この方法を推奨します。

ただし、ユーザーが不安定なインターネット環境で利用していると想定される場合は、AdaptyPlacementFetchPolicy.ReturnCacheDataElseLoad の使用を検討してください。キャッシュが存在する場合はそちらを返します。この場合、最新データを取得できないことがありますが、インターネット接続が不安定でも読み込みを高速化できます。キャッシュは定期的に更新されるため、セッション中にネットワークリクエストを避ける目的で安全に使用できます。

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

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

loadTimeoutデフォルト: 5 秒

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

このメソッドは内部で複数のリクエストを処理する場合があるため、まれに loadTimeout で指定した時間よりもわずかに遅れてタイムアウトすることがあります。

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

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

レスポンスパラメータ:

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

v4では、GetFlowlocaleパラメーターはありません。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.DayAdaptySubscriptionPeriodUnit.WeekAdaptySubscriptionPeriodUnit.MonthAdaptySubscriptionPeriodUnit.Year、または AdaptySubscriptionPeriodUnit.Unknown)。NumberOfUnits の値で期間単位の数を取得できます。たとえば、四半期ごとのサブスクリプションの場合、Unit プロパティに AdaptySubscriptionPeriodUnit.Month、NumberOfUnits プロパティに 3 が表示されます。
Introductory Offerサブスクリプションに初回オファーが含まれていることを示すバッジなどのインジケーターを表示するには、product.Subscription?.Offer?.Phases プロパティを確認してください。これは最大2つの割引フェーズ(無料トライアルフェーズと初回価格フェーズ)を含むことができるリストです。各フェーズオブジェクトには以下の便利なプロパティが含まれています:
PaymentModeAdaptyPaymentMode.FreeTrialAdaptyPaymentMode.PayAsYouGoAdaptyPaymentMode.PayUpFrontAdaptyPaymentMode.Unknown の値を持つ列挙型。無料トライアルは AdaptyPaymentMode.FreeTrial タイプになります。
Price:割引価格を含む AdaptyPrice オブジェクト — 数値には Price.Amount、表示には Price.LocalizedString を使用します。無料トライアルの場合は Price.Amount0 になります。
LocalizedNumberOfPeriods:デバイスのロケールを使用してローカライズされた、オファーの長さを説明する文字列。たとえば、3日間のトライアルオファーの場合、このフィールドには "3 days" が表示されます。
SubscriptionPeriod:あるいは、このプロパティでオファー期間の個別の詳細を取得できます。オファーに対して前のセクションで説明したものと同じ方法で機能します。
LocalizedSubscriptionPeriod:ユーザーのロケールに合わせてフォーマットされた割引のサブスクリプション期間。

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

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

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

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

デフォルトでは、SDK はサーバーからデータを読み込もうとし、失敗した場合はキャッシュされたデータを返します。この方式ではユーザーが常に最新のデータを取得できるため、こちらを推奨します。

ただし、ユーザーがインターネット接続の不安定な環境にいると想定される場合は、AdaptyPlacementFetchPolicy.ReturnCacheDataElseLoad を使用することで、キャッシュが存在する場合はキャッシュデータを返すようにできます。この場合、最新データが取得できないことがありますが、接続状況に関わらず読み込みが速くなります。キャッシュはセッション中に定期的に更新されるため、ネットワークリクエストを省くためにキャッシュを利用しても問題ありません。

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

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

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

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

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

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

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

ペイウォール情報の取得

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

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

プロダクト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デフォルト: .reloadRevalidatingCacheData

デフォルトでは、SDKはサーバーからデータを読み込もうとし、失敗した場合はキャッシュデータを返します。ユーザーが常に最新のデータを取得できるため、この設定を推奨します。

ただし、ユーザーのインターネット接続が不安定だと思われる場合は、.returnCacheDataElseLoad を使用してキャッシュデータが存在する場合に返すことを検討してください。この場合、ユーザーは最新データを取得できないことがありますが、通信状況に関わらず読み込みが速くなります。キャッシュは定期的に更新されるため、セッション中のネットワークリクエスト削減に安全に使用できます。

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

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.DayAdaptySubscriptionPeriodUnit.WeekAdaptySubscriptionPeriodUnit.MonthAdaptySubscriptionPeriodUnit.Year、または AdaptySubscriptionPeriodUnit.Unknown)。NumberOfUnits の値で期間の単位数を取得できます。例えば、四半期ごとのサブスクリプションの場合、Unit プロパティには AdaptySubscriptionPeriodUnit.MonthNumberOfUnits プロパティには 3 が表示されます。
Introductory Offerサブスクリプションに初回オファーが含まれているかどうかをバッジなどで表示するには、product.Subscription?.Offer?.Phases プロパティを確認します。これは最大2つの割引フェーズ(無料トライアルフェーズと初回価格フェーズ)を含むリストです。各フェーズオブジェクトには以下の便利なプロパティが含まれています:
PaymentModeAdaptyPaymentMode.FreeTrialAdaptyPaymentMode.PayAsYouGoAdaptyPaymentMode.PayUpFrontAdaptyPaymentMode.Unknown の値を持つ列挙型。無料トライアルは AdaptyPaymentMode.FreeTrial 型になります。
Price:割引価格を持つ AdaptyPrice オブジェクト。数値には Price.Amount、表示には Price.LocalizedString を使用します。無料トライアルの場合は Price.Amount0 が入ります。
LocalizedNumberOfPeriods:オファーの期間をデバイスのロケールでローカライズした文字列。例えば、3日間のトライアルオファーの場合、このフィールドには "3 days" が表示されます。
SubscriptionPeriod:オファー期間の個別の詳細をこのプロパティで取得することもできます。オファーに対しても前のセクションで説明した方法と同様に機能します。
LocalizedSubscriptionPeriod:ユーザーのロケールに合わせてフォーマットされた割引のサブスクリプション期間。

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

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

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

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デフォルト: .reloadRevalidatingCacheData

デフォルトでは、SDKはサーバーからデータを読み込もうとし、失敗した場合はキャッシュデータを返します。ユーザーが常に最新のデータを取得できるため、このオプションを推奨します。

ただし、ユーザーのインターネット接続が不安定だと思われる場合は、.returnCacheDataElseLoad を使用してキャッシュデータが存在する場合に返すことを検討してください。この場合、ユーザーは最新データを取得できないことがありますが、通信状況に関わらず読み込みが速くなります。キャッシュは定期的に更新されるため、セッション中のネットワークリクエスト削減に安全に使用できます。

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

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