ÿÿ Hiển thị Flows & Paywalls - Kotlin Multiplatform | Tài liệu Adapty

Hiển thị flows & paywalls - Kotlin Multiplatform

Hiển thị flows và paywalls
✦
Flow ÄÆ°á»£c tạo trong Flow Builder — render nguyên bản trên thiết bị, không cần WebView
✦
Paywall của Paywall Builder Toàn bộ nội dung Paywall Builder hiện có

Nếu bạn đã tạo má»™t flow hoặc paywall, bạn không cần lo lắng vá» việc render nó trong code ứng dụng di động để hiển thị cho ngưá»i dùng. Flow hoặc paywall đó đã bao gồm cả ná»™i dung cần hiển thị lẫn cách thức hiển thị.

Hướng dẫn này đỠcập đến các flow và paywall Paywall Builder mới được render bởi Adapty. Quy trình sẽ khác đối với paywall Remote Config và Observer mode.

Äể lấy đối tượng flow sá»­ dụng bên dưới, xem Get flows & paywalls.

Adapty Kotlin Multiplatform SDK cung cấp hai cách để trình bày flows và paywalls:

  • With Compose Multiplatform
  • Without Compose Multiplatform

Vá»›i Compose Multiplatform

Äể hiển thị má»™t flow hoặc paywall, hãy dùng phương thức view.present() trên view được tạo bởi phương thức createFlowView. Má»—i view chỉ có thể dùng má»™t lần. Nếu cần hiển thị lại flow, hãy gá»i createFlowView thêm má»™t lần nữa để tạo má»™t view má»›i.

Việc tái sử dụng cùng một view mà không tạo lại có thể dẫn đến lỗi.


viewModelScope.launch {
    AdaptyUI.createFlowView(flow = flow).onSuccess { view ->
        view.present()
    }.onError { error ->
        // handle the error
    }
}

Hiển thị dialog

Dùng phương thức này thay cho các dialog cảnh báo gốc khi má»™t flow hoặc paywall Ä‘ang được hiển thị trên Android. Trên Android, các alert thông thưá»ng sẽ xuất hiện phía sau view cá»§a flow, khiến ngưá»i dùng không nhìn thấy được. Phương thức này đảm bảo dialog được hiển thị đúng cách phía trên flow trên tất cả các ná»n tảng.


viewModelScope.launch {
    view.showDialog(
        title = "Close this screen?",
        content = "You will lose access to exclusive offers.",
        primaryActionTitle = "Stay",
        secondaryActionTitle = "Close"
    ).onSuccess { action ->
        if (action == AdaptyUIDialogActionType.SECONDARY) {
            // User confirmed - close the flow
            view.dismiss()
        }
        // If primary - do nothing, user stays
    }.onError { error ->
        // handle the error
    }
}

Cấu hình kiểu hiển thị trên iOS

Cấu hình cách hiển thị flow hoặc paywall trên iOS bằng cách truyá»n tham số iosPresentationStyle vào phương thức present(). Tham số này nhận giá trị AdaptyUIIOSPresentationStyle.FULLSCREEN (mặc định) hoặc AdaptyUIIOSPresentationStyle.PAGESHEET.


viewModelScope.launch {
    val view = AdaptyUI.createFlowView(flow = flow).getOrNull()
    view?.present(iosPresentationStyle = AdaptyUIIOSPresentationStyle.PAGESHEET)
}

Không dùng Compose Multiplatform

createNativeFlowView là một phần của module io.adapty:adapty-kmp cốt lõi. Nếu dự án của bạn không sử dụng Compose Multiplatform, bạn không cần dependency io.adapty:adapty-kmp-ui.

Äể nhúng má»™t flow hoặc paywall mà không dùng Compose Multiplatform, hãy gá»i createNativeFlowView. Hàm này trả vá» má»™t AdaptyNativeFlowView mà bạn thêm vào layout cá»§a mình:

Giải phóng view

Gá»i dispose() khi xóa view khá»i layout. Thao tác này sẽ há»§y đăng ký trình lắng nghe sá»± kiện và giải phóng tài nguyên ná»™i bá»™.

nativeView.dispose()

Thẻ tùy chỉnh

Thẻ tùy chỉnh giúp bạn không cần tạo nhiá»u flow hay paywall riêng biệt cho từng tình huống khác nhau. Hãy tưởng tượng má»™t flow duy nhất có thể thay đổi linh hoạt dá»±a trên dữ liệu ngưá»i dùng. Ví dụ, thay vì má»™t câu chào chung chung “Xin chào!â€, bạn có thể chào đích danh từng ngưá»i vá»›i “Xin chào, John!†hoặc “Xin chào, Ann!â€

Dưới đây là một số cách sử dụng thẻ tùy chỉnh:

  • Hiển thị tên hoặc email cá»§a ngưá»i dùng trên flow hoặc paywall.
  • Hiển thị ngày trong tuần để thúc đẩy doanh số (ví dụ: “Chào Thứ Năm vui vẻâ€).
  • Thêm thông tin cá nhân hóa vá» các sản phẩm bạn Ä‘ang bán (chẳng hạn như tên cá»§a má»™t chương trình thể dục hoặc số Ä‘iện thoại trong ứng dụng VoIP).

Các thẻ tùy chỉnh giúp bạn tạo ra má»™t flow linh hoạt, thích ứng vá»›i nhiá»u tình huống khác nhau, giúp giao diện ứng dụng trở nên cá nhân hóa và hấp dẫn hÆ¡n.

Trong má»™t số trưá»ng hợp, ứng dụng cá»§a bạn có thể không biết phải thay thế thẻ tùy chỉnh bằng ná»™i dung gì—đặc biệt khi ngưá»i dùng Ä‘ang dùng phiên bản cÅ© hÆ¡n cá»§a AdaptyUI SDK. Äể tránh Ä‘iá»u này, hãy luôn thêm văn bản dá»± phòng để thay thế các dòng chứa thẻ không xác định. Nếu không, ngưá»i dùng có thể thấy các thẻ được hiển thị dưới dạng code (<USERNAME/>).

Äể sá»­ dụng thẻ tùy chỉnh trong flow hoặc paywall cá»§a bạn, hãy truyá»n chúng khi tạo flow view:

Bá»™ đếm thá»i gian tùy chỉnh

Bá»™ đếm thá»i gian là công cụ tuyệt vá»i để quảng bá các ưu đãi đặc biệt và theo mùa có giá»›i hạn thá»i gian. Tuy nhiên, cần lưu ý rằng bá»™ đếm này không kết nối vá»›i thá»i hạn hiệu lá»±c cá»§a ưu đãi hay thá»i gian chạy cá»§a chiến dịch. Äây đơn giản chỉ là má»™t đồng hồ đếm ngược độc lập, bắt đầu từ giá trị bạn đặt và giảm dần vá» không. Khi bá»™ đếm vá» không, không có gì xảy ra—nó chỉ dừng lại ở không.

Bạn có thể tùy chỉnh văn bản trước và sau bá»™ đếm để tạo thông Ä‘iệp mong muốn, ví dụ: “Ưu đãi kết thúc sau: 10:00 giây.â€

Äể sá»­ dụng bá»™ đếm thá»i gian tùy chỉnh trong flow hoặc paywall cá»§a bạn, hãy truyá»n chúng khi tạo flow view:

Nếu bạn đã tùy chỉnh paywall bằng Paywall Builder, bạn không cần lo lắng vá» việc render nó trong code ứng dụng di động để hiển thị cho ngưá»i dùng. Paywall như vậy chứa cả ná»™i dung cần hiển thị lẫn cách hiển thị nó.

Hướng dẫn này chỉ dành cho paywall Paywall Builder mới. Quy trình hiển thị paywall khác nhau đối với paywall được thiết kế bằng remote config và Observer mode.

Äể hiển thị paywall Remote config, xem Render paywall được thiết kế bằng remote config.

SDK Kotlin Multiplatform của Adapty cung cấp hai cách để hiển thị paywall:

  • Vá»›i Compose Multiplatform
  • Không có Compose Multiplatform

Vá»›i Compose Multiplatform

Äể hiển thị má»™t paywall, sá»­ dụng phương thức view.present() trên view được tạo bởi phương thức createPaywallView. Má»—i view chỉ có thể được sá»­ dụng má»™t lần. Nếu bạn cần hiển thị lại paywall, hãy gá»i createPaywallView thêm má»™t lần nữa để tạo má»™t view instance má»›i.

Việc tái sử dụng cùng một view mà không tạo lại có thể dẫn đến lỗi.


viewModelScope.launch {
    AdaptyUI.createPaywallView(paywall = paywall).onSuccess { view ->
        view.present()
    }.onError { error ->
        // handle the error
    }
}

Hiển thị hộp thoại

Dùng phương thức này thay cho các há»™p thoại alert gốc khi paywall Ä‘ang được hiển thị trên Android. Trên Android, các alert thông thưá»ng xuất hiện phía sau paywall, khiến ngưá»i dùng không nhìn thấy được. Phương thức này đảm bảo há»™p thoại luôn hiển thị đúng vị trí, phía trên paywall, trên má»i ná»n tảng.


viewModelScope.launch {
    view.showDialog(
        title = "Close paywall?",
        content = "You will lose access to exclusive offers.",
        primaryActionTitle = "Stay",
        secondaryActionTitle = "Close"
    ).onSuccess { action ->
        if (action == AdaptyUIDialogActionType.SECONDARY) {
            // User confirmed - close the paywall
            view.dismiss()
        }
        // If primary - do nothing, user stays
    }.onError { error ->
        // handle the error
    }
}

Cấu hình kiểu hiển thị trên iOS

Cấu hình cách paywall hiển thị trên iOS bằng cách truyá»n tham số iosPresentationStyle vào phương thức present(). Tham số này chấp nhận các giá trị AdaptyUIIOSPresentationStyle.FULLSCREEN (mặc định) hoặc AdaptyUIIOSPresentationStyle.PAGESHEET.


viewModelScope.launch {
    val view = AdaptyUI.createPaywallView(paywall = paywall).getOrNull()
    view?.present(iosPresentationStyle = AdaptyUIIOSPresentationStyle.PAGESHEET)
}

Không dùng Compose Multiplatform

createNativePaywallView là một phần của module core io.adapty:adapty-kmp. Nếu dự án của bạn không dùng Compose Multiplatform, bạn không cần dependency io.adapty:adapty-kmp-ui.

Äể nhúng paywall mà không dùng Compose Multiplatform, hãy gá»i createNativePaywallView. Hàm này trả vá» má»™t AdaptyNativePaywallView mà bạn thêm vào layout cá»§a mình:

Há»§y view

Gá»i dispose() khi xóa view khá»i layout. Thao tác này há»§y đăng ký event listener và giải phóng tài nguyên ná»™i bá»™.

nativeView.dispose()

Thẻ tùy chỉnh

Thẻ tùy chỉnh giúp bạn tránh phải tạo nhiá»u paywall riêng lẻ cho từng tình huống khác nhau. Hãy tưởng tượng má»™t paywall duy nhất có thể tá»± động thích nghi dá»±a trên dữ liệu ngưá»i dùng. Ví dụ, thay vì hiển thị “Hello!†chung chung, bạn có thể chào ngưá»i dùng cá nhân hóa như “Hello, John!†hay “Hello, Ann!â€

Dưới đây là một số cách bạn có thể sử dụng thẻ tùy chỉnh:

  • Hiển thị tên hoặc email cá»§a ngưá»i dùng trên paywall.
  • Hiển thị ngày trong tuần để thúc đẩy doanh số (ví dụ: “Happy Thursdayâ€).
  • Thêm thông tin cá nhân hóa vá» sản phẩm bạn Ä‘ang bán (chẳng hạn tên chương trình tập luyện hoặc số Ä‘iện thoại trong ứng dụng VoIP).

Các custom tag giúp bạn tạo paywall linh hoạt, thích ứng vá»›i nhiá»u tình huống khác nhau, giúp giao diện ứng dụng trở nên cá nhân hóa và hấp dẫn hÆ¡n.

Trong má»™t số trưá»ng hợp, ứng dụng cá»§a bạn có thể không biết cần thay thế custom tag bằng gì—đặc biệt khi ngưá»i dùng Ä‘ang dùng phiên bản cÅ© cá»§a AdaptyUI SDK. Äể tránh Ä‘iá»u này, hãy luôn thêm văn bản dá»± phòng để thay thế các dòng chứa custom tag không xác định. Nếu không, ngưá»i dùng có thể thấy các tag hiển thị dưới dạng code (<USERNAME/>).

Äể sá»­ dụng custom tag trong paywall, hãy truyá»n chúng khi tạo paywall view:

Bộ đếm ngược tùy chỉnh

Bá»™ đếm ngược trên paywall là công cụ tuyệt vá»i để quảng bá các ưu đãi đặc biệt và theo mùa có giá»›i hạn thá»i gian. Tuy nhiên, cần lưu ý rằng bá»™ đếm này không liên kết vá»›i thá»i hạn hiệu lá»±c cá»§a ưu đãi hay thá»i gian chạy chiến dịch. Äây đơn giản chỉ là má»™t bá»™ đếm ngược độc lập, bắt đầu từ giá trị bạn đặt và giảm dần vá» không. Khi bá»™ đếm vá» không, không có gì xảy ra—nó chỉ dừng lại ở không.

Bạn có thể tùy chỉnh văn bản trước và sau bá»™ đếm để tạo thông Ä‘iệp mong muốn, ví dụ: “Ưu đãi kết thúc sau: 10:00 giây.â€

Äể sá»­ dụng bá»™ đếm ngược tùy chỉnh trong paywall, hãy truyá»n chúng khi tạo paywall view: