Sử dụng Thư viện Google Play Billing với Unity

Trình bổ trợ Unity IAP của Google Play Billing mở rộng các dịch vụ và thành phần tích hợp sẵn cho chức năng mua hàng trong ứng dụng. Điều này sẽ cung cấp cho trò chơi của bạn tất cả những tính năng mới nhất của Thư viện Google Play Billing. Hướng dẫn này giải thích cách bạn có thể thiết lập dự án để sử dụng trình bổ trợ này. Hướng dẫn này cũng mô tả cách triển khai các tính năng của Thư viện Google Play Billing trong trò chơi của bạn trong Unity.

Thiết lập trình bổ trợ Google Play Billing

Để thiết lập trình bổ sung này, hãy hoàn thành các bước trong từng phần được đính kèm đường liên kết sau:

  1. Bật tầng trừu tượng (abstraction layer) cho Unity IAP.
  2. Tải xuống và nhập trình bổ trợ.
  3. Định cấu hình chế độ cài đặt bản dựng của trình bổ trợ.
  4. Bật trình bổ trợ.

Bật tầng trừu tượng cho Unity IAP

Trình bổ trợ Google Play Billing được xây dựng trên một tầng trừu tượng đi kèm với Unity IAP, vì vậy bạn cần bật tầng trừu tượng này trước khi tải xuống và nhập trình bổ trợ. Để bật tầng trừu tượng cho Unity IAP, hãy làm như sau:

  1. Hoàn thành tất cả bước trong hướng dẫn về Unity sau: Thiết lập dự án cho Dịch vụ Unity.
  2. Hoàn thành tất cả bước trong hướng dẫn về Unity sau: Bật dịch vụ Unity IAP.

Tải xuống và nhập trình bổ trợ

Trình bổ trợ này được vận chuyển dưới dạng một gói Unity ở định dạng .unitypackage. Để tải xuống và nhập trình bổ trợ, hãy làm theo các bước sau:

  1. Tải bản phát hành mới nhất của trình bổ trợ Google Play cho Unity xuống trong trang phát hành trên GitHub của kho lưu trữ.
  2. Từ thanh trình đơn Unity, nhấp vào Assets (Thành phần) > Import Package (Nhập gói) > Custom Package (Gói tuỳ chỉnh).

  3. Xác định vị trí đã tải tệp .unitypackage xuống rồi chọn tệp đó.

  4. Trong hộp thoại Import Unity Package (Nhập gói Unity), chọn tất cả thành phần và nhấp vào Import (Nhập).

Sau khi nhập gói, một thư mục mới có tên GooglePlayPlugins (trong thư mục gốc của thư mục Tài sản) sẽ được thêm vào tài sản của dự án. Thư mục này chứa tất cả tài sản của Thư viện Google Play Billing cho trình bổ trợ.

Định cấu hình chế độ cài đặt bản dựng

Unity sẽ gặp xung đột và không tạo được APK Android vì trình bổ trợ mở rộng Unity IAP, trừ khi một số phần phụ thuộc cũ và chồng chéo trong Unity IAP đã bị xoá khỏi bản dựng. Trình bổ trợ này sẽ tự động xoá các thư viện bị xung đột khỏi dự án của bạn. Để giải quyết những xung đột này, hãy làm theo các bước sau:

  1. Từ thanh trình đơn Unity, chọn Google > Play Billing > Build Settings (Cài đặt bản dựng).

  2. Trong cửa sổ Play Billing Build Settings (Cài đặt bản dựng Play Billing), nhấp vào Fix (Khắc phục). Thao tác này sẽ giải quyết xung đột và chuyển các tệp Unity IAP bị xung đột sang một thư mục sao lưu. Sau khi nhấp vào nút Fix (Khắc phục), nút này sẽ chuyển thành Restore (Khôi phục). Bạn có thể nhấp vào nút này để khôi phục các tệp xung đột gốc.

Bật trình bổ trợ

Để bật trình bổ trợ, hãy thay thế phương thức triển khai Google Play của Unity IAP bằng trình bổ trợ Google Play Billing. Chẳng hạn như khi sử dụng Tập lệnh mua hàng Unity IAP, bạn sẽ thay đổi StandardPurchaseModule được truyền vào trình tạo IAP để sử dụng Google.Play.Billing.GooglePlayStoreModule:

// Create a builder using the GooglePlayStoreModule.
var configurationBuilder =
    ConfigurationBuilder.Instance(Google.Play.Billing.GooglePlayStoreModule.Instance());

Nếu trò chơi của bạn sử dụng cùng một Tập lệnh mua hàng trên nhiều nền tảng, thì bạn nên thêm bước kiểm tra nền tảng để đảm bảo Unity sẽ tiếp tục sử dụng giải pháp IAP cho các nền tảng khác:

ConfigurationBuilder builder;
if (Application.platform == RuntimePlatform.Android)
{
  builder = ConfigurationBuilder.Instance(
      Google.Play.Billing.GooglePlayStoreModule.Instance());
}
else
{
  builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());
}

Nếu bạn phát hành trò chơi trên các cửa hàng ứng dụng Android khác ngoài Cửa hàng Google Play, thì bạn chỉ nên thay thế phương thức triển khai Unity IAP mặc định khi chọn Cửa hàng Google Play:

ConfigurationBuilder builder;
if (Application.platform == RuntimePlatform.Android
       && SelectedAndoidAppStore == AppStore.GooglePlay)
{
  builder = ConfigurationBuilder.Instance(
      Google.Play.Billing.GooglePlayStoreModule.Instance());
}
else
{
  builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());
}

Triển khai các tính năng của Thư viện Google Play Billing trong trò chơi của bạn

Trình bổ trợ Google Play Billing sẽ mở rộng các dịch vụ của Unity IAP, vì vậy, bạn có thể sử dụng chính các API Unity để quản lý các quy trình mua hàng chung. Xin lưu ý rằng có một số thay đổi nhỏ đối với hành vi của API do có sự khác biệt giữa Thư viện Google Play Billing và cách triển khai IAP tiêu chuẩn của Unity trên các cửa hàng ứng dụng khác. Nếu bạn mới sử dụng các API Unity IAP, hãy xem phần "Making a Purchase Script" (Tạo tập lệnh mua hàng) trong hướng dẫn về Unity IAP để biết ví dụ về cách triển khai quy trình mua cơ bản.

Thư viện Google Play Billing cũng bao gồm một số tính năng dành riêng cho Cửa hàng Google Play. Bạn có thể truy cập các tính năng này thông qua một giao diện mở rộng. Phần còn lại của phần này mô tả cách triển khai các tính năng độc đáo này của Thư viện Google Play Billing trong trò chơi của bạn.

Cho phép mua hàng trả sau

Google Play hỗ trợ các giao dịch mua trả sau (còn được gọi là giao dịch đang chờ xử lý hoặc giao dịch mua hàng đang chờ xử lý), có nghĩa là người dùng có thể tạo một giao dịch mua và hoàn tất giao dịch sau bằng cách sử dụng tiền mặt tại cửa hàng.

Để cho phép mua hàng trả sau, hãy sử dụng trình tạo IAP để sửa đổi cấu hình của mô-đun bằng cách gọi phương thức EnableDeferredPurchase():

// Create a builder using a GooglePlayStoreModule.
var configurationBuilder =
    ConfigurationBuilder.Instance(Google.Play.Billing.GooglePlayStoreModule.Instance());
// Enable deferred purchases
configurationBuilder.Configure<Google.Play.Billing.IGooglePlayConfiguration>()
    .EnableDeferredPurchase();

Tiếp theo, triển khai lệnh gọi lại giao dịch mua trả sau bằng tiện ích Cửa hàng Play:

// Get the plugin extensions for the Google Play Store.
_playStoreExtensions =
    extensions.GetExtension<Google.Play.Billing.IGooglePlayStoreExtensions>();

// Set the deferred purchases callback.
_playStoreExtensions.SetDeferredPurchaseListener(
    delegate(Product product)
    {
        // Do not grant the item here. Instead, record the purchase and remind
        // the user to complete the transaction in the Play Store.
    });

Truyền mã tài khoản bị làm rối đến Google Play

Bạn có thể truyền mã tài khoản người dùng bị làm rối mã nguồn cho Google Play để hỗ trợ việc phát hiện hành vi phạm, chẳng hạn như để xác định xem có nhiều thiết bị đang thực hiện giao dịch mua trên cùng một tài khoản trong một khoảng thời gian ngắn hay không.

Để truyền mã tài khoản bị làm rối, hãy gọi phương thức SetObfuscatedAccountId() qua API tiện ích:

// Get the plugin extensions for the Google Play Store.
_playStoreExtensions =
    extensions.GetExtension<Google.Play.Billing.IGooglePlayStoreExtensions>();

// Pass an obfuscated account ID.
_playStoreExtensions.SetObfuscatedAccountId(obfuscatedAccountId);

Truyền mã hồ sơ bị làm rối đến Google Play

Bạn có thể truyền một mã hồ sơ bị làm rối đến Google Play để hỗ trợ việc phát hiện gian lận, chẳng hạn như để xác định xem có nhiều thiết bị đang thực hiện giao dịch mua trên cùng một tài khoản trong một khoảng thời gian ngắn hay không. Điều này cũng tương tự như việc truyền mã tài khoản người dùng bị làm rối. Trong cả hai trường hợp, mã nhận dạng đại diện cho một người dùng duy nhất, nhưng mã hồ sơ cho phép bạn xác định riêng một người dùng trên nhiều hồ sơ mà họ có trong một ứng dụng. Sau khi gửi mã nhận dạng hồ sơ đã bị làm rối mã nguồn cho Google Play, bạn có thể truy xuất mã nhận dạng đó sau trong biên nhận mua hàng.

Để truyền mã hồ sơ bị làm rối, hãy sử dụng trình tạo IAP để sửa đổi cấu hình của mô-đun bằng cách gọi phương thức SetObfuscatedProfileId():

// Get the plugin extensions for the Google Play Store.
_playStoreExtensions =
    extensions.GetExtension<Google.Play.Billing.IGooglePlayStoreExtensions>();

// Pass an obfuscated profile ID.
_playStoreExtensions.SetObfuscatedProfileId(obfuscatedProfileId);

Xác nhận thay đổi về giá của gói thuê bao

Google Play cho phép bạn thay đổi giá của một gói thuê bao đang hoạt động. Người dùng trò chơi của bạn phải xác nhận mọi thay đổi về giá trước khi thay đổi đó có hiệu lực. Để nhắc người dùng xác nhận việc thay đổi giá của gói thuê bao, hãy gọi phương thức ConfirmSubscriptionPriceChange():

// Get the plugin extensions for the Google Play Store.
_playStoreExtensions =
    extensions.GetExtension<Google.Play.Billing.IGooglePlayStoreExtensions>();

_playStoreExtensions.ConfirmSubscriptionPriceChange(productId,
    delegate (bool success)
    {
        // Returns whether the user has accepted the new price or not.
    });

Các thay đổi về hành vi của API Unity

Khi bạn đang sử dụng trình bổ trợ Google Play Billing, hầu hết các API sẽ hoạt động giống với cách triển khai IAP chuẩn của Unity trên các cửa hàng ứng dụng khác. Tuy nhiên, có một số trường hợp API sẽ hoạt động theo cách khác. Phần này mô tả các điểm khác biệt về hành vi này.

Trọng tải nhà phát triển không được hỗ trợ

Google Play không còn hỗ trợ trọng tải dành cho nhà phát triển và sẽ thay thế giải pháp này bằng các giải pháp có ý nghĩa và hợp với ngữ cảnh hơn. Vì lý do này, trọng tải dành cho nhà phát triển sẽ không được hỗ trợ. Để biết thêm thông tin về các giải pháp thay thế, hãy xem trang về Trọng tải dành cho nhà phát triển.

Bạn có thể tiếp tục dùng chung các giao diện được xác định theo quy trình triển khai IAP tiêu chuẩn của Unity cho các cửa hàng ứng dụng khác, kể cả IStoreController. Khi bắt đầu một giao dịch mua, bạn vẫn có thể sử dụng IStoreController và gọi phương thức InitiatePurchase():

public void InitiatePurchase(Purchasing.Product product, string payload);

Tuy nhiên, mọi trọng tải mà bạn truyền vào sẽ không có hiệu lực (sẽ không xuất hiện trong bản biên nhận cuối cùng).

SubscriptionManager không được hỗ trợ

Unity IAP cung cấp lớp SubscriptionManager để quản lý gói thuê bao. Do quy trình triển khai IAP tiêu chuẩn của Unity cho lớp này sử dụng trọng tải dành cho nhà phát triển nên lớp này sẽ không được hỗ trợ. Tuy vẫn có thể tạo lớp nhưng có thể bạn sẽ nhận được dữ liệu không đáng tin cậy khi sử dụng bất kỳ phương thức getter nào của lớp này.

UpdateSubscription có các thay đổi nhỏ về API

Trình bổ trợ Google Play Billing không hỗ trợ việc sử dụng phương thức SubscriptionManager.UpdateSubscription()SubscriptionManager.UpdateSubscriptionInGooglePlayStore() để nâng cấp và hạ cấp các gói thuê bao của bạn. Nếu trò chơi của bạn gọi những phương thức này thì GooglePlayStoreUnsupportedException sẽ được gửi đi.

Thư viện Google Play Billing cung cấp một API thay thế để sử dụng thay cho các phương thức này. Để nâng cấp hoặc hạ cấp gói thuê bao, hãy gọi phương thức UpdateSubscription() bằng chế độ chia theo tỷ lệ:

void UpdateSubscription(Product oldProduct, Product newProduct,
           GooglePlayStoreProrationMode prorationMode = GooglePlayStoreProrationMode.Unknown);

Bạn có thể gói lệnh gọi phương thức này bằng việc kiểm tra nền tảng hoặc trong khối catch khi GooglePlayStoreUnsupportedException bị phát hiện.

Để biết thêm thông tin và ví dụ về cách sử dụng chế độ chia theo tỷ lệ, hãy xem phần Đặt chế độ chia tỷ lệ.