Tối ưu hóa việc tải flow & paywall trong Flutter SDK
Một lần tải flow hoặc paywall đáng tin cậy trên Flutter cần đảm bảo ba điều: hiển thị nhanh, trả về biến thể đúng với đối tượng mục tiêu, và dự phòng hợp lý khi mạng chậm. Các quy tắc dưới đây bao gồm các mẫu về thời điểm, bộ nhớ đệm và dự phòng để đạt được điều đó.
Các quy tắc này giả định rằng Adapty().activate() và Adapty().identify() đã hoàn tất. Xem Thứ tự gọi trong Flutter SDK.
Quy tắc và lưu ý
| Nên làm | Không nên làm | Lý do |
|---|---|---|
| Fetch placement mà bạn chuẩn bị hiển thị. | Prefetch tất cả placement đồng thời khi khởi động. | Bulk prefetch chặn main thread và gây màn hình đen trong khi xử lý. |
Fetch getFlow sau khi attribution đã có cơ hội resolve — ví dụ, 1–2 giây sau activate hoặc sau khi didUpdateProfileStream kích hoạt. | Gọi getFlow trong main() trước runApp. | Attribution chưa được xác định. Flow sẽ resolve theo đối tượng mặc định và âm thầm bỏ qua các phân khúc và cá nhân hóa ASA. |
Đặt loadTimeout và cấu hình paywall dự phòng cho mọi placement. | Chờ getFlow vô thời hạn. | Nếu không có timeout, người dùng kết nối kém sẽ thấy màn hình trắng cho đến khi mạng phản hồi — hoặc tắt ứng dụng. |
Xem Tải paywall và sản phẩm để tham khảo thông số fetchPolicy và loadTimeout, và Placements để chọn placement phù hợp.
Hiển thị media màn hình đầu từ app bundle
Một flow tải hình ảnh và video từ Adapty. Để hiển thị media của màn hình đầu tiên ngay lập tức, hãy phục vụ chúng từ app bundle thay thế. Đây là cách tốt để tái sử dụng media bạn đã có sẵn trong ứng dụng, chẳng hạn như hình ảnh của một onboarding native hiện có.
- Trong Flow & Paywall Builder, đặt custom media ID cho hình ảnh hoặc video. File bạn tải lên đó sẽ được dùng làm fallback.
- Thêm file vào assets Flutter và khai báo nó trong mục
assetscủapubspec.yaml. - Khi tạo flow view, truyền file đã đóng gói cho ID đó vào
customAssets:
// "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
}
Các file được nhúng sẵn sẽ làm tăng dung lượng tải về của ứng dụng, vì vậy chỉ nhúng những media mà người dùng nhìn thấy đầu tiên.
Các media bạn không đóng gói sẵn vẫn hiển thị ngay lập tức: layout của flow đã bao gồm một bản sao độ phân giải thấp của từng hình ảnh, kể cả frame tĩnh của video, và hiển thị bản đó cho đến khi file đầy đủ tải xong.
Để tham khảo đầy đủ về customAssets, xem Tùy chỉnh assets.
Tối ưu cho kết nối kém
Đối với các thị trường có kết nối kém liên tục (khu vực nông thôn, phương tiện giao thông, vùng bị ảnh hưởng bởi định tuyến mạng):
- Đặt
fetchPolicy: AdaptyFlowFetchPolicy.returnCacheDataElseLoadcho mọi lần fetch ngoại trừ lần đầu tiên. - Cấu hình paywall dự phòng cho mọi placement trên Adapty Dashboard.
- Đặt
loadTimeouttừ 3–5 giây và chấp nhận dùng fallback khi timeout xảy ra. - Đừng chặn việc hiển thị flow vì
getProfile(). GọigetFlowđộc lập để một profile tải chậm không làm tắc nghẽn giao diện.