在 Flutter SDK 中优化流程与付费墙的获取
在 Flutter 中,可靠的流程或付费墙获取需要做到三件事:快速渲染、返回面向目标受众的实验变体,以及在网络较慢时优雅降级。以下规则涵盖了实现这一目标所需的时机、缓存和备用方案。
Tip
以下规则假设 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 的 assets 目录,并在
pubspec.yaml的assets中进行声明。 - 创建 flow 视图时,在
customAssets中为该 ID 传入打包文件:
// "welcome_video" is the custom media ID set in the Flow & Paywall Builder
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 秒,并在超时触发时使用备用付费墙。 - 不要让 flow 的展示依赖
getProfile()。独立调用getFlow,避免因用户画像加载缓慢而阻塞 UI。