Lấy paywalls và sản phẩm cho remote config paywalls trong Capacitor SDK
Trước khi hiển thị remote config và custom paywalls, bạn cần lấy thông tin về chúng. Lưu ý rằng chủ đề này đề cập đến remote config và custom paywalls. Để biết hướng dẫn lấy paywalls cho Paywall Builder, vui lòng tham khảo Lấy Paywall Builder paywalls và cấu hình của chúng.
Muốn xem ví dụ thực tế về cách tích hợp Adapty SDK vào ứng dụng di động? Hãy xem ứng dụng mẫu của chúng tôi, nơi minh họa toàn bộ quá trình thiết lập, bao gồm hiển thị paywall, thực hiện mua hàng và các chức năng cơ bản khác.
Trước khi bắt đầu lấy paywalls và sản phẩm trong ứng dụng (nhấn để mở rộng)
-
Tạo sản phẩm trong Adapty Dashboard.
-
Tạo paywall và thêm sản phẩm vào paywall trong Adapty Dashboard.
-
Tạo placements và thêm paywall vào placement trong Adapty Dashboard.
-
Cài đặt Adapty SDK trong ứng dụng của bạn.
Lấy thông tin paywall
Trong Adapty, một sản phẩm là sự kết hợp của các sản phẩm từ cả App Store và Google Play. Các sản phẩm đa nền tảng này được tích hợp vào paywalls, cho phép bạn hiển thị chúng tại các placement cụ thể trong ứng dụng.
Để hiển thị sản phẩm, bạn cần lấy một Paywall từ một trong các placements của bạn bằng phương thức getPaywall.
try {
const paywall = await adapty.getPaywall({
placementId: 'YOUR_PLACEMENT_ID',
locale: 'en',
params: {
fetchPolicy: 'reload_revalidating_cache_data', // Load from server, fallback to cache
loadTimeoutMs: 5000 // 5 second timeout
}
});
// the requested paywall
} catch (error) {
console.error('Failed to fetch paywall:', error);
}
| Tham số | Bắt buộc | Mô tả |
|---|---|---|
| placementId | bắt buộc | Định danh của Placement. Đây là giá trị bạn đã chỉ định khi tạo placement trong Adapty Dashboard. |
| locale | tùy chọn mặc định: | Định danh của bản địa hóa paywall. Tham số này phải là mã ngôn ngữ gồm một hoặc nhiều subtag được phân tách bằng dấu trừ (-). Subtag đầu tiên là ngôn ngữ, subtag thứ hai là khu vực. Ví dụ: Xem Localizations and locale codes để biết thêm thông tin về mã locale và cách chúng tôi khuyến nghị sử dụng chúng. |
| params.fetchPolicy | tùy chọn mặc định: | Theo mặc định, SDK sẽ cố tải dữ liệu từ server và trả về dữ liệu đã cache trong trường hợp thất bại. Chúng tôi khuyến nghị tùy chọn này vì nó đảm bảo người dùng luôn nhận được dữ liệu mới nhất. Tuy nhiên, nếu người dùng của bạn thường xuyên gặp kết nối internet không ổn định, hãy cân nhắc dùng Lưu ý rằng cache vẫn tồn tại khi khởi động lại ứng dụng và chỉ bị xóa khi cài đặt lại ứng dụng hoặc xóa thủ công. |
| params.loadTimeoutMs | tùy chọn mặc định: 5000 ms | Giá trị này giới hạn thời gian chờ (tính bằng mili giây) cho phương thức này. Nếu hết thời gian chờ, dữ liệu đã cache hoặc fallback cục bộ sẽ được trả về. Lưu ý rằng trong một số trường hợp hiếm gặp, phương thức này có thể hết thời gian chờ muộn hơn một chút so với giá trị được chỉ định trong |
Đừng hardcode ID sản phẩm. ID duy nhất bạn nên hardcode là placement ID. Paywalls được cấu hình từ xa, vì vậy số lượng sản phẩm và ưu đãi có thể thay đổi bất kỳ lúc nào. Ứng dụng của bạn phải xử lý những thay đổi này một cách linh hoạt — nếu paywall hôm nay trả về hai sản phẩm và ngày mai trả về ba, hãy hiển thị tất cả mà không cần thay đổi code.
Tham số trả về:
| Tham số | Mô tả |
|---|---|
| Paywall | Đối tượng AdaptyPaywall bao gồm: danh sách ID sản phẩm, định danh paywall, remote config và một số thuộc tính khác. |
Lấy sản phẩm
Sau khi có paywall, bạn có thể truy vấn mảng sản phẩm tương ứng với nó:
try {
const products = await adapty.getPaywallProducts({ paywall });
// the requested products list
} catch (error) {
console.error('Failed to fetch products:', error);
}
Tham số trả về:
| Tham số | Mô tả |
|---|---|
| Products | Danh sách đối tượng AdaptyPaywallProduct bao gồm: định danh sản phẩm, tên sản phẩm, giá, tiền tệ, thời hạn gói đăng ký và một số thuộc tính khác. |
Khi tự thiết kế giao diện paywall, bạn sẽ cần truy cập các thuộc tính từ đối tượng AdaptyPaywallProduct. Dưới đây là các thuộc tính được dùng phổ biến nhất, nhưng hãy tham khảo tài liệu được liên kết để xem đầy đủ tất cả các thuộc tính có sẵn.
| Thuộc tính | Mô tả |
|---|---|
| Title | Để hiển thị tiêu đề sản phẩm, dùng product.localizedTitle. Lưu ý rằng bản địa hóa dựa trên quốc gia cửa hàng mà người dùng đã chọn, không phải locale của thiết bị. |
| Price | Để hiển thị giá đã được bản địa hóa, dùng product.price?.localizedString. Bản địa hóa này dựa trên thông tin locale của thiết bị. Bạn cũng có thể truy cập giá dưới dạng số bằng product.price?.amount. Giá trị sẽ được cung cấp theo đơn vị tiền tệ địa phương. Để lấy ký hiệu tiền tệ tương ứng, dùng product.price?.currencySymbol. |
| Subscription Period | Để hiển thị chu kỳ (ví dụ: tuần, tháng, năm, v.v.), dùng product.subscription?.localizedSubscriptionPeriod. Bản địa hóa này dựa trên locale của thiết bị. Để lấy chu kỳ gói đăng ký theo dạng lập trình, dùng product.subscription?.subscriptionPeriod. Từ đó bạn có thể truy cập thuộc tính unit để lấy độ dài (tức là ‘day’, ‘week’, ‘month’, ‘year’, hoặc ‘unknown’). Giá trị numberOfUnits sẽ cho bạn số đơn vị chu kỳ. Ví dụ, với gói đăng ký theo quý, bạn sẽ thấy 'month' trong thuộc tính unit và 3 trong thuộc tính numberOfUnits. |
| Introductory Offer | Để hiển thị huy hiệu hoặc chỉ số khác cho biết gói đăng ký có ưu đãi giới thiệu, hãy kiểm tra thuộc tính product.subscription?.offer?.phases. Đây là danh sách có thể chứa tối đa hai giai đoạn giảm giá: giai đoạn dùng thử miễn phí và giai đoạn giá giới thiệu. Trong mỗi đối tượng giai đoạn có các thuộc tính hữu ích sau:• paymentMode: chuỗi với các giá trị 'free_trial', 'pay_as_you_go', 'pay_up_front' và 'unknown'. Dùng thử miễn phí sẽ có loại 'free_trial'.• price: Giá giảm dưới dạng số. Với dùng thử miễn phí, giá trị này là 0.• localizedNumberOfPeriods: chuỗi được bản địa hóa theo locale của thiết bị, mô tả độ dài của ưu đãi. Ví dụ, ưu đãi dùng thử ba ngày hiển thị '3 days' trong trường này.• subscriptionPeriod: Ngoài ra, bạn có thể lấy thông tin chi tiết từng phần của chu kỳ ưu đãi bằng thuộc tính này. Nó hoạt động theo cách tương tự như mô tả ở phần trước.• localizedSubscriptionPeriod: Chu kỳ gói đăng ký đã được định dạng theo locale của người dùng cho phần giảm giá. |
Tăng tốc lấy paywall với paywall đối tượng mặc định
Thông thường, paywalls được lấy gần như ngay lập tức nên bạn không cần lo lắng về việc tăng tốc quá trình này. Tuy nhiên, trong trường hợp bạn có nhiều đối tượng và paywalls, và người dùng có kết nối internet yếu, việc lấy paywall có thể mất nhiều thời gian hơn mong muốn. Trong tình huống đó, bạn có thể muốn hiển thị một paywall mặc định để đảm bảo trải nghiệm người dùng mượt mà thay vì không hiển thị paywall nào cả.
Để giải quyết vấn đề này, bạn có thể dùng phương thức getPaywallForDefaultAudience, phương thức này lấy paywall của placement được chỉ định cho đối tượng All Users. Tuy nhiên, điều quan trọng cần hiểu là cách tiếp cận được khuyến nghị là lấy paywall bằng phương thức getPaywall, như được mô tả chi tiết trong phần Lấy thông tin paywall ở trên.
Lý do chúng tôi khuyến nghị dùng getPaywall
Phương thức getPaywallForDefaultAudience có một số hạn chế đáng kể:
- Vấn đề tương thích ngược tiềm ẩn: Nếu bạn cần hiển thị các paywalls khác nhau cho các phiên bản ứng dụng khác nhau (hiện tại và tương lai), bạn có thể gặp khó khăn. Bạn sẽ phải thiết kế paywalls hỗ trợ phiên bản hiện tại (legacy) hoặc chấp nhận rằng người dùng phiên bản hiện tại (legacy) có thể gặp vấn đề với paywalls không render được.
- Mất targeting: Tất cả người dùng sẽ thấy cùng một paywall được thiết kế cho đối tượng All Users, nghĩa là bạn mất khả năng targeting cá nhân hóa (bao gồm dựa trên quốc gia, attribution marketing hoặc các thuộc tính tùy chỉnh của bạn).
Nếu bạn sẵn sàng chấp nhận những hạn chế này để được hưởng lợi từ việc lấy paywall nhanh hơn, hãy dùng phương thức getPaywallForDefaultAudience như sau. Nếu không, hãy tiếp tục dùng getPaywall được mô tả ở trên.
try {
const paywall = await adapty.getPaywallForDefaultAudience({
placementId: 'YOUR_PLACEMENT_ID',
locale: 'en',
params: {
fetchPolicy: 'reload_revalidating_cache_data' // Load from server, fallback to cache
}
});
// the requested paywall
} catch (error) {
console.error('Failed to fetch default audience paywall:', error);
}
Phương thức getPaywallForDefaultAudience khả dụng từ Capacitor SDK phiên bản 2.11.2 trở lên.
| Tham số | Bắt buộc | Mô tả |
|---|---|---|
| placementId | bắt buộc | Định danh của Placement. Đây là giá trị bạn đã chỉ định khi tạo placement trong Adapty Dashboard. |
| locale | tùy chọn mặc định: | Định danh của bản địa hóa paywall. Tham số này phải là mã ngôn ngữ gồm một hoặc nhiều subtag được phân tách bằng dấu trừ (-). Subtag đầu tiên là ngôn ngữ, subtag thứ hai là khu vực. Ví dụ: Xem Localizations and locale codes để biết thêm thông tin về mã locale và cách chúng tôi khuyến nghị sử dụng chúng. |
| params.fetchPolicy | tùy chọn mặc định: | Theo mặc định, SDK sẽ cố tải dữ liệu từ server và trả về dữ liệu đã cache trong trường hợp thất bại. Chúng tôi khuyến nghị tùy chọn này vì nó đảm bảo người dùng luôn nhận được dữ liệu mới nhất. Tuy nhiên, nếu người dùng của bạn thường xuyên gặp kết nối internet không ổn định, hãy cân nhắc dùng Lưu ý rằng cache vẫn tồn tại khi khởi động lại ứng dụng và chỉ bị xóa khi cài đặt lại ứng dụng hoặc xóa thủ công. |