Truyền dữ liệu vào flow trong Unity SDK
Custom tag là một biến tùy chỉnh có giá trị từ ứng dụng của bạn. Sau khi bạn chọn Value comes from outside the app trong cài đặt của biến, ứng dụng có thể đặt giá trị đó thông qua Adapty SDK. Ví dụ: một phần tử văn bản chứa “Coins:” và một custom tag. Nếu ứng dụng của bạn truyền “120” cho tag đó, người dùng sẽ thấy “Coins: 120”.
Trước khi bắt đầu
Bạn cần Adapty SDK v4 trở lên. Các phiên bản trước v4 không hiển thị flow.
Thêm custom tags vào flow
Để hiển thị các giá trị của ứng dụng trong một flow, hãy thiết lập custom tag trong builder:
-
Tạo một custom tag cho mỗi giá trị mà ứng dụng của bạn truyền vào.
-
Ghi lại tên đầy đủ của từng tag, bao gồm cả nhóm của nó. Code trong ứng dụng của bạn truyền từng giá trị theo tên này. Ví dụ: nếu nhóm
userchứa tagstreak, thì tên đầy đủ của tag làuser.streak.
Truyền giá trị custom tag
Truyền giá trị từ ứng dụng của bạn vào phương thức SetCustomTags của đối tượng AdaptyUICreateFlowViewParameters, dưới dạng dictionary từ string sang string, chẳng hạn như Dictionary<string, string>, rồi gọi AdaptyUI.CreateFlowView với đối tượng đó:
- Mỗi key là tên đầy đủ của một custom tag, ví dụ như
user.streak. - Mỗi value là chuỗi mà người dùng nhìn thấy thay thế cho tag đó.
- Mỗi value phải ở dạng dễ đọc, chẳng hạn “1,250” thay vì “1250.0”. Adapty không tự định dạng hay dịch giá trị này.
SDK đọc các giá trị một lần duy nhất khi tạo view, vì vậy chúng sẽ không thay đổi trong khi flow đang mở.
var parameters = new AdaptyUICreateFlowViewParameters()
.SetCustomTags(new Dictionary<string, string> {
{ "username", "DragonSlayer42" },
{ "coins", "1,250" }
});
AdaptyUI.CreateFlowView(flow, parameters, (view, error) => {
if (error != null) {
// handle the error
return;
}
// present the view
});
Để kiểm tra các custom tag của bạn, hãy mở flow trong ứng dụng sau khi thêm code thiết lập giá trị cho chúng. Canvas của builder và xem trước trên thiết bị chỉ hiển thị giá trị ban đầu: ứng dụng Adapty trên thiết bị di động không thiết lập giá trị cho custom tag.
Nếu ứng dụng của bạn đã thiết lập giá trị custom tag cho các paywall cũ của Paywall Builder, hãy xem cách custom tag trong flow khác biệt như thế nào.
Người dùng thấy gì khi không có giá trị
Người dùng sẽ thấy Giá trị ban đầu của thẻ tùy chỉnh như một giá trị dự phòng trong các trường hợp sau:
- Ứng dụng của bạn không truyền giá trị nào cho thẻ đó.
- Người dùng chưa cập nhật ứng dụng lên phiên bản có truyền giá trị.
- Tên trong code của ứng dụng không khớp với tên đầy đủ của thẻ, bao gồm cả chữ hoa/thường.
- Một thẻ tùy chỉnh khác trong cùng phần tử văn bản không có giá trị. Khi đó, mọi thẻ tùy chỉnh trong phần tử văn bản đó đều hiển thị giá trị ban đầu của chúng.
Để không hiển thị gì thay cho thẻ, hãy truyền một chuỗi rỗng. Adapty coi chuỗi rỗng là một giá trị hợp lệ, vì vậy giá trị dự phòng sẽ không xuất hiện.
Ví dụ: hiển thị BMI từ câu trả lời onboarding
Một flow có thể thu thập câu trả lời từ người dùng, và một custom tag có thể hiển thị giá trị từ ứng dụng của bạn. Kết hợp cả hai để hiển thị cho người dùng một kết quả mà ứng dụng của bạn tính toán từ câu trả lời của họ, chẳng hạn như điểm số, gói được đề xuất, hoặc chỉ số sức khỏe:
- Một flow thu thập câu trả lời và gửi chúng đến ứng dụng của bạn.
- Ứng dụng của bạn tính toán kết quả.
- Ứng dụng của bạn truyền kết quả đó sang flow tiếp theo dưới dạng giá trị custom tag.
Trong ví dụ này, một flow onboarding thu thập cân nặng và chiều cao của người dùng. Khi người dùng đóng flow onboarding sau màn hình cuối cùng, ứng dụng của bạn tính chỉ số khối cơ thể (BMI) của họ. Sau đó, ứng dụng mở một flow paywall để hiển thị chỉ số BMI đó.
Thiết lập các flow
-
Tạo hai flow: một flow onboarding thu thập cân nặng và chiều cao của người dùng, và một flow paywall hiển thị chỉ số BMI của họ.
-
Thêm hai ô nhập Number vào flow onboarding:
- Một ô để nhập cân nặng tính bằng kilogram, với Element ID là
weight. - Một ô để nhập chiều cao tính bằng centimeter, với Element ID là
height.
Với cả hai ô nhập, đặt Format thành Integer. Ô nhập gửi giá trị dưới dạng văn bản, đúng như người dùng đã nhập, và code mẫu không đọc “70.5” và “70,5” theo cùng một cách. Số nguyên không có dấu phân cách thập phân, vì vậy code đọc chúng giống nhau ở mọi ngôn ngữ.
- Một ô để nhập cân nặng tính bằng kilogram, với Element ID là
-
Để đảm bảo ứng dụng nhận được cả hai giá trị, hãy kết thúc flow onboarding bằng một màn hình không có ô nhập nào. Trên màn hình đó, thêm một nút với hành động Close flow. Các ô nhập gửi giá trị khi mất tiêu điểm hoặc khi người dùng chuyển sang màn hình khác. Hành động Close flow không gửi chúng. Code mẫu chỉ mở paywall nếu người dùng đã đến màn hình cuối cùng.
-
Trong flow paywall, tạo một custom tag có tên
bmi. Trong trường Initial value, nhập một dấu gạch ngang (—). Người dùng sẽ thấy dấu gạch ngang này nếu ứng dụng của bạn không truyền BMI. -
Thêm một phần tử văn bản với nội dung “Your BMI:” vào flow paywall. Sau những từ này, chèn custom tag
bmi. -
Thêm flow onboarding vào một placement, chẳng hạn như
onboarding. Thêm flow paywall vào một placement có ID làbmi_paywall. Code trong phần Pass the BMI to the paywall lấy paywall theo ID này.
Truyền chỉ số BMI vào paywall
Thu thập cân nặng và chiều cao từ các sự kiện flow_user_input của flow onboarding, như trong Xử lý dữ liệu từ flow. Để biết người dùng đã đến màn hình cuối cùng, hãy theo dõi sự kiện flow_screen_showed với is_last_screen được đặt thành true, như trong Theo dõi lượt xem màn hình flow. Khi người dùng đóng flow onboarding sau màn hình đó, hãy tính chỉ số BMI. Sau đó tạo view của paywall và truyền BMI vào custom tag bmi.
Triển khai các phương thức sau trên listener bạn đăng ký với Adapty.SetFlowsEventsListener. FlowViewDidDisappear chỉ kích hoạt sau khi ứng dụng của bạn đóng flow onboarding, vì vậy listener cũng phải xử lý hành động Close flow, như trong Đóng flow và paywall:
private readonly Dictionary<string, string> bodyAnswers = new Dictionary<string, string>();
private bool reachedLastScreen;
public void FlowViewDidReceiveAnalyticEvent(
AdaptyUIFlowView view,
string name,
IReadOnlyDictionary<string, object> parameters
) {
if (name == "flow_screen_showed") {
if (parameters.TryGetValue("is_last_screen", out var lastScreen)
&& lastScreen is bool isLast && isLast) {
reachedLastScreen = true;
}
return;
}
if (name != "flow_user_input") return;
if (!parameters.TryGetValue("value", out var raw) || !(raw is string value)) return;
if (!parameters.TryGetValue("element_id", out var idRaw) || !(idRaw is string elementId)) return;
bodyAnswers[elementId] = value;
}
public void FlowViewDidDisappear(AdaptyUIFlowView view) {
// The listener receives events from every flow. Reset `bodyAnswers` and
// `reachedLastScreen` whenever a flow disappears, so that the paywall
// doesn't open again when the user closes it.
var answers = new Dictionary<string, string>(bodyAnswers);
var finished = reachedLastScreen;
bodyAnswers.Clear();
reachedLastScreen = false;
// Number inputs send their values as strings.
if (!finished) return;
if (!answers.TryGetValue("weight", out var weightText)
|| !double.TryParse(weightText, out var weight)) return;
if (!answers.TryGetValue("height", out var heightText)
|| !double.TryParse(heightText, out var height)
|| height <= 0) return;
var heightInMeters = height / 100;
var bmi = weight / (heightInMeters * heightInMeters);
ShowBmiPaywall(bmi.ToString("0.0"));
}
private void ShowBmiPaywall(string bmi) {
Adapty.GetFlow("bmi_paywall", (flow, flowError) => {
if (flowError != null) {
// handle the error
return;
}
var parameters = new AdaptyUICreateFlowViewParameters()
.SetCustomTags(new Dictionary<string, string> { { "bmi", bmi } });
AdaptyUI.CreateFlowView(flow, parameters, (view, viewError) => {
if (viewError != null) {
// handle the error
return;
}
view.Present((presentError) => {
if (presentError != null) {
// handle the error
}
});
});
});
}
ToString("0.0") sử dụng dấu phân cách thập phân theo ngôn ngữ hiện tại: “22.7” trong tiếng Anh, “22,7” trong tiếng Đức.
Lưu chỉ số BMI vào hồ sơ người dùng
Để hiển thị các flow khác nhau cho người dùng dựa trên chỉ số BMI, hãy lưu nó dưới dạng thuộc tính tùy chỉnh trong hồ sơ của họ. Trong Adapty Dashboard, tạo một thuộc tính tùy chỉnh kiểu Number với khóa bmi. Sau đó hiển thị mỗi flow cho một đối tượng được xây dựng từ thuộc tính đó.
Gọi phương thức Adapty.UpdateProfile trong FlowViewDidDisappear, ngay sau dòng tính toán bmi. Truyền vào giá trị double thay vì chuỗi đã được định dạng, để phân khúc có thể so sánh chỉ số BMI với một ngưỡng nhất định:
var parameters = new AdaptyProfileParameters.Builder()
.SetCustomDoubleAttribute("bmi", bmi)
.Build();
Adapty.UpdateProfile(parameters, (error) => {
if (error != null) {
// handle the error
}
});