Flutter SDKでのフローとペイウォールの取得を最適化する
Flutter でフローやペイウォールを確実に取得するには、次の3つが必要です:高速なレンダリング、オーディエンス対象のバリアントの返却、そしてネットワークが遅い場合のグレースフルなフォールバック。以下のルールでは、それを実現するためのタイミング・キャッシング・フォールバックパターンについて説明します。
このルールは、Adapty().activate() と Adapty().identify() がすでに完了していることを前提としています。詳細は Flutter SDK の呼び出し順序 を参照してください。
ルールと注意点
| これをすること | これをしないこと | 理由 |
|---|---|---|
| 表示しようとしているプレースメントをフェッチする。 | 起動時にすべてのプレースメントを一括でプリフェッチする。 | 一括プリフェッチはメインスレッドをブロックし、バースト中にブラックスクリーンが発生する。 |
アトリビューションが解決する機会を得た後に getFlow をフェッチする — 例えば、activate の 1〜2 秒後、または didUpdateProfileStream が発火した後。 | runApp の前に main() で getFlow を呼び出す。 | アトリビューションがまだ反映されていない。フローはデフォルトのオーディエンスに対して解決され、セグメントや ASA パーソナライゼーションが暗黙的にスキップされる。 |
loadTimeout を設定し、すべてのプレースメントにフォールバックペイウォールを設定する。 | getFlow を無制限に待機する。 | タイムアウトがないと、通信状態が悪いユーザーはネットワークが解決するまで — またはアプリを閉じるまで — 空白の画面を見続けることになる。 |
プレースメントの選び方についてはプレースメントを、fetchPolicyおよびloadTimeoutパラメータの詳細についてはペイウォールとプロダクトの取得を参照してください。
アプリバンドルから最初の画面のメディアを表示する
フローは画像や動画を Adapty からダウンロードします。最初の画面のメディアを即座に表示するには、アプリバンドルから直接提供してください。これは、既存のネイティブオンボーディングのビジュアルなど、すでに同梱しているメディアを再利用するのに便利な方法です。
- Flow & Paywall Builderで、画像または動画にカスタムメディアIDを設定します。そこでアップロードしたファイルはフォールバックとして使用されます。
- ファイルをFlutterのアセットに追加し、
pubspec.yamlのassetsに記載します。 - フロービューを作成する際に、
customAssetsでそのIDに対応するバンドルファイルを渡します。
// "welcome_video" は Flow & Paywall Builder で設定したカスタムメディア ID です
final bundledAssets = {
'welcome_video': AdaptyCustomAsset.localVideoAsset(
assetId: 'assets/videos/welcome.mp4',
),
};
try {
final view = await AdaptyUI().createFlowView(
flow: flow,
customAssets: bundledAssets,
);
} on AdaptyError catch (e) {
// handle the error
}
バンドルしたファイルはアプリのダウンロードサイズに影響するため、ユーザーが最初に目にするメディアのみをバンドルしてください。
バンドルされていないメディアも即座に表示されます。フローのレイアウトには各画像の低解像度コピー(動画のスチルフレームを含む)が含まれており、フルファイルが読み込まれるまでの間、それが表示されます。
customAssets の完全なリファレンスについては、アセットのカスタマイズを参照してください。
接続状況が悪い環境向けのチューニング
接続状況が常に悪い市場(農村部、交通機関、ルーティングの問題が発生する地域)向けの設定:
- 最初のフェッチ以外はすべて
fetchPolicy: AdaptyFlowFetchPolicy.returnCacheDataElseLoadを設定する。 - Adapty ダッシュボードのすべてのプレースメントにフォールバックペイウォールを設定する。
loadTimeoutを 3〜5 秒に設定し、タイムアウトが発生した場合はフォールバックを受け入れる。getProfile()の完了をフロー表示の条件にしない。getFlowは独立して呼び出すことで、プロファイルの取得が遅くても UI をブロックしないようにする。