フローとペイウォールの取得 - Android

getFlow で取得される内容
✦
フロー Flow & Paywall Builder で作成——デバイス上でネイティブにレンダリングされ、WebView は不要
✦
旧 Paywall Builder のペイウォール 旧 Paywall Builder で作成された既存のすべてのコンテンツ

フローのデザインが完了したら、モバイルアプリ上に表示できます。最初のステップは、プレースメントに紐づいたフローまたはペイウォールと、そのビュー設定を以下のように取得することです。

Tip

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

始める前に

以下が必要です:

フローまたはペイウォールの取得

ビルダーでフローまたはペイウォールをデザインした場合、ユーザーに表示するためにモバイルアプリのコードでレンダリングを心配する必要はありません。そのようなフローまたはペイウォールには、表示内容と表示方法の両方が含まれています。それでも、プレースメントを通じてIDを取得し、ビュー設定を取得してから、モバイルアプリで表示する必要があります。

最適なパフォーマンスを確保するために、フローまたはペイウォールとビュー設定をできるだけ早く取得し、ユーザーに表示する前に画像をダウンロードする十分な時間を確保することが重要です。

Tip

複数のプレースメントを一度にウォームアップするには、preloadFlows(Android SDK 4.1+)を呼び出してください。プレースメントのJSONのみをキャッシュするため、レイアウトと画像を取得するにはビュー設定を別途フェッチする必要があります。

フローまたはペイウォールを取得するには、getFlow メソッドを使用してください。

The input is empty — there is no content to translate.

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

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

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

3 つ目のポリシー AdaptyPlacementFetchPolicy.ReturnCacheDataIfNotExpiredElseLoad(maxAgeMillis) は、両者の中間に位置します。キャッシュのコピーが maxAgeMillis より新しい間はキャッシュを先に読み込み、古くなるとサーバーにアクセスします。

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

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

loadTimeoutデフォルト: 5 秒

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

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

Android の場合: 拡張関数(例: 5.seconds、.seconds は import com.adapty.utils.seconds から)または TimeInterval.seconds(5) を使用して TimeInterval を作成できます。制限なしに設定するには TimeInterval.INFINITE を使用してください。

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

パラメーター説明
Flowプレースメント、識別子(id、variationId)、バリアント名(variationName、省略可能、SDK 4.2+)、名前、ペイウォールのバリアント一覧(paywalls)、リモートコンフィグ、およびフローにビュー設定が含まれるかどうかを示す hasViewConfiguration フラグを持つ AdaptyFlow オブジェクトです。プロダクトを事前読み込み、カスタム UI、またはプログラムによるチェックのために取得するには、getPaywallProducts(flow) を呼び出してください。

ビュー設定の取得

フローまたはペイウォールを取得したら、flow.hasViewConfiguration を使ってビュー設定が含まれているかどうかを確認します。このフラグは、Adapty ダッシュボードでプレースメントがどのように設計されているかを示します。

Important

フローを公開してください。編集が未公開のフローは Dirty ステータスとなり、そのプレースメントは最後に公開されたバージョンを引き続き提供します。

Note

複数の言語を使用している場合は、ビルダーのローカライゼーションの追加方法と、ロケールコードの正しい使用方法をこちらでご確認ください。

読み込みが完了したら、フローまたはペイウォールを表示します。

デフォルトオーディエンス向けのフローまたはペイウォールを素早く取得する

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

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

Warning

getFlow を推奨する理由

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

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

対応するデメリットを許容してでもフローやペイウォールの取得を高速化したい場合は、以下のように getFlowForDefaultAudience メソッドを使用してください。そうでない場合は、上記で説明した getFlow を使用してください。

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

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

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

3つ目のポリシーである AdaptyPlacementFetchPolicy.ReturnCacheDataIfNotExpiredElseLoad(maxAgeMillis) は、この2つの中間に位置します。キャッシュされたコピーが maxAgeMillis より新しい間はキャッシュを最初に読み取り、古くなるとサーバーにアクセスします。

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

アセットのカスタマイズ

フローやペイウォールの画像・動画をカスタマイズするには、カスタムアセットを実装します。

ヒーロー画像と動画には事前定義済みのIDがあり、それぞれ hero_image と hero_video です。カスタムアセットバンドルでは、これらのIDを使って各要素を指定し、動作をカスタマイズします。

その他の画像・動画については、Adapty ダッシュボードでカスタムIDを設定する必要があります。

たとえば、次のようなことができます:

  • 一部のユーザーに別の画像や動画を表示する。
  • リモートのメイン画像の読み込み中にローカルのプレビュー画像を表示する。
  • 動画の再生前にプレビュー画像を表示する。
  • アプリにバンドルされたメディアを表示し、最初の画面をダウンロードなしで描画する。アプリバンドルからの最初の画面のメディアを表示するを参照してください。

以下は、シンプルなディクショナリーを使ってカスタムアセットを提供する例です。

val customAssets = AdaptyCustomAssets.of(
    "hero_image" to
            AdaptyCustomImageAsset.remote(
                url = "https://example.com/image.jpg",
                preview = AdaptyCustomImageAsset.file(
                    FileLocation.fromAsset("images/hero_image_preview.png"),
                )
            ),
    "hero_video" to
            AdaptyCustomVideoAsset.file(
                FileLocation.fromResId(requireContext(), R.raw.custom_video),
                preview = AdaptyCustomImageAsset.file(
                    FileLocation.fromResId(requireContext(), R.drawable.video_preview),
                ),
            ),
)

val flowView = AdaptyUI.getFlowView(
    activity,
    flowConfiguration,
    products,
    eventListener,
    insets,
    customAssets,
)
Note

アセットが見つからない場合、フローはデフォルトの外観にフォールバックします。

動画の場合、オプションで resolution を渡すことで、動画の読み込み前にレイアウトスペースを確保し、アスペクト比(width / height)を設定できます:

AdaptyCustomVideoAsset.file(
    FileLocation.fromResId(requireContext(), R.raw.custom_video),
    preview = AdaptyCustomImageAsset.file(
        FileLocation.fromResId(requireContext(), R.drawable.video_preview),
    ),
    resolution = AdaptyCustomVideoAsset.Resolution(width = 1080, height = 1920),
)

Adapty ダッシュボードの旧ペイウォールビルダーでペイウォールのビジュアル部分をデザインした後、モバイルアプリにそれを表示できます。このプロセスの最初のステップは、以下で説明するように、プレースメントに関連付けられたペイウォールとそのビュー設定を取得することです。

Warning

SDK 3.x のペイウォールビルダーで作成されたペイウォールには、Android SDK バージョン 3.0 以上が必要です。

Paywall Builderでカスタマイズされたペイウォールについての説明です。ペイウォールを手動で実装する場合は、リモートコンフィグペイウォール用のペイウォールとプロダクトの取得を参照してください。

Tip

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

モバイルアプリでペイウォールの表示を始める前に(クリックして展開)
  1. Adapty ダッシュボードでプロダクトを作成する。
  2. Adapty ダッシュボードでペイウォールを作成し、プロダクトを追加する。
  3. Adapty ダッシュボードでプレースメントを作成し、ペイウォールを追加する。
  4. モバイルアプリに Adapty SDK をインストールする。

ペイウォールビルダーで作成したペイウォールを取得する

ペイウォールビルダーでペイウォールを作成した場合、ユーザーに表示するためにモバイルアプリのコードでレンダリングを実装する必要はありません。このようなペイウォールには、表示する内容と表示方法の両方が含まれています。ただし、プレースメントを通じてペイウォールの ID を取得し、ビュー設定を行ったうえで、モバイルアプリに表示する必要があります。

最適なパフォーマンスを確保するには、ペイウォールとそのビュー設定をできるだけ早く取得し、ユーザーに表示する前に画像のダウンロードに十分な時間を確保することが重要です。

ペイウォールを取得するには、getPaywall メソッドを使用します:

パラメーター:

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

任意

デフォルト: en

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

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

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

fetchPolicyデフォルト: AdaptyPlacementFetchPolicy.Default

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

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

3番目のポリシー AdaptyPlacementFetchPolicy.ReturnCacheDataIfNotExpiredElseLoad(maxAgeMillis) は、上記2つの中間に位置します。キャッシュが maxAgeMillis より新しい間はキャッシュを先に読み取り、古くなるとサーバーにアクセスします。

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

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

loadTimeoutデフォルト: 5秒

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

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

Android の場合: TimeInterval は拡張関数(例: 5.seconds、.seconds は import com.adapty.utils.seconds から)または TimeInterval.seconds(5) を使って作成できます。制限を設けない場合は TimeInterval.INFINITE を使用してください。

レスポンスパラメータ:

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

ペイウォールビルダーで作成したペイウォールのビュー設定を取得する

Important

ペイウォールビルダーで Show on device トグルを必ず有効にしてください。このオプションがオンになっていない場合、ビュー設定を取得できません。

ペイウォールを取得したら、ViewConfiguration が含まれているかどうかを確認してください。これが含まれている場合、そのペイウォールはペイウォールビルダーで作成されたことを示します。ViewConfiguration が存在する場合はペイウォールビルダーのペイウォールとして処理し、存在しない場合はリモートコンフィグのペイウォールとして処理してください。

Note

複数言語をサポートする場合は、ペイウォールにローカリゼーションを追加してください。使用するコードについては、ローカリゼーションとロケールコードを参照してください。

読み込みが完了したら、ペイウォールを表示してください。

デフォルトオーディエンス向けペイウォールを素早く取得する

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

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

Warning

getPaywall を推奨する理由

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

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

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

Note

getPaywallForDefaultAudience メソッドは Android SDK 2.11.3 以降で利用可能です。

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

任意

デフォルト: en

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

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

ロケールコードの詳細および推奨する使用方法については、ローカライズとロケールコードをご覧ください。

fetchPolicyデフォルト: AdaptyPlacementFetchPolicy.Default

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

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

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

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

アセットのカスタマイズ

ペイウォール内の画像や動画をカスタマイズするには、カスタムアセットを実装します。

ヒーロー画像と動画には、あらかじめ定義されたID(hero_image と hero_video)があります。カスタムアセットバンドルでは、これらのIDを使って要素を指定し、動作をカスタマイズします。

その他の画像や動画については、Adapty ダッシュボードでカスタムIDを設定する必要があります。

たとえば、次のようなことができます:

  • 一部のユーザーに別の画像や動画を表示する。
  • リモートのメイン画像の読み込み中に、ローカルのプレビュー画像を表示する。
  • 動画を再生する前にプレビュー画像を表示する。
Important

この機能を使用するには、Adapty Android SDK をバージョン 3.7.0 以上にアップデートしてください。

カスタムアセットをシンプルな辞書で提供する方法の例を示します。

val customAssets = AdaptyCustomAssets.of(
    "hero_image" to
            AdaptyCustomImageAsset.remote(
                url = "https://example.com/image.jpg",
                preview = AdaptyCustomImageAsset.file(
                    FileLocation.fromAsset("images/hero_image_preview.png"),
                )
            ),
    "hero_video" to
            AdaptyCustomVideoAsset.file(
                FileLocation.fromResId(requireContext(), R.raw.custom_video),
                preview = AdaptyCustomImageAsset.file(
                    FileLocation.fromResId(requireContext(), R.drawable.video_preview),
                ),
            ),
)

val paywallView = AdaptyUI.getPaywallView(
    activity,
    viewConfiguration,
    products,
    eventListener,
    insets,
    customAssets,
)
Note

アセットが見つからない場合、ペイウォールはデフォルトの外観にフォールバックします。