Triển khai Thanh toán Trong ứng dụng Đa nền tảng trong Ứng dụng .NET MAUI

Với việc ngừng phát triển của thư viện InAppBillingPlugin phổ biến, nhiều nhà phát triển .NET MAUI đang tìm kiếm hướng dẫn để triển khai tính năng mua hàng trong ứng dụng (in-app purchases). Hôm nay, chúng tôi chia sẻ một mẫu (sample) toàn diện, minh họa cách triển khai thanh toán đa nền tảng cho Android, iOS, Mac Catalyst và Windows bằng các API dành riêng cho từng nền tảng với một giao diện thống nhất.

Mẫu BillingService

Mẫu BillingService mới của chúng tôi cho thấy cách tích hợp các hệ thống thanh toán dành riêng cho từng nền tảng vào ứng dụng .NET MAUI của bạn, đồng thời duy trì mã nguồn sạch sẽ, dễ bảo trì thông qua dependency injection và mô hình MVVM. Mẫu này bao gồm các triển khai hoàn chỉnh cho:

  • Android: Google Play Billing Client v7
  • iOS & Mac Catalyst: StoreKit
  • Windows: Microsoft Store APIs

Tổng quan Kiến trúc

Mẫu này minh họa một số mô hình kiến trúc quan trọng cho phát triển đa nền tảng:

Giao diện Thống nhất

Cốt lõi của việc triển khai là một giao diện IBillingService sạch sẽ, trừu tượng hóa các thao tác thanh toán dành riêng cho từng nền tảng:

public interface IBillingService
{
    Task<bool> InitializeAsync();
    Task<IEnumerable<Product>> GetProductsAsync();
    Task<PurchaseResult> PurchaseAsync(string productId);
    Task<bool> RestorePurchasesAsync();
    bool IsProductOwned(string productId);
}

Triển khai Theo từng Nền tảng

Mỗi nền tảng có tệp triển khai riêng sử dụng biên dịch có điều kiện (conditional compilation):

  • BillingService.Android.cs – Tích hợp Google Play Billing
  • BillingService.iOS.cs – Triển khai StoreKit (dùng chung cho iOS và Mac Catalyst)
  • BillingService.Windows.cs – Tích hợp Microsoft Store

Tệp dự án sử dụng các chỉ thị biên dịch có điều kiện để đưa vào triển khai phù hợp cho từng nền tảng mục tiêu, trong khi iOS và Mac Catalyst dùng chung một triển khai vì cả hai đều sử dụng API StoreKit 1 giống hệt nhau.

Dependency Injection

Dịch vụ thanh toán được đăng ký trong MauiProgram.cs và tự động phân giải thành triển khai chính xác theo nền tảng trong thời gian chạy:

builder.Services.AddSingleton<IBillingService, Services.BillingService>();
builder.Services.AddTransient<ProductsViewModel>();

Lưu ý về Triển khai StoreKit

Triển khai iOS và Mac Catalyst hiện tại sử dụng StoreKit 1, vẫn hoạt động trên tất cả các phiên bản iOS hiện tại, bao gồm iOS 18, 26 và các phiên bản mới hơn. Tại WWDC 2024, Apple đã thông báo ngừng sử dụng StoreKit 1 để chuyển sang StoreKit 2, cung cấp các tính năng nâng cao và API hiện đại ưu tiên Swift với hỗ trợ async/await. Mặc dù StoreKit 1 vẫn hoạt động cho các triển khai hiện tại, Apple cho biết các cải tiến và tính năng mới trong tương lai sẽ chỉ dành riêng cho StoreKit 2.

Mẫu này cung cấp một triển khai sẵn sàng cho sản xuất mà bạn có thể sử dụng trong ứng dụng của mình ngay hôm nay. Chúng tôi vẫn đang làm việc về Swift interop cho .NET và dự định cập nhật mẫu này khi có hỗ trợ đầy đủ StoreKit 2 trong .NET cho iOS. Việc chuyển đổi sang StoreKit 2 sẽ mang lại những cải tiến như xử lý giao dịch tốt hơn, quản lý đăng ký nâng cao và các mẫu async hiện đại, nhưng các ứng dụng của bạn sử dụng StoreKit 1 sẽ tiếp tục hoạt động bình thường trong thời gian chờ đợi.

Quan trọng: Đối với các ứng dụng sản xuất, bạn nên triển khai xác thực giao dịch phía máy chủ và xác minh biên lai để đảm bảo bảo mật và ngăn chặn gian lận. Mẫu này tập trung vào các mẫu triển khai phía máy khách.

Bắt đầu

Để khám phá mẫu và xem cách mỗi nền tảng triển khai thanh toán:

  1. Xem mã nguồn hoàn chỉnh trong kho lưu trữ mẫu .NET MAUI
  2. Xem trình duyệt mẫu trực tuyến để thấy mẫu hoạt động
  3. Clone kho lưu trữ và chạy mẫu trên máy phát triển của bạn

Mẫu bao gồm tài liệu README chi tiết với hướng dẫn thiết lập dành riêng cho từng nền tảng cho Google Play Console, App Store Connect và Microsoft Partner Center.

Yêu cầu Cấu hình

Trước khi thử nghiệm mua hàng trong ứng dụng, bạn cần cấu hình sản phẩm trong bảng điều khiển nhà phát triển của từng nền tảng:

Mỗi nền tảng có các yêu cầu cụ thể để thử nghiệm và tài liệu mẫu cung cấp hướng dẫn từng bước cho từng nền tảng.

Tìm hiểu Thêm

Mẫu BillingService minh họa các mẫu kiến trúc mà bạn có thể điều chỉnh cho ứng dụng của riêng mình. Những điểm chính bao gồm:

  • Cách tạo giao diện thống nhất cho các thao tác thanh toán dành riêng cho từng nền tảng
  • Sử dụng đúng cách biên dịch có điều kiện cho mã nguồn dành riêng cho nền tảng
  • Tích hợp với dependency injection và các mẫu MVVM
  • Xử lý lỗi và phản hồi người dùng cho các thao tác thanh toán
  • Chiến lược thử nghiệm cho mua hàng trong ứng dụng

Hãy truy cập trình duyệt mẫu .NET MAUI để khám phá mẫu này và các mẫu khác giúp bạn xây dựng ứng dụng đa nền tảng tốt hơn.

Tài Nguyên

Chúng tôi hy vọng mẫu này sẽ giúp bạn triển khai tính năng mua hàng trong ứng dụng trong các ứng dụng .NET MAUI của mình! Hãy chia sẻ phản hồi và câu hỏi của bạn trong phần bình luận bên dưới.

Chỉ mục