| Chọn nền tảng: | iOS+ Android Unity |
Giao dịch mua hàng trong ứng dụng (IAP) là nội dung hoặc tính năng kỹ thuật số mà bạn có thể bán trong một ứng dụng di động thông qua Apple App Store hoặc Google Play để ứng dụng của bạn không phải xử lý các giao dịch tài chính. Ví dụ về giao dịch mua hàng trong ứng dụng bao gồm nội dung dựa trên gói thuê bao hoặc các vật phẩm đặc biệt trong trò chơi.
Analytics cho thấy các sự kiện mua hàng trong ứng dụng trong báo cáo Giao dịch mua hàng trong ứng dụng.
Đối với ứng dụng Unity, SDK Analytics tích hợp với Apple App Store trên iOS và Google Play trên Android.
Trong hầu hết các trường hợp, SDK Analytics sẽ tự động thu thập các sự kiện mua hàng trong ứng dụng mà không cần lệnh gọi API trong ứng dụng của bạn. Yêu cầu thiết lập và hành vi theo dõi phụ thuộc vào nền tảng mục tiêu:
- Android: Google Play giao dịch được theo dõi tự động sau khi liên kết Google Play. Bạn không cần thay đổi mã.
- iOS (StoreKit 1): Các giao dịch trên App Store được thực hiện bằng API StoreKit 1 sẽ được theo dõi tự động. Bạn không cần thay đổi mã.
- iOS (StoreKit 2): Bạn phải ghi lại các giao dịch trên App Store được thực hiện bằng API StoreKit 2 theo cách thủ công bằng API Unity tuỳ chỉnh.
Trước khi bắt đầu
Thiết lập dự án Firebase và cơ sở mã của ứng dụng như mô tả trong phần Bắt đầu sử dụng Google Analytics.
Đảm bảo rằng ứng dụng của bạn đáp ứng các yêu cầu thiết lập dành riêng cho nền tảng sau:
iOS (StoreKit 1): Bạn không cần thiết lập thêm. Tính năng theo dõi StoreKit 1 hoạt động tự động.
iOS (StoreKit 2): Đảm bảo ứng dụng của bạn đang sử dụng SDK của Firebase cho Unity phiên bản 13.12.0 trở lên.
Hãy nhớ tìm hiểu kỹ về các API mua hàng trong ứng dụng bằng cách xem tài liệu dành riêng cho nền tảng về Google Play Billing, Apple StoreKit và Unity In-App Purchasing.
Triển khai
Android
Đối với ứng dụng Android, bạn có thể đo lường các sự kiện mua hàng trong ứng dụng ngay khi liên kết với Google Play. Bạn không cần viết mã tuỳ chỉnh trong dự án Unity để đo lường giao dịch mua.
iOS
Đối với ứng dụng iOS, chiến lược triển khai phụ thuộc vào việc ứng dụng của bạn sử dụng StoreKit 1 hay StoreKit 2:
StoreKit 1
Nếu quy trình mua của bạn sử dụng StoreKit 1, thì Analytics SDK sẽ tự động ghi nhật ký các sự kiện IAP. Bạn không cần thêm bất kỳ mã tuỳ chỉnh nào để theo dõi các giao dịch mua này.
StoreKit 2
Nếu quy trình mua của bạn sử dụng StoreKit 2, thì bạn phải ghi lại các giao dịch đã xác minh theo cách thủ công bằng cách truyền chuỗi giá trị nhận dạng giao dịch đến LogAppleTransactionAsync().
using Firebase.Analytics; // Call this method once you have completed a StoreKit 2 transaction // and have the transaction identifier. public void LogPurchase(string transactionId) { FirebaseAnalytics.LogAppleTransactionAsync(transactionId).ContinueWith(task => { if (task.IsFaulted || task.IsCanceled) { Debug.LogError("Failed to log Apple purchase transaction: " + task.Exception); } else { Debug.Log("Successfully logged Apple purchase transaction"); } }); }
Truy xuất mã giao dịch bằng Unity IAP
Nếu dự án của bạn sử dụng gói Mua hàng trong ứng dụng chuẩn của Unity (UnityEngine.Purchasing), thì phương thức truy xuất mã giao dịch sẽ phụ thuộc vào phiên bản API Unity IAP mà bạn đang sử dụng.
Lệnh gọi lại xác nhận bằng Unity IAP phiên bản 5.2 trở lên
Trong Unity IAP phiên bản 5.2 trở lên, bạn có thể truy cập vào thông tin giao dịch dành riêng cho Apple ngay từ đối tượng Order trong lệnh gọi lại xác nhận. Bạn có thể truyền OriginalTransactionID hoặc mã giao dịch hiện tại đến LogAppleTransactionAsync():
using UnityEngine.Purchasing; using Firebase.Analytics; using Firebase.Extensions; // Example using Unity IAP v5.2+ Order confirmation void OnPurchaseConfirmed(Order order) { #if UNITY_IOS if (order is ConfirmedOrder confirmedOrder) { var appleInfo = confirmedOrder.Info.Apple; if (appleInfo != null) { string transactionId = appleInfo.OriginalTransactionID; if (!string.IsNullOrEmpty(transactionId)) { // Log the StoreKit 2 transaction with Firebase Analytics FirebaseAnalytics.LogAppleTransactionAsync(transactionId).ContinueWithOnMainThread(task => { if (task.IsFaulted || task.IsCanceled) { Debug.LogError($"Failed to log Apple purchase transaction: {task.Exception}"); } else { Debug.Log("Successfully logged Apple purchase transaction"); } }); } else { Debug.LogWarning("Apple OriginalTransactionID is null or empty. Skipping Firebase logging."); } } } else if (order is FailedOrder failedOrder) { Debug.Log($"Purchase confirmation bypassed due to failure: {failedOrder.FailureReason}"); } #endif }
Lệnh gọi lại ProcessPurchase cũ
Nếu đang sử dụng lệnh gọi lại ProcessPurchase cũ, bạn có thể trích xuất giá trị nhận dạng giao dịch từ sản phẩm đã mua:
using UnityEngine.Purchasing; using Firebase.Analytics; using Firebase.Extensions; public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs args) { // Extract the transaction ID from the purchased product string transactionId = args.purchasedProduct.transactionID; #if UNITY_IOS // Log the StoreKit 2 transaction with Firebase Analytics FirebaseAnalytics.LogAppleTransactionAsync(transactionId).ContinueWithOnMainThread(task => { if (task.IsFaulted || task.IsCanceled) { Debug.LogError($"Failed to log Apple purchase transaction: {task.Exception}"); } else { Debug.Log("Successfully logged Apple purchase transaction"); } }); #endif return PurchaseProcessingResult.Complete; }
Ghi lại sự kiện mua hàng trong ứng dụng theo cách thủ công
Nếu cần theo dõi các giao dịch mua hàng trong ứng dụng được thực hiện bên ngoài Cửa hàng Play hoặc Cửa hàng ứng dụng (chẳng hạn như thông qua các cửa hàng thay thế hoặc quá trình xử lý thanh toán tuỳ chỉnh hoặc các trang web thương mại khác), bạn có thể ghi lại các giao dịch này theo cách thủ công bằng sự kiện IN_APP_PURCHASE.
using Firebase.Analytics; public void LogCustomInAppPurchase(string productName, double value, string currencyCode, int quantity = 1) { FirebaseAnalytics.LogEvent( FirebaseAnalytics.EventInAppPurchase, new Parameter(FirebaseAnalytics.ParameterProductName, productName), new Parameter(FirebaseAnalytics.ParameterValue, value), new Parameter(FirebaseAnalytics.ParameterCurrency, currencyCode), new Parameter(FirebaseAnalytics.ParameterQuantity, quantity) ); }