Kotlin Multiplatform SDKにおけるフローとペイウォールの取得を最適化する
Kotlin Multiplatformで確実にフローやペイウォールを取得するには、次の3つが必要です:高速なレンダリング、オーディエンスに合ったバリアントの返却、そしてネットワークが遅い場合のグレースフルなフォールバック。以下のルールでは、これを実現するためのタイミング、キャッシュ、フォールバックパターンを説明します。
このルールは、Adapty.activate() と Adapty.identify() がすでに完了していることを前提としています。詳細は Kotlin Multiplatform SDK の呼び出し順序 を参照してください。
ルールと注意点
| すること | してはいけないこと | 理由 |
|---|---|---|
| 表示しようとしているプレースメントのみを取得する。 | 起動時にすべてのプレースメントを並列でプリフェッチする。 | 一括プリフェッチはメインスレッドをブロックし、バースト中にブラック画面が発生する。 |
アトリビューションが解決される時間を確保してから getFlow を取得する(例:activate の 1〜2 秒後、または setOnProfileUpdatedListener が発火した後)。 | アプリ起動時に getFlow を呼び出す。 | アトリビューションがまだ反映されていないため、フローはデフォルトのオーディエンスに対して解決され、セグメントや ASA パーソナライズが静かにスキップされる。 |
loadTimeout を設定し、すべてのプレースメントにフォールバックペイウォールを設定する。 | getFlow を無期限に待機する。 | タイムアウトがないと、接続状況の悪いユーザーはネットワークが解決されるまで空白画面を見続けるか、アプリを閉じてしまう。 |
ペイウォールとプロダクトの取得でfetchPolicyとloadTimeoutパラメーターのリファレンスを確認し、プレースメントで適切なプレースメントの選び方を参照してください。
アプリバンドルから最初の画面のメディアを表示する
フローは画像や動画を Adapty からダウンロードします。最初の画面のメディアを即座に表示するには、アプリバンドルから提供してください。これは、既存のネイティブオンボーディングのビジュアルなど、すでにアプリに同梱しているメディアを再利用するのに最適な方法です。
- フロービルダーまたはペイウォールビルダーで、画像または動画にカスタムメディアIDを設定します。そこでアップロードしたファイルはフォールバックとして使用されます。
- アプリのリソースに
commonMain/composeResources/files/というパスでファイルを追加します。 - フロービューを作成する際、
customAssetsでそのIDにバンドルされたファイルを渡します。
// "welcome_video" is the custom media ID set in the Flow & Paywall Builder
val bundledAssets: Map<String, AdaptyCustomAsset> = mapOf(
"welcome_video" to AdaptyCustomAsset.localVideoResource(
path = Res.getUri("files/videos/welcome.mp4")
),
)
AdaptyUI.createFlowView(
flow = flow,
customAssets = bundledAssets,
).onSuccess { view ->
view.present()
}.onError { error ->
// handle the error
}
バンドルされたファイルはアプリのダウンロードサイズに影響するため、最初に表示されるメディアのみをバンドルしてください。
バンドルしていないメディアもすぐに表示されます。フローのレイアウトには各画像(動画のスチルフレームを含む)の低解像度コピーが含まれており、フルサイズのファイルが読み込まれるまでそれが表示されます。
customAssets の完全なリファレンスについては、アセットのカスタマイズを参照してください。
接続状況が悪い環境向けのチューニング
接続状況が常に悪い市場(農村部、移動中、ルーティング障害のある地域)向け:
- 初回以外のすべてのフェッチで
fetchPolicy = AdaptyPaywallFetchPolicy.ReturnCacheDataElseLoadを設定する。 - Adapty ダッシュボードのすべてのプレースメントにフォールバックペイウォールを設定する。
loadTimeoutを 3〜5 秒に設定し、タイムアウト発生時はフォールバックを受け入れる。- フローの表示を
Adapty.getProfile()の完了に依存させない。getFlowは独立して呼び出すことで、プロファイルの取得が遅くても UI をブロックしないようにする。