ÿÿ Xá»­ lý Sá»± kiện Paywall | Unity SDK | Tài liệu Adapty

Xử lý sự kiện paywall

Hướng dẫn này đỠcập đến việc xá»­ lý sá»± kiện cho các giao dịch mua, khôi phục, lá»±a chá»n sản phẩm và hiển thị paywall. Bạn cÅ©ng cần triển khai xá»­ lý nút bấm (đóng paywall, mở liên kết, v.v.). Xem hướng dẫn xá»­ lý hành động nút bấm để biết thêm chi tiết.

Các paywall được cấu hình bằng Paywall Builder không cần thêm code để thá»±c hiện và khôi phục giao dịch mua. Tuy nhiên, chúng tạo ra má»™t số sá»± kiện mà ứng dụng cá»§a bạn có thể phản hồi. Những sá»± kiện đó bao gồm các lần nhấn nút (nút đóng, URL, lá»±a chá»n sản phẩm, v.v.) cÅ©ng như thông báo vá» các hành động liên quan đến giao dịch mua được thá»±c hiện trên paywall. Tìm hiểu cách phản hồi các sá»± kiện này bên dưới.

Hướng dẫn này chỉ dành cho paywall Paywall Builder mới yêu cầu Adapty SDK v3.3.0 trở lên.

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.

Xử lý sự kiện

Äể kiểm soát hoặc theo dõi các tiến trình xảy ra trên màn hình paywall trong ứng dụng di động cá»§a bạn, hãy triển khai interface AdaptyPaywallsEventsListener:

using UnityEngine;
using AdaptySDK;

public class PaywallEventsHandler : MonoBehaviour, AdaptyPaywallsEventsListener
{
    void Start()
    {
        Adapty.SetPaywallsEventsListener(this);
    }

    // Implement all required interface methods below
}

Sá»± kiện do ngưá»i dùng tạo ra

Paywall xuất hiện

ÄÆ°á»£c gá»i khi màn hình paywall hiển thị trên màn hình.

Trên iOS, cÅ©ng được gá»i khi ngưá»i dùng nhấn vào nút web paywall bên trong má»™t paywall và web paywall mở trong trình duyệt trong ứng dụng.

public void PaywallViewDidAppear(AdaptyUIPaywallView view) { }

Paywall biến mất

ÄÆ°á»£c gá»i khi màn hình paywall bị đóng khá»i màn hình.

Trên iOS, cÅ©ng được gá»i khi web paywall được mở từ paywall trong trình duyệt trong ứng dụng biến mất khá»i màn hình.

public void PaywallViewDidDisappear(AdaptyUIPaywallView view) { }

Chá»n sản phẩm

ÄÆ°á»£c gá»i khi má»™t sản phẩm được chá»n để mua (bởi ngưá»i dùng hoặc hệ thống).

public void PaywallViewDidSelectProduct(
    AdaptyUIPaywallView view, 
    string productId
) { }
Ví dụ sự kiện (Nhấn để mở rộng)
{
  "productId": "premium_monthly"
}

Bắt đầu mua

ÄÆ°á»£c gá»i khi ngưá»i dùng khởi tạo quá trình mua hàng.

public void PaywallViewDidStartPurchase(
    AdaptyUIPaywallView view, 
    AdaptyPaywallProduct product
) { }
Ví dụ sự kiện (Nhấn để mở rộng)
{
  "product": {
    "vendorProductId": "premium_monthly",
    "localizedTitle": "Premium Monthly",
    "localizedDescription": "Premium subscription for 1 month",
    "localizedPrice": "$9.99",
    "price": 9.99,
    "currencyCode": "USD"
  }
}

Mua thành công, đã hủy hoặc đang chỠxử lý

Nếu giao dịch mua thành công, ngưá»i dùng há»§y giao dịch, hoặc giao dịch mua Ä‘ang ở trạng thái chá» xá»­ lý, phương thức này sẽ được gá»i. Các trưá»ng hợp ngưá»i dùng há»§y và thanh toán Ä‘ang chá» xá»­ lý (ví dụ: cần phê duyệt cá»§a phụ huynh) sẽ kích hoạt phương thức này, không phải PaywallViewDidFailPurchase.

public void PaywallViewDidFinishPurchase(
    AdaptyUIPaywallView view, 
    AdaptyPaywallProduct product, 
    AdaptyPurchaseResult purchasedResult
) { }
Ví dụ sự kiện (Nhấn để mở rộng)
// Successful purchase
{
  "product": {
    "vendorProductId": "premium_monthly",
    "localizedTitle": "Premium Monthly",
    "localizedDescription": "Premium subscription for 1 month",
    "localizedPrice": "$9.99",
    "price": 9.99,
    "currencyCode": "USD"
  },
  "purchaseResult": {
    "type": "Success",
    "profile": {
      "accessLevels": {
        "premium": {
          "id": "premium",
          "isActive": true,
          "expiresAt": "2024-02-15T10:30:00Z"
        }
      }
    }
  }
}

// Cancelled purchase
{
  "product": {
    "vendorProductId": "premium_monthly",
    "localizedTitle": "Premium Monthly",
    "localizedDescription": "Premium subscription for 1 month",
    "localizedPrice": "$9.99",
    "price": 9.99,
    "currencyCode": "USD"
  },
  "purchaseResult": {
    "type": "UserCancelled"
  }
}

// Pending purchase
{
  "product": {
    "vendorProductId": "premium_monthly",
    "localizedTitle": "Premium Monthly",
    "localizedDescription": "Premium subscription for 1 month",
    "localizedPrice": "$9.99",
    "price": 9.99,
    "currencyCode": "USD"
  },
  "purchaseResult": {
    "type": "Pending"
  }
}

Chúng tôi khuyến nghị đóng màn hình trong trưá»ng hợp này.

Mua thất bại

Nếu giao dịch mua thất bại do lá»—i, phương thức này sẽ được gá»i. Äiá»u này bao gồm các lá»—i StoreKit/Google Play Billing (hạn chế thanh toán, sản phẩm không hợp lệ, lá»—i mạng), lá»—i xác minh giao dịch và lá»—i hệ thống. Lưu ý rằng các trưá»ng hợp ngưá»i dùng há»§y sẽ kích hoạt PaywallViewDidFinishPurchase vá»›i kết quả đã há»§y, và các thanh toán Ä‘ang chá» xá»­ lý không kích hoạt phương thức này.

public void PaywallViewDidFailPurchase(
    AdaptyUIPaywallView view, 
    AdaptyPaywallProduct product, 
    AdaptyError error
) { }
Ví dụ sự kiện (Nhấn để mở rộng)
{
  "product": {
    "vendorProductId": "premium_monthly",
    "localizedTitle": "Premium Monthly",
    "localizedDescription": "Premium subscription for 1 month",
    "localizedPrice": "$9.99",
    "price": 9.99,
    "currencyCode": "USD"
  },
  "error": {
    "code": "purchase_failed",
    "message": "Purchase failed due to insufficient funds",
    "details": {
      "underlyingError": "Insufficient funds in account"
    }
  }
}

Bắt đầu khôi phục

ÄÆ°á»£c gá»i khi ngưá»i dùng khởi tạo quá trình khôi phục:

public void PaywallViewDidStartRestore(AdaptyUIPaywallView view) { }

Khôi phục thành công

ÄÆ°á»£c gá»i khi khôi phục giao dịch mua thành công:

public void PaywallViewDidFinishRestore(
    AdaptyUIPaywallView view, 
    AdaptyProfile profile
) { }
Ví dụ sự kiện (Nhấn để mở rộng)
{
  "profile": {
    "accessLevels": {
      "premium": {
        "id": "premium",
        "isActive": true,
        "expiresAt": "2024-02-15T10:30:00Z"
      }
    },
    "subscriptions": [
      {
        "vendorProductId": "premium_monthly",
        "isActive": true,
        "expiresAt": "2024-02-15T10:30:00Z"
      }
    ]
  }
}

Chúng tôi khuyến nghị đóng màn hình nếu ngưá»i dùng có accessLevel cần thiết. Tham khảo chá»§ đỠTrạng thái gói đăng ký để tìm hiểu cách kiểm tra.

Khôi phục thất bại

ÄÆ°á»£c gá»i khi khôi phục giao dịch mua thất bại:

public void PaywallViewDidFailRestore(
    AdaptyUIPaywallView view, 
    AdaptyError error
) { }
Ví dụ sự kiện (Nhấn để mở rộng)
{
  "error": {
    "code": "restore_failed",
    "message": "Purchase restoration failed",
    "details": {
      "underlyingError": "No previous purchases found"
    }
  }
}

Hoàn tất Ä‘iá»u hướng thanh toán web

Sau khi cố gắng mở web paywall để mua hàng (dù thành công hay thất bại), phương thức này sẽ được gá»i:

public void PaywallViewDidFinishWebPaymentNavigation(
    AdaptyUIPaywallView view, 
    AdaptyPaywallProduct product, 
    AdaptyError error
) { }

Tham số:

  • product: Sản phẩm mà web paywall được mở (hoặc thá»­ mở)
  • error: null nếu web paywall mở thành công, hoặc AdaptyError nếu thất bại
Ví dụ sự kiện (Nhấn để mở rộng)
// Successful navigation
{
  "product": {
    "vendorProductId": "premium_monthly",
    "localizedTitle": "Premium Monthly",
    "localizedDescription": "Premium subscription for 1 month",
    "localizedPrice": "$9.99",
    "price": 9.99,
    "currencyCode": "USD"
  },
  "error": null
}

// Failed navigation
{
  "product": {
    "vendorProductId": "premium_monthly",
    "localizedTitle": "Premium Monthly",
    "localizedDescription": "Premium subscription for 1 month",
    "localizedPrice": "$9.99",
    "price": 9.99,
    "currencyCode": "USD"
  },
  "error": {
    "code": "wrong_param",
    "message": "Current method is not available for this product",
    "details": {
      "underlyingError": "Product not configured for web purchases"
    }
  }
}

Tải dữ liệu và hiển thị

Lỗi tải sản phẩm

ÄÆ°á»£c gá»i khi tải sản phẩm thất bại và cung cấp AdaptyError. Nếu bạn không truyá»n mảng sản phẩm trong quá trình khởi tạo, AdaptyUI sẽ tá»± lấy các đối tượng cần thiết từ máy chá»§. Thao tác này có thể thất bại và AdaptyUI sẽ báo lá»—i bằng cách gá»i phương thức này:

public void PaywallViewDidFailLoadingProducts(
    AdaptyUIPaywallView view, 
    AdaptyError error
) { }
Ví dụ sự kiện (Nhấn để mở rộng)
{
  "error": {
    "code": "products_loading_failed",
    "message": "Failed to load products from the server",
    "details": {
      "underlyingError": "Network timeout"
    }
  }
}

Lỗi hiển thị

ÄÆ°á»£c gá»i khi xảy ra lá»—i trong quá trình hiển thị giao diện và cung cấp AdaptyError:

public void PaywallViewDidFailRendering(
    AdaptyUIPaywallView view, 
    AdaptyError error
) { }
Ví dụ sự kiện (Nhấn để mở rộng)
{
  "error": {
    "code": "rendering_failed",
    "message": "Failed to render paywall interface",
    "details": {
      "underlyingError": "Invalid paywall configuration"
    }
  }
}

Trong Ä‘iá»u kiện bình thưá»ng, các lá»—i như vậy không nên xảy ra, vì vậy nếu bạn gặp phải, vui lòng thông báo cho chúng tôi.

ÿÿÿÿ