ÿÿ Hiển thị Paywall | Unity SDK | Tài liệu Adapty

Bật tính năng mua hàng bằng cách sử dụng paywall trong Unity SDK

Äể bật tính năng in-app purchase, bạn cần hiểu ba khái niệm chính:

  • Sản phẩm – bất kỳ thứ gì ngưá»i dùng có thể mua (gói đăng ký, consumable, quyá»n truy cập trá»n Ä‘á»i)
  • Paywall là các cấu hình xác định sản phẩm nào sẽ được cung cấp. Trong Adapty, paywall là cách duy nhất để lấy sản phẩm, nhưng thiết kế này cho phép bạn thay đổi ưu đãi, giá cả và tổ hợp sản phẩm mà không cần chỉnh sá»­a code ứng dụng.
  • Placement – vị trí và thá»i Ä‘iểm hiển thị paywall trong ứng dụng (như main, onboarding, settings). Bạn thiết lập paywall cho các placement trong dashboard, sau đó yêu cầu chúng bằng placement ID trong code. Äiá»u này giúp dá»… dàng chạy A/B test và hiển thị các paywall khác nhau cho từng nhóm ngưá»i dùng.

Adapty cung cấp cho bạn ba cách để bật tính năng mua hàng trong ứng dụng. Hãy chá»n má»™t trong số đó tùy theo yêu cầu cá»§a ứng dụng:

Cách triển khaiÄá»™ phức tạpKhi nào nên dùng
Adapty Paywall Builder✅ DễBạn tạo một paywall hoàn chỉnh, sẵn sàng để mua trong no-code builder. Adapty tự động render và xử lý toàn bộ flow mua hàng phức tạp, xác thực receipt và quản lý gói đăng ký ở phía sau.
Paywall tạo thủ công🟡 Trung bìnhBạn tự triển khai giao diện paywall trong code ứng dụng, nhưng vẫn lấy đối tượng paywall từ Adapty để duy trì tính linh hoạt trong ưu đãi sản phẩm. Xem hướng dẫn.
Observer mode🔴 KhóBạn đã có cơ sở hạ tầng xử lý mua hàng riêng và muốn tiếp tục sử dụng. Lưu ý rằng observer mode có những giới hạn nhất định trong Adapty. Xem bài viết.

Các bước dưới đây hướng dẫn cách triển khai paywall được tạo trong Adapty paywall builder.

Nếu bạn không muốn dùng paywall builder, hãy xem hướng dẫn xử lý mua hàng trong paywall tạo thủ công.

Äể hiển thị paywall được tạo trong Adapty paywall builder, trong code ứng dụng, bạn chỉ cần:

  1. Lấy paywall: Lấy paywall từ Adapty.
  2. Hiển thị paywall và Adapty sẽ xử lý mua hàng cho bạn: Hiển thị paywall container bạn đã lấy được trong ứng dụng.
  3. Xá»­ lý các hành động nút bấm: Liên kết tương tác cá»§a ngưá»i dùng vá»›i paywall vá»›i phản hồi tương ứng trong ứng dụng. Ví dụ: mở liên kết hoặc đóng paywall khi ngưá»i dùng nhấn nút.

Trước khi bắt đầu

Trước khi bắt đầu, hãy hoàn thành các bước sau:

  1. Kết nối ứng dụng của bạn với App Store và/hoặc Google Play trong Adapty Dashboard.
  2. Tạo sản phẩm trong Adapty.
  3. Tạo paywall và thêm sản phẩm vào đó.
  4. Tạo placement và thêm paywall vào đó.
  5. Cài đặt và kích hoạt Adapty SDK trong code ứng dụng.

Cách nhanh nhất để hoàn thành các bước này là làm theo hướng dẫn quickstart hoặc tạo paywall và placement bằng Developer CLI.

1. Lấy paywall

Các paywall của bạn được liên kết với các placement đã cấu hình trong dashboard. Placement cho phép bạn chạy các paywall khác nhau cho các đối tượng khác nhau hoặc chạy A/B test.

Äể lấy paywall được tạo trong Adapty paywall builder, bạn cần:

  1. Lấy đối tượng paywall theo placement ID bằng phương thức GetPaywall và kiểm tra xem đó có phải là paywall được tạo trong builder hay không thông qua thuộc tính HasViewConfiguration.

  2. Tạo paywall view bằng phương thức CreatePaywallView. View chứa các phần tử giao diện và styling cần thiết để hiển thị paywall.

Äể lấy cấu hình view, bạn phải bật toggle Show on device trong Paywall Builder. Nếu không, bạn sẽ nhận được cấu hình view rá»—ng và paywall sẽ không được hiển thị.

Adapty.GetPaywall("YOUR_PLACEMENT_ID", (paywall, error) => {
    if(error != null) {
        // handle the error
        return;
    }
    
    // Create paywall view parameters
    var parameters = new AdaptyUICreatePaywallViewParameters();
    
    // Create the paywall view
    AdaptyUI.CreatePaywallView(paywall, parameters, (view, error) => {
        if(error != null) {
            // handle the error
            return;
        }
        
        // view - the paywall view ready to be presented
    });
});

Hướng dẫn quickstart này cung cấp cấu hình tối thiểu cần thiết để hiển thị paywall. Äể biết chi tiết cấu hình nâng cao, xem hướng dẫn lấy paywall.

2. Hiển thị paywall

Khi đã có cấu hình paywall, bạn chỉ cần thêm vài dòng code để hiển thị paywall của mình.

Äể hiển thị 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ể dùng má»™t lần. Nếu cần hiển thị lại paywall, hãy gá»i CreatePaywallView thêm má»™t lần nữa để tạo instance view má»›i.

view.Present((error) => {
  // handle the error
});

Äể biết thêm chi tiết vá» cách hiển thị paywall, xem hướng dẫn.

3. Xử lý các hành động nút bấm

Khi ngưá»i dùng nhấn các nút trong paywall, Unity SDK sẽ tá»± động xá»­ lý việc mua hàng và khôi phục. Tuy nhiên, các nút khác có ID tùy chỉnh hoặc được định nghÄ©a sẵn và yêu cầu bạn xá»­ lý hành động trong code.

Ví dụ: paywall cá»§a bạn thưá»ng có nút đóng và các URL để mở (như Ä‘iá»u khoản sá»­ dụng và chính sách bảo mật). Äể xá»­ lý các hành động này, class cá»§a bạn cần implement interface AdaptyPaywallsEventsListener và đăng ký làm listener.

Äá»c hướng dẫn vá» cách xá»­ lý hành động và sá»± kiện cá»§a nút bấm.

public class YourClass : MonoBehaviour, AdaptyPaywallsEventsListener
{
    void Start()
    {
        // Register this class as the paywall events listener
        Adapty.SetPaywallsEventsListener(this);
    }

    // AdaptyPaywallsEventsListener method - handles button actions
    public void PaywallViewDidPerformAction(
        AdaptyUIPaywallView view,
        AdaptyUIUserAction action
    ) {
        switch (action.Type) {
            case AdaptyUIUserActionType.Close:
                view.Dismiss(null);
                break;
            case AdaptyUIUserActionType.OpenUrl:
                Application.OpenURL(action.Value);
                break;
            default:
                break;
        }
    }
}

Các bước tiếp theo

Bạn có câu há»i hoặc gặp sá»± cố? Hãy xem diá»…n đàn há»— trợ cá»§a chúng tôi — nÆ¡i bạn có thể tìm câu trả lá»i cho các câu há»i thưá»ng gặp hoặc đặt câu há»i cá»§a riêng mình. Äá»™i ngÅ© và cá»™ng đồng cá»§a chúng tôi luôn sẵn sàng giúp đỡ!

Paywall của bạn đã sẵn sàng để hiển thị trong ứng dụng. Hãy kiểm tra giao dịch mua hàng của bạn trong App Store sandbox hoặc trong Google Play Store để đảm bảo bạn có thể hoàn thành một giao dịch mua thử từ paywall.

Tiếp theo, bạn cần kiểm tra mức độ truy cập cá»§a ngưá»i dùng để đảm bảo hiển thị paywall hoặc cấp quyá»n truy cập tính năng trả phí cho đúng ngưá»i dùng.

Ví dụ đầy đủ

Dưới đây là cách tích hợp tất cả các bước đó vào ứng dụng của bạn.

using System;
using UnityEngine;
using AdaptySDK;

public class PaywallManager : MonoBehaviour, AdaptyPaywallsEventsListener
{
    [SerializeField] private string placementId = "YOUR_PLACEMENT_ID";
    
    private AdaptyUIPaywallView currentPaywallView;
    
    void Start()
    {
        // Register for paywall events
        Adapty.SetPaywallsEventsListener(this);
        GetAndDisplayPaywall();
    }
    
    private void GetAndDisplayPaywall()
    {
        Adapty.GetPaywall(placementId, (paywall, error) => {
            if (error != null) {
                Debug.LogError("Error getting paywall: " + error.Message);
                return;
            }
            
            if (paywall.HasViewConfiguration) {
                CreateAndPresentPaywallView(paywall);
            } else {
                Debug.LogWarning("Paywall was not created using the builder");
            }
        });
    }
    
    private void CreateAndPresentPaywallView(AdaptyPaywall paywall)
    {
        var parameters = new AdaptyUICreatePaywallViewParameters();
        
        AdaptyUI.CreatePaywallView(paywall, parameters, (view, error) => {
            if (error != null) {
                Debug.LogError("Error creating paywall view: " + error.Message);
                return;
            }
            
            currentPaywallView = view;
            
            view.Present((presentError) => {
                if (presentError != null) {
                    Debug.LogError("Error presenting paywall: " + presentError.Message);
                    return;
                }
                
                Debug.Log("Paywall presented successfully");
            });
        });
    }
    
    // AdaptyPaywallsEventsListener implementation
    public void PaywallViewDidPerformAction(
        AdaptyUIPaywallView view, 
        AdaptyUIUserAction action
    ) {
        switch (action.Type) {
            case AdaptyUIUserActionType.Close:
                Debug.Log("Close button pressed");
                view.Dismiss(null);
                break;
            case AdaptyUIUserActionType.OpenUrl:
                Application.OpenURL(action.Value);
                break;
            default:
                break;
        }
    }
    
    // Required interface methods (implement as needed)
    public void PaywallViewDidAppear(AdaptyUIPaywallView view) { }
    public void PaywallViewDidDisappear(AdaptyUIPaywallView view) { }
    public void PaywallViewDidSelectProduct(AdaptyUIPaywallView view, string productId) { }
    public void PaywallViewDidStartPurchase(AdaptyUIPaywallView view, AdaptyPaywallProduct product) { }
    public void PaywallViewDidFinishPurchase(AdaptyUIPaywallView view, AdaptyPaywallProduct product, AdaptyPurchaseResult purchasedResult) { }
    public void PaywallViewDidFailPurchase(AdaptyUIPaywallView view, AdaptyPaywallProduct product, AdaptyError error) { }
    public void PaywallViewDidStartRestore(AdaptyUIPaywallView view) { }
    public void PaywallViewDidFinishRestore(AdaptyUIPaywallView view, AdaptyProfile profile) { }
    public void PaywallViewDidFailRestore(AdaptyUIPaywallView view, AdaptyError error) { }
    public void PaywallViewDidFailRendering(AdaptyUIPaywallView view, AdaptyError error) { }
    public void PaywallViewDidFailLoadingProducts(AdaptyUIPaywallView view, AdaptyError error) { }
    public void PaywallViewDidFinishWebPaymentNavigation(AdaptyUIPaywallView view, AdaptyPaywallProduct product, AdaptyError error) { }
    
    public void ShowPaywall()
    {
        GetAndDisplayPaywall();
    }
    
    void OnDestroy()
    {
        if (currentPaywallView != null) {
            currentPaywallView.Dismiss(null);
        }
    }
}
ÿÿÿÿ