اندازه‌گیری خریدهای درون‌برنامه

انتخاب پلاتفرم: 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 سفارشی ثبت شوند.

قبل از شروع

پیاده‌سازی

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)
    );
}