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

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

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

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

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

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

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

ペイウォール情報を取得する

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

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

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


Adapty.getPaywall(
    placementId = "YOUR_PLACEMENT_ID", 
    locale = "en",
    fetchPolicy = AdaptyPaywallFetchPolicy.Default,
    loadTimeout = 5.seconds
).onSuccess { paywall ->
    // the requested paywall
}.onError { error ->
    // handle the error
}
パラメータ必須/任意説明
placementId必須プレースメントの識別子。Adapty ダッシュボードでプレースメントを作成する際に指定した値です。
locale

任意

デフォルト: en

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

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

fetchPolicyデフォルト: AdaptyPaywallFetchPolicy.Default

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

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

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

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

loadTimeoutデフォルト: 5秒

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

まれに、この操作が内部で複数のリクエストで構成されているため、loadTimeoutで指定した時間より少し遅くタイムアウトする場合があります。

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

レスポンスパラメータ:

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

プロダクトを取得する

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

Adapty.getPaywallProducts(paywall).onSuccess { products ->
    // the requested products
}.onError { error ->
    // handle the error
}

レスポンスパラメータ:

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

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

プロパティ説明
Titleプロダクトのタイトルを表示するには、product.localizedTitleを使用します。ローカライズはデバイス自体のロケールではなく、ユーザーが選択したストアの国に基づいています。
Priceローカライズされた価格を表示するには、product.price.localizedStringを使用します。このローカライズはデバイスのロケール情報に基づいています。product.price.amountを使用して価格を数値として取得することもできます。値はローカル通貨で提供されます。関連する通貨記号を取得するには、product.price.currencySymbolを使用します。
Subscription Period期間(週、月、年など)を表示するには、product.subscriptionDetails?.localizedSubscriptionPeriodを使用します。このローカライズはデバイスのロケールに基づいています。プログラムでサブスクリプション期間を取得するには、product.subscriptionDetails?.subscriptionPeriodを使用します。そこからunit列挙型にアクセスして長さ(DAY、WEEK、MONTH、YEAR、またはUNKNOWN)を取得できます。numberOfUnitsの値は期間単位の数を示します。例えば、四半期サブスクリプションの場合、unitプロパティにMONTH、numberOfUnitsプロパティに3が表示されます。
Introductory Offerサブスクリプションに初回オファーが含まれているかどうかを示すバッジやインジケーターを表示するには、product.subscriptionDetails?.introductoryOfferPhasesプロパティを確認してください。これは最大2つの割引フェーズ(無料トライアルフェーズと初回価格フェーズ)を含むことができるリストです。各フェーズオブジェクトには以下の便利なプロパティがあります:
paymentMode: FREE_TRIALPAY_AS_YOU_GOPAY_UPFRONTUNKNOWNの値を持つ列挙型。無料トライアルはFREE_TRIALタイプになります。
price: 数値としての割引価格。無料トライアルの場合は0を確認してください。
localizedNumberOfPeriods: デバイスのロケールを使用してローカライズされた、オファーの長さを説明する文字列。例えば、3日間のトライアルオファーの場合、このフィールドに3 daysと表示されます。
subscriptionPeriod: オファー期間の個別の詳細を取得するには、このプロパティを使用します。オファーに対しても前のセクションと同じ方法で機能します。
localizedSubscriptionPeriod: ユーザーのロケール向けにフォーマットされた割引のサブスクリプション期間。

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

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

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

getPaywallを推奨する理由

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

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

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


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

任意

デフォルト: en

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

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

fetchPolicyデフォルト: AdaptyPaywallFetchPolicy.Default

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

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

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