| انتخاب پلاتفرم: | iOS+ Android Unity |
خرید درونبرنامهای (IAP) محتوا یا ویژگیهای دیجیتالی است که میتوانید در برنامه تلفن همراه ازطریق Apple App Store یا Google Play بفروشید تا برنامهتان مجبور نباشد تراکنشهای مالی را پردازش کند. نمونههایی از خریدهای درونبرنامهای شامل محتوای مبتنی بر اشتراک یا قطعات ویژه بازی است.
Analytics رویدادهای خرید درونبرنامهای را در گزارش خریدهای درونبرنامهای نشان میدهد.
برای برنامههای Unity، کیت توسعه نرمافزار Analytics با Apple App Store در iOS و Google Play در Android ادغام میشود.
در بیشتر موارد، کیت توسعه نرمافزار Analytics بهطور خودکار رویدادهای خرید درونبرنامهای را بدون نیاز به فراخوانیهای میانای برنامهسازی کاربردی در برنامهتان جمعآوری میکند. الزامات راهاندازی و رفتار ردیابی به پلاتفرم هدف بستگی دارد:
- Android: Google Play تراکنشها بهطور خودکار پساز پیوند دادن Google Play ردیابی میشوند. نیازی به تغییر کد نیست.
- iOS (StoreKit 1): تراکنشهای App Store که بااستفاده از StoreKit 1 API انجام شدهاند بهطور خودکار ردیابی میشوند. نیازی به تغییر کد نیست.
- iOS (StoreKit 2): تراکنشهای App Store که بااستفاده از StoreKit 2 API انجام شدهاند باید بهصورت دستی بااستفاده از Unity API سفارشی ثبت شوند.
قبل از شروع
پروژه Firebase و پایگاه کد برنامهتان را همانطور که در شروع به کار با Google Analytics شرح داده شده است راهاندازی کنید.
پروژه Firebase خود را به دارایی Google Analytics 4 پیوند دهید.
مطمئن شوید برنامهتان این الزامات راهاندازی مختص پلاتفرم را برآورده میکند:
Android: برنامههای Firebase خود را به Google Play پیوند دهید.
iOS (StoreKit 1): به راهاندازی بیشتری نیاز نیست. ردیابی StoreKit 1 بهطور خودکار کار میکند.
iOS (StoreKit 2): مطمئن شوید برنامهتان از Firebase Unity SDK نسخه ۱۳.۱۲.۰ یا بالاتر استفاده میکند.
با مرور اسناد مختص پلاتفرم برای خدمات صورتحساب Google Play، StoreKit Apple، و خرید درونبرنامهای Unity، مطمئن شوید که با میاناهای برنامهسازی کاربردی خرید درونبرنامهای آشنا هستید.
پیادهسازی
Android
برای برنامههای Android، میتوانید رویدادهای خرید درونبرنامهای را بهمحض پیوند دادن به Google Play بسنجید. برای اندازهگیری خریدها، نیازی نیست هیچ کد سفارشیای در پروژه Unity خود بنویسید.
iOS
برای برنامههای iOS، استراتژی پیادهسازی به این بستگی دارد که برنامهتان از StoreKit 1 استفاده میکند یا StoreKit 2:
StoreKit 1
اگر جریان خرید شما از StoreKit 1 استفاده میکند، Analytics SDK بهطور خودکار رویدادهای IAP را ثبت میکند. برای پیگیری این خریدها نیازی به افزودن کد سفارشی ندارید.
StoreKit 2
اگر جریان خریدتان از StoreKit 2 استفاده میکند، باید تراکنشهای تأییدشده را با ارسال رشته شناسه تراکنش به 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"); } }); }
بازیابی شناسه تراکنش بااستفاده از Unity IAP
اگر پروژهتان از بسته استاندارد خرید درونبرنامهای Unity
(UnityEngine.Purchasing) استفاده میکند، روش بازیابی شناسه تراکنش به
نسخه Unity IAP API که استفاده میکنید بستگی دارد.
تأیید فراخوانی برگشتی بااستفاده از Unity IAP نسخه ۵.۲ و بالاتر
در Unity IAP نسخه ۵.۲ و بالاتر، میتوانید مستقیماً از شیء Order در فراخوانی برگشتی تأیید به اطلاعات تراکنش مختص Apple دسترسی پیدا کنید. میتوانید
OriginalTransactionID یا شناسه تراکنش فعلی را به
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 }
پاسخ تماس ProcessPurchase قدیمی
اگر از فراخوان برگشتی ProcessPurchase قدیمی استفاده میکنید، میتوانید شناسه تراکنش را از محصول خریداریشده استخراج کنید:
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; }
ثبت دستی رویدادهای خرید درونبرنامه
اگر لازم است خریدهای درونبرنامهای انجامشده در خارج از «فروشگاه Play» یا App Store (مثلاً ازطریق فروشگاههای جایگزین یا فرایندهای پرداخت سفارشی، یا بازارهای دیگر) را ردیابی کنید، میتوانید این تراکنشها را بهصورت دستی بااستفاده از رویداد 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) ); }