UnitySDKでフローとペイウォールの取得を最適化する
Unityで信頼性の高いフローまたはペイウォールの取得には、3つの要素が必要です:素早い描画、オーディエンスターゲティングに基づくバリアントの返却、そしてネットワークが遅い場合のスムーズなフォールバック。以下のルールで、タイミング・キャッシング・フォールバックのパターンについて説明します。
このルールは、Adapty.Activate() と Adapty.Identify() がすでに完了していることを前提としています。詳細は Unity SDK の呼び出し順序 を参照してください。
ルールと注意点
| こうする | こうしない | 理由 |
|---|---|---|
| 表示しようとしているプレースメントだけを取得する。 | 起動時にすべてのプレースメントをまとめてプリフェッチする。 | まとめてプリフェッチするとメインスレッドがブロックされ、バースト中にブラックスクリーンが発生する。 |
アトリビューションが解決される時間を確保してから GetFlow を取得する(例:Activate の 1〜2 秒後、または OnLoadLatestProfile の発火後)。 | Awake() で GetFlow を呼び出す。 | アトリビューションがまだ反映されていないため、フローがデフォルトのオーディエンスで解決され、セグメントや ASA のパーソナライゼーションが無効化される。 |
loadTimeout を設定し、すべてのプレースメントにフォールバックペイウォールを設定する。 | GetFlow を無制限に待ち続ける。 | タイムアウトがないと、接続状況が悪いユーザーはネットワークが解決するまで、またはアプリを閉じるまで空白の画面を見続けることになる。 |
fetchPolicy と loadTimeout パラメータのリファレンスは ペイウォールとプロダクトの取得 を参照してください。また、適切なプレースメントの選び方は プレースメント を参照してください。
アプリバンドルから最初の画面のメディアを表示する
フローは画像や動画を Adapty からダウンロードします。最初の画面のメディアを即座に表示するには、アプリバンドルから提供します。これは、既存のネイティブオンボーディングのビジュアルなど、すでに同梱しているメディアを再利用するのに適した方法です。
- Flow & Paywall Builder で、画像または動画にカスタムメディア ID を設定します。そこでアップロードしたファイルはフォールバックとして残ります。
- ファイルを Unity プロジェクトに追加します。
- フロービューを作成する際、
SetCustomAssetsを使って該当 ID のバンドルファイルを渡します。
// "welcome_video" is the custom media ID set in the Flow & Paywall Builder
var bundledAssets = new Dictionary<string, AdaptyCustomAsset>
{
{ "welcome_video", AdaptyCustomAsset.LocalVideoFile("custom_assets/videos/welcome.mp4") }
};
var parameters = new AdaptyUICreateFlowViewParameters()
.SetCustomAssets(bundledAssets);
AdaptyUI.CreateFlowView(flow, parameters, (view, error) => {
// handle the result
});
バンドルされたファイルはアプリのダウンロードサイズを増加させるため、最初に表示されるメディアのみをバンドルしてください。
バンドルしていないメディアもすぐに表示されます。フローのレイアウトには各画像の低解像度コピー(動画のスチルフレームを含む)が含まれており、フルサイズのファイルが読み込まれるまでその低解像度版が表示されます。
customAssets の完全なリファレンスについては、アセットのカスタマイズを参照してください。
通信環境が悪い場合のチューニング
通信状況が慢性的に悪い市場(農村部、交通機関、ルーティングに問題がある地域など)向けの設定:
- 最初のフェッチ以外は、すべてのフェッチで
fetchPolicyをAdaptyPlacementFetchPolicy.ReturnCacheDataElseLoadに設定する。 - Adapty ダッシュボードで、すべてのプレースメントにフォールバックペイウォールを設定する。
loadTimeoutを 3〜5 秒に設定し、タイムアウトが発生した場合はフォールバックを受け入れる。- フローの表示を
GetProfileに依存させない。GetFlowを独立して呼び出し、プロファイルの取得が遅くても UI をブロックしないようにする。