在 React Native SDK 中优化流程与付费墙的加载
在 React Native 中实现可靠的流程或付费墙加载需要做到三点:渲染速度快、返回针对目标受众的实验变体,以及在网络较慢时能优雅地降级处理。以下规则涵盖了实现这些目标所需的时机控制、缓存和备用方案。
Tip
以下规则假设 adapty.activate() 和 adapty.identify() 已执行完毕。详见 React Native SDK 的调用顺序。
规则与注意事项
| 该做的 | 不该做的 | 原因 |
|---|---|---|
| 只获取即将展示的版位。 | 在启动时并发预取所有版位。 | 批量预取会阻塞 JS 线程,并在请求高峰期间产生黑屏。 |
在归因有机会完成解析后再调用 getFlow——例如,在 activate 后等待 1–2 秒,或等待 onLatestProfileLoad 触发之后。 | 在根组件挂载时调用 getFlow。 | 此时归因数据尚未到达。流程会按默认目标受众解析,并悄悄绕过市场细分和 ASA 个性化。 |
设置 loadTimeoutMs 并为每个版位配置备用付费墙。 | 无限期等待 getFlow 返回。 | 没有超时的情况下,网络状况差的用户会看到空白屏幕,直到网络恢复——或者直接关闭应用。 |
有关 fetchPolicy 和 loadTimeoutMs 参数的说明,请参阅获取付费墙和产品;有关如何选择合适的版位,请参阅版位。
从应用包中显示第一屏媒体
流程会从 Adapty 下载图片和视频。若要让第一屏媒体立即显示,可改为从应用包中提供。这是复用应用内已有媒体资源的好方式,例如现有原生用户引导的视觉素材。
- 在流程与付费墙编辑工具中,为图片或视频设置自定义媒体 ID。上传的文件将作为备用文件。
- 将文件添加到原生项目中:iOS 的 app bundle 和 Android 的
assets文件夹。 - 创建流程视图时,在
customAssets中为该 ID 传入打包的文件:
// "welcome_video" is the custom media ID set in the Flow & Paywall Builder
const bundledAssets: Record<string, AdaptyCustomAsset> = {
'welcome_video': {
type: 'video',
fileLocation: {
ios: { fileName: 'welcome.mp4' },
android: { relativeAssetPath: 'videos/welcome.mp4' },
},
},
};
const view = await createFlowView(flow, { customAssets: bundledAssets });
捆绑文件会增加应用的下载体积,因此只捆绑用户首先看到的媒体资源。
未捆绑的媒体文件同样会即时呈现:流程布局中包含每张图片(含视频静帧)的低分辨率缩略图,并在完整文件加载完成前持续显示。
完整的 customAssets 参考,请参阅自定义资源。
针对弱网环境进行优化
针对网络连接持续较差的市场(农村地区、交通路线、受路由问题影响的地区):
- 除第一次请求外,所有请求都设置
fetchPolicy: 'return_cache_data_else_load'。 - 在 Adapty 看板中为每个版位配置备用付费墙。
- 将
loadTimeoutMs设置为 3–5 秒,并在超时触发时接受备用付费墙。 - 不要将流程显示的前提条件设置为
getProfile()。独立调用getFlow,避免因获取用户画像较慢而阻塞 UI。