Các vấn đề thường gặp

Bài viết này tổng hợp các vấn đề phổ biến nhất khi xây dựng flow trong Flow & Paywall Builder, kèm theo nguyên nhân và cách khắc phục.

Flow không xem trước hoặc xuất bản được

Hộp thoại thông báo chưa thể xuất bản vì ba thẻ trên màn hình vẫn chưa có sản phẩm

Bạn có thể gặp các lỗi sau khi cố gắng xem trước hoặc xuất bản flow:

Thông báoNguyên nhân và cách khắc phục
No product selectedMột thẻ sản phẩm chưa có sản phẩm nào. Chọn một sản phẩm, hoặc xóa thẻ đó.
This product no longer exists, This offer no longer existsSản phẩm hoặc ưu đãi đã bị xóa khỏi Dashboard của bạn. Chọn một sản phẩm/ưu đãi khác, hoặc dùng Replace in N places trên mục Missing trong bảng Products để sửa tất cả các chỗ dùng trên màn hình cùng một lúc.
This product is off this screen, This offer is off this screenMột biến văn bản, điều kiện, hoặc hành động đang tham chiếu đến một sản phẩm không có trong danh sách của màn hình, ví dụ sau khi bạn xóa nó trong bảng Products. Thêm lại sản phẩm trong bảng, hoặc chỉnh sửa tham chiếu đó.
Offer requiredoffer_price, offer_billing_period, hoặc offer_full_duration đang được dùng với một sản phẩm chưa có ưu đãi. Chọn ưu đãi cho sản phẩm, hoặc dùng biến prod_* thay thế.
Product reference is invalidTham chiếu sản phẩm bị lỗi định dạng. Hãy chọn lại sản phẩm.
Purchase action has no product to buyMột hành động Purchase chưa có sản phẩm — có thể để trống hoặc đang trỏ đến thẻ đã bị xóa. Trong tab Interactions của phần tử, đặt Product thành một sản phẩm hoặc products.selectedProduct.
Select product action has no product to selectThẻ mà hành động Select product đang trỏ đến đã biến mất: bị xóa, bị chuyển ra khỏi nhóm sản phẩm, hoặc nằm trên màn hình khác. Trong tab Interactions của phần tử, trỏ hành động đến một thẻ trên màn hình hiện tại.
Flow has no screens, Screen ”…” has no elementsThêm nội dung vào màn hình trống, hoặc xóa nó đi. Flow chỉ chứa nội dung Remote Config sẽ được miễn trừ.
Invalid interaction actionMột hành động chưa được điền đầy đủ: Open URL thiếu URL, Navigate to screen chưa có đích đến, Set variable chưa có phép gán, Custom thiếu Action ID, Show alert không có tiêu đề lẫn nội dung, Show hoặc Hide chưa chỉ định phần tử, hoặc Purchase thanh toán qua web thiếu Web Paywall URL. Mở phần tương tác của phần tử và hoàn thiện hoặc xóa hành động đó.
Missing navigation targetMột hành động Navigate to screen đang trỏ đến màn hình đã bị xóa. Chọn một màn hình hiện có hoặc xóa hành động.
Missing product target, Invalid product target, Product target on another screen, Ambiguous product target, Select Product inside a componentMột hành động Select product đang trỏ đến thẻ đã bị xóa, không nằm trong nhóm sản phẩm, nằm trên màn hình khác, có element ID trùng với phần tử trên màn hình khác, hoặc nằm trong footer/header dùng chung giữa các màn hình. Hãy trỏ hành động đến một thẻ trong nhóm sản phẩm trên cùng màn hình, với ID duy nhất.
Missing selectable groupMột phần tử đang trỏ đến một selectable group không còn tồn tại. Kết nối lại, hoặc tạo lại nhóm đó.
Invalid visibility conditionMột quy tắc hiển thị có điều kiện chưa được điền đầy đủ. Hoàn thiện nó trong condition builder.
Missing Default Locale ContentMột hành động Open URL có URL ở ngôn ngữ khác nhưng chưa có URL ở ngôn ngữ mặc định. Thêm URL mặc định trong bảng Localizations.
Missing product referenceMột flow cũ đang dùng sản phẩm chưa được đăng ký trên màn hình. Mở màn hình và thêm sản phẩm trong bảng Products.

Xem trước flow trong ứng dụng Adapty thường xuyên trong quá trình xây dựng. Một flow không thể xuất bản cũng sẽ không tải được ở đó, và thông báo lỗi sẽ cho biết vấn đề là gì.

Tip

Để kiểm tra xem flow của bạn đã sẵn sàng cho môi trường production chưa, hãy chạy flow-audit skill. Công cụ này kiểm tra những gì lỗi xuất bản không bắt được: các nút không hoạt động, tuân thủ chính sách cửa hàng, nội dung chưa hoàn chỉnh và độ phủ bản dịch. Với mỗi vấn đề, báo cáo sẽ nêu tên phần tử và màn hình chứa nó.

Xuất bản thất bại với thông báo “Something went wrong” và không có chi tiết

Thông báo Something went wrong sau khi xuất bản thất bại, kèm địa chỉ hỗ trợ và Request ID để sao chép

Yêu cầu xuất bản thất bại ở phía Adapty, không phải do flow của bạn. Phiên bản đang hoạt động của bạn không thay đổi. Hãy đợi vài phút rồi xuất bản lại. Nếu vẫn thất bại, hãy sao chép Request ID từ thông báo và gửi đến support@adapty.io để đội ngũ hỗ trợ có thể tìm ra yêu cầu bị lỗi.

Ưu đãi không được áp dụng khi mua hàng

Builder chỉ kiểm tra xem ưu đãi có còn tồn tại trong Adapty hay không. Việc chiết khấu có được áp dụng hay không là do cửa hàng quyết định tại thời điểm mua hàng: ưu đãi giới thiệu phụ thuộc vào điều kiện đủ điều kiện của khách hàng, còn ưu đãi của App Store cần có In-App Purchase Key hợp lệ. Cả hai trường hợp đều được đề cập trong Sự khác biệt về sản phẩm và giá.

Giá ưu đãi trống trong phần xem trước

Phần xem trước trong builder không thể kết nối đến các cửa hàng, vì vậy offer_price, offer_billing_period và offer_full_duration sẽ hiển thị tên biến trong dấu ngoặc nhọn thay vì giá trị thực. Chúng sẽ được giải quyết khi SDK render flow trong ứng dụng của bạn. Để xem trước các điều kiện phụ thuộc vào loại ưu đãi, hãy xem Xem trước sản phẩm và ưu đãi.

Xuất bản thất bại sau khi nhập màu hex viết tắt

Hãy nhập màu dưới dạng đúng sáu chữ số hex, ví dụ #FFFFFF. Trường màu chấp nhận giá trị ngắn hơn nhưng không tự mở rộng, nên các giá trị viết tắt như #FFF sẽ đến cấu hình SDK ở dạng không hợp lệ và quá trình xuất bản bị từ chối. Độ trong suốt không liên quan — cùng một giá trị đó vẫn thất bại dù opacity là 100%. Trường hợp đặc biệt tốn kém nhất là giá trị bốn chữ số: nó xuất bản được, nhưng hiển thị một màu không phải màu bạn đã chọn.

Chỉnh sửa kiểu chữ không ảnh hưởng đến trạng thái của phần tử

Khi một trạng thái, chẳng hạn như Selected, đã có cài đặt kiểu chữ riêng, các chỉnh sửa kiểu chữ ở trạng thái Default — kể cả việc áp dụng text style khác — sẽ không ảnh hưởng đến trạng thái đó. Hãy chỉnh sửa trực tiếp kiểu chữ của trạng thái đó.

Các phần tử mất định dạng sau khi xóa text style

Khi xóa một text style, các thiết lập của nó sẽ không được sao chép vào những phần tử đang dùng style đó: các phần tử đó sẽ trở về typography mặc định. Trước khi xóa một style, hãy gán lại các phần tử bị ảnh hưởng sang style khác hoặc thiết lập typography thủ công cho chúng.

Thiếu các tùy chọn vị trí, kích thước và khoảng cách cho một phần tử

Phần tử và vùng chứa của nó đều dùng hướng Free. Điều này chỉ cho phép một vị trí và kích thước duy nhất: Absolute, với chiều rộng và chiều cao cố định. Adapty sẽ ẩn các tùy chọn còn lại — thanh chuyển đổi Position, phần Spacing, cùng các tùy chọn Fill và Hug. Để hiển thị lại các tùy chọn này, hãy đổi Direction của phần tử sang Vertical hoặc Horizontal.

Conditions và biến bị lỗi sau khi thay đổi Element ID

Các điều kiện và biến văn bản tham chiếu đến các phần tử theo Element ID, và việc thay đổi ID sẽ không cập nhật các tham chiếu đó — chúng sẽ âm thầm ngừng hoạt động. Hãy đặt Element ID trước khi tham chiếu đến nó. Nếu bạn buộc phải thay đổi, hãy cập nhật tất cả các tham chiếu trong điều kiện và biến để khớp với ID mới. Ngoại lệ là các đoạn của thanh tiến trình (progress-bar segments): khi đổi tên một đoạn, các tham chiếu đến nó sẽ được cập nhật tự động.

Điều kiện hoặc biến trả về giá trị rỗng

Bộ chọn biến liệt kê các trường từ mọi màn hình, vì vậy một điều kiện hoặc biến văn bản có thể tham chiếu đến một ô nhập mà người dùng chưa điền. Khi chạy, tham chiếu đó sẽ trả về giá trị rỗng. Hãy chỉ tham chiếu các trường đã được thu thập ở bước trước trong flow.

Người dùng thấy giá trị ban đầu (Initial value) của custom tag thay vì giá trị từ app của bạn

Người dùng thấy giá trị ban đầu (Initial value) của custom tag trong các trường hợp sau:

  • Ứng dụng của bạn không truyền giá trị nào: Code mở flow không truyền giá trị cho tag, hoặc người dùng chưa cập nhật ứng dụng lên phiên bản có chức năng đó.
  • Tên không khớp: Tên trong code ứng dụng khác với tên tag trong builder. Tên phân biệt chữ hoa chữ thường và bao gồm cả nhóm. Ví dụ: nếu nhóm user chứa tag streak, thì tên chính xác của tag là user.streak.
  • Một tag khác trong cùng phần tử văn bản không có giá trị: Nếu một custom tag trong phần tử văn bản không có giá trị, mọi tag trong phần tử đó đều hiển thị giá trị Initial value. Hãy truyền giá trị cho mọi custom tag trong phần tử văn bản đó.

SDK di động của Adapty không truyền giá trị nào cho các custom tag, vì vậy bản xem trước chỉ hiển thị giá trị ban đầu (Initial values). Để xem các giá trị mà ứng dụng của bạn truyền vào, hãy mở flow trong bản build của ứng dụng.

Người dùng không thấy gì thay vì thẻ tùy chỉnh

Người dùng không thấy gì thay vì một thẻ tùy chỉnh trong các trường hợp sau:

  • Ứng dụng của bạn truyền một chuỗi rỗng: Adapty coi chuỗi rỗng là một giá trị, nên Initial value sẽ không xuất hiện như một giá trị dự phòng. Để hiển thị Initial value thay thế, hãy không truyền giá trị nào cho thẻ đó.
  • Thẻ không có Initial value: Để hiển thị giá trị dự phòng khi ứng dụng của bạn không truyền giá trị nào, hãy nhập Initial value cho thẻ đó.

Thao tác Set variable không thay đổi sản phẩm đang được chọn

Sản phẩm đang được chọn không phải là biến có thể gán giá trị, nên Set variable không thể thay đổi lựa chọn đó. Hãy dùng thao tác Select product thay thế.

Hình ảnh hoặc video không tải lên được

Tệp vượt quá giới hạn media của Flow & Paywall Builder sẽ không tải lên được. Hãy kiểm tra tệp theo yêu cầu của Hình ảnh và Video:

Thành phầnĐịnh dạngKích thước tệp tối đaGiới hạn khác
Hình ảnh.JPG, .PNG, .WEBP20 MB—
Video.MP4, .WEBM50 MBTối đa 30 giây; tối thiểu 640×640 pixel

Các định dạng sau không được hỗ trợ:

  • GIF động và WEBP động: Để thêm chuyển động, hãy dùng phần tử Video thay thế.
  • SVG: Xuất file dưới dạng PNG hoặc WEBP. Với icon, bạn không cần tải lên gì cả — phần tử Icon lấy từ thư viện Tabler Icons được tích hợp sẵn.

Footer chỉ hiển thị trên màn hình có bật Vertical scroll. Hãy bật Vertical scroll trong Screen settings > Scroll.