iOS SDKでリモートコンフィグペイウォールのペイウォールとプロダクトを取得する

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

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

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

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

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

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

フローの情報を取得する

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

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

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

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

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

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

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

Adapty SDK はフローとペイウォールを 2 つのレイヤーで保存しています。上記の定期更新されるキャッシュとフォールバックペイウォールです。また、フローとペイウォールをより速く取得するために CDN を使用し、CDN が利用できない場合に備えてスタンドアロンのフォールバックサーバーも用意しています。

loadTimeoutデフォルト: 5 秒

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

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

v4 では、locale パラメータは getFlow から移動し、getFlowConfiguration(AdaptyUI でレンダリングする場合のみ使用)に設定するようになりました。カスタムペイウォールの場合、利用可能なすべてのロケールは flow.remoteConfigs にまとめて返されるため、ユーザーのデバイスまたはアプリの設定に合ったロケールを選んでください。

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

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

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

パラメーター説明
FlowAdaptyFlow オブジェクト。プレースメント、識別子(idvariationId)、名前、設定済みロケールごとのエントリを含む remoteConfigs 配列、および hasViewConfiguration フラグを保持します。フローのプロダクトを取得するには getPaywallProducts(flow:) を呼び出してください。

プロダクトを取得する

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

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

パラメータ説明
ProductsAdaptyPaywallProduct オブジェクトのリスト。プロダクト識別子、プロダクト名、価格、通貨、サブスクリプション期間、その他いくつかのプロパティを含みます。
独自のペイウォールデザインを実装する場合、AdaptyPaywallProduct オブジェクトから以下のプロパティにアクセスする必要があります。よく使われるプロパティを以下に示しますが、利用可能なすべてのプロパティの詳細については、リンク先のドキュメントを参照してください。
プロパティ説明
------
Titleプロダクトのタイトルを表示するには、product.localizedTitle を使用してください。ローカライズはデバイスのロケールではなく、ユーザーが選択したストアの国に基づきます。
Priceローカライズされた価格を表示するには、product.localizedPrice を使用してください。このローカライズはデバイスのロケール情報に基づきます。また、product.price で価格を数値として取得することもできます。値はローカル通貨で提供されます。対応する通貨記号を取得するには、product.currencySymbol を使用してください。
Subscription Period期間(週、月、年など)を表示するには、product.localizedSubscriptionPeriod を使用してください。このローカライズはデバイスのロケールに基づきます。サブスクリプション期間をプログラムで取得するには、product.subscriptionPeriod を使用してください。そこから unit 列挙型にアクセスして期間の長さ(day、week、month、year、または unknown)を取得できます。numberOfUnits の値で期間単位の数を取得できます。たとえば、四半期ごとのサブスクリプションの場合、unit プロパティには .monthnumberOfUnits プロパティには 3 が表示されます。
Introductory Offerサブスクリプションに初回オファーが含まれていることを示すバッジやインジケーターを表示するには、product.subscriptionOffer プロパティを確認してください。このオブジェクトには以下の便利なプロパティがあります:
offerTypeintroductorypromotionalwinBack の値を持つ列挙型。無料トライアルや初期割引サブスクリプションは introductory タイプになります。
price:割引価格を数値で表したもの。無料トライアルの場合は 0 を確認してください。
localizedPrice:ユーザーのロケールに合わせてフォーマットされた割引価格。
localizedNumberOfPeriods:オファーの期間をデバイスのロケールでローカライズした文字列。たとえば、3日間のトライアルオファーの場合、このフィールドには 3 days と表示されます。
subscriptionPeriod:オファー期間の個別の詳細はこのプロパティで取得することもできます。オファーに対してもサブスクリプション期間と同様に機能します。
localizedSubscriptionPeriod:ユーザーのロケールに合わせてフォーマットされた割引のサブスクリプション期間。

v4では、getPaywallProducts(flow:) が返すすべてのプロダクトにオファーの適格性情報が含まれています。v3にあった getPaywallProductsWithoutDeterminingOffer の個別呼び出しは削除されました。

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

通常、フローはほぼ瞬時に取得されるため、この処理を高速化することを特に気にする必要はありません。ただし、オーディエンスやプレースメントが多数あり、ユーザーのインターネット接続が不安定な場合、フローの取得に想定以上の時間がかかることがあります。そのような状況では、何も表示しないよりもデフォルトフローを表示して、スムーズなユーザー体験を確保したい場合があるでしょう。 これに対処するには、getFlowForDefaultAudience メソッドを使用できます。このメソッドは、指定されたプレースメントの All Users オーディエンス向けのフローを取得します。ただし、推奨されるアプローチは getFlow メソッドを使用してフローを取得することである点を理解しておくことが重要です。詳細は上記のフロー情報の取得セクションを参照してください。

getFlow の使用を推奨する理由

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

  • 後方互換性の問題: 現在のバージョンと将来のバージョンで異なるフローを表示する必要がある場合、課題に直面する可能性があります。現在の(レガシー)バージョンに対応したフローを設計するか、現在の(レガシー)バージョンのユーザーがレンダリングされないフローで問題に遭遇することを許容するかのどちらかになります。
  • ターゲティングの喪失: すべてのユーザーが All Users オーディエンス向けに設計された同じフローを見ることになるため、パーソナライズされたターゲティング(国、マーケティングアトリビューション、独自のカスタム属性に基づくターゲティングを含む)が失われます。 これらのデメリットを受け入れてでもフローの取得を高速化したい場合は、以下のように getFlowForDefaultAudience メソッドを使用してください。それ以外の場合は、上記getFlow を使用してください。
パラメータ必須/任意説明
placementId必須プレースメントの識別子。Adapty ダッシュボードでプレースメントを作成する際に指定した値です。
fetchPolicyデフォルト: .reloadRevalidatingCacheData

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

ただし、ユーザーがネットワークの不安定な環境にいると想定される場合は、.returnCacheDataElseLoad の使用を検討してください。キャッシュが存在する場合はキャッシュされたデータを返します。この場合、最新のデータが届かない可能性はありますが、ネットワーク状況に関わらず読み込みが速くなります。キャッシュは定期的に更新されるため、セッション中にネットワークリクエストを避けるために活用しても安全です。

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

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

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

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

  2. Adapty ダッシュボードでペイウォールを作成し、プロダクトをペイウォールに追加してください。

  3. Adapty ダッシュボードでプレースメントを作成し、ペイウォールをプレースメントに追加してください。

  4. モバイルアプリに Adapty SDK をインストールしてください。

ペイウォール情報の取得

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

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

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

パラメーター必須/任意説明
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 オブジェクト。

プロダクトを取得する

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

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

パラメータ説明
ProductsAdaptyPaywallProduct オブジェクトのリストで、プロダクト識別子、プロダクト名、価格、通貨、サブスクリプション期間、その他のプロパティを含みます。
独自のペイウォールデザインを実装する際、AdaptyPaywallProduct オブジェクトから以下のプロパティにアクセスする必要があります。以下によく使われるプロパティを示しますが、利用可能なすべてのプロパティの詳細はリンク先のドキュメントを参照してください。
プロパティ説明
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
タイトルプロダクトのタイトルを表示するには、product.localizedTitle を使用します。ローカライズはデバイスのロケールではなく、ユーザーが選択したストアの国に基づいて行われます。
価格ローカライズされた価格を表示するには、product.localizedPrice を使用します。このローカライズはデバイスのロケール情報に基づいています。product.price を使用すると価格を数値として取得することもできます。値はローカル通貨で提供されます。対応する通貨記号を取得するには、product.currencySymbol を使用します。
サブスクリプション期間期間(週、月、年など)を表示するには、product.localizedSubscriptionPeriod を使用します。このローカライズはデバイスのロケールに基づいています。サブスクリプション期間をプログラムで取得するには、product.subscriptionPeriod を使用します。そこから unit 列挙型にアクセスして長さ(day、week、month、year、または unknown)を取得できます。numberOfUnits の値は期間単位の数を返します。たとえば四半期サブスクリプションの場合、unit プロパティには .month、numberOfUnits プロパティには 3 が表示されます。
初回オファーサブスクリプションに初回オファーが含まれているかをバッジなどで表示するには、product.subscriptionOffer プロパティを確認します。このオブジェクト内には以下の便利なプロパティが含まれています。
offerType: introductorypromotionalwinBack の値を持つ列挙型。無料トライアルや初期割引サブスクリプションは introductory タイプになります。
price: 割引後の価格(数値)。無料トライアルの場合は 0 になります。
localizedPrice: ユーザーのロケールに合わせてフォーマットされた割引価格。
localizedNumberOfPeriods: オファーの期間をデバイスのロケールでローカライズした文字列。たとえば3日間のトライアルオファーの場合、このフィールドには 3 days と表示されます。
subscriptionPeriod: オファー期間の詳細を個別に取得する場合はこのプロパティを使用します。前のセクションで説明したのと同じ方法でオファーに対しても機能します。
localizedSubscriptionPeriod: ユーザーのロケールに合わせてフォーマットされた割引のサブスクリプション期間。

iOS での初回オファー適格性の確認

デフォルトでは、getPaywallProducts メソッドが初回オファー、プロモーションオファー、ウィンバックオファーの適格性を確認します。SDK がオファーの適格性を判定する前にプロダクトを表示する必要がある場合は、代わりに getPaywallProductsWithoutDeterminingOffer メソッドを使用してください。

初期プロダクトを表示した後は、必ず通常の getPaywallProducts メソッドを呼び出して、正確なオファー適格性情報でプロダクトを更新してください。

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

通常、ペイウォールはほぼ瞬時に取得されるため、このプロセスを高速化することを特に意識する必要はありません。しかし、オーディエンスやペイウォールの数が多く、ユーザーのインターネット接続が不安定な場合、ペイウォールの取得に想定以上の時間がかかることがあります。そのような状況では、ペイウォールをまったく表示しないよりも、デフォルトのペイウォールを表示してスムーズなユーザー体験を提供したい場合があるでしょう。 この問題を解決するために、getPaywallForDefaultAudience メソッドを使用できます。このメソッドは、指定されたプレースメントの All Users オーディエンス向けペイウォールを取得します。ただし、推奨されるアプローチは getPaywall メソッドでペイウォールを取得することであり、詳細は上記のペイウォール情報の取得セクションをご覧ください。

getPaywall を推奨する理由

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

  • 後方互換性の問題: 異なるアプリバージョン(現行バージョンと将来のバージョン)で異なるペイウォールを表示する必要がある場合、課題が生じることがあります。現行(レガシー)バージョンに対応したペイウォールを設計するか、現行(レガシー)バージョンのユーザーがペイウォールを正しく表示できないリスクを受け入れるかのどちらかになります。
  • ターゲティングの喪失: すべてのユーザーが All Users オーディエンス向けに設計された同じペイウォールを見ることになるため、パーソナライズされたターゲティング(国、マーケティングアトリビューション、カスタム属性に基づくものを含む)が失われます。 これらのデメリットを許容してでもペイウォールの取得を高速化したい場合は、以下のように getPaywallForDefaultAudience メソッドを使用してください。そうでない場合は、上記で説明した getPaywall を使用してください。

getPaywallForDefaultAudience メソッドは iOS SDK バージョン 2.11.2 以降で利用できます。

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

任意

デフォルト: en

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

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

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

fetchPolicyデフォルト: .reloadRevalidatingCacheData

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

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

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