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

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

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

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

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

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

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

ペイウォール情報の取得

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

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

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

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必須プレースメントの識別子。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オブジェクト。

プロダクトの取得

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

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

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

パラメーター説明
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列挙型にアクセスして長さ(日、週、月、年、または不明)を取得できます。numberOfUnitsの値で期間の単位数を取得できます。例えば、四半期サブスクリプションの場合、unitプロパティにはAdaptyPeriodUnit.month、numberOfUnitsプロパティには3が表示されます。
Introductory Offerサブスクリプションに初回オファーが含まれていることを示すバッジなどを表示するには、product.subscription?.offer?.phasesプロパティを確認してください。これは最大2つの割引フェーズ(無料トライアルフェーズと初回価格フェーズ)を含むことができるリストです。各フェーズオブジェクトには以下の便利なプロパティがあります:
paymentModeAdaptyPaymentMode.freeTrialAdaptyPaymentMode.payAsYouGoAdaptyPaymentMode.payUpFrontAdaptyPaymentMode.unknownの値を持つ列挙型。無料トライアルはAdaptyPaymentMode.freeTrialタイプです。
price:数値としての割引価格。無料トライアルの場合は0になります。
localizedNumberOfPeriods:オファーの長さをデバイスのロケールでローカライズした文字列。例えば、3日間のトライアルオファーはこのフィールドに3 daysと表示されます。
subscriptionPeriod:オファー期間の個別の詳細をこのプロパティで取得することもできます。オファーに対しても前のセクションと同様に機能します。
localizedSubscriptionPeriod:ユーザーのロケールに合わせてフォーマットされた割引のサブスクリプション期間。

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

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

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

getPaywallを推奨する理由

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

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

これらの欠点を受け入れてペイウォール取得の高速化メリットを享受する場合は、以下のようにgetPaywallForDefaultAudienceメソッドを使用してください。そうでない場合は、上記で説明したgetPaywallを使用してください。

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

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

任意

デフォルト: en

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

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

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

fetchPolicyデフォルト: .reloadRevalidatingCacheData

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

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

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