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

انتخاب پلتفرم: iOS+ اندروید یونیتی


خریدهای درون‌برنامه‌ای (IAP) محتوای دیجیتالی یا ویژگی‌هایی هستند که می‌توانید در یک برنامه تلفن همراه از طریق فروشگاه اپل اپ یا Google Play بفروشید تا برنامه شما نیازی به پردازش تراکنش‌های مالی نداشته باشد. نمونه‌هایی از خریدهای درون‌برنامه‌ای شامل محتوای مبتنی بر اشتراک یا قطعات بازی ویژه است.

Analytics رویدادهای IAP را در گزارش خریدهای درون‌برنامه‌ای نشان می‌دهد.

برای برنامه‌های Unity، کیت توسعه نرم‌افزار (SDK) Analytics با فروشگاه اپل در iOS و Google Play در اندروید ادغام می‌شود.

در بیشتر موارد، SDK Analytics به طور خودکار رویدادهای IAP را بدون نیاز به فراخوانی API در برنامه شما جمع‌آوری می‌کند. الزامات راه‌اندازی و رفتار ردیابی به پلتفرم هدف بستگی دارد:

  • اندروید : تراکنش‌های Google Play پس از اتصال به Google Play به طور خودکار ردیابی می‌شوند. نیازی به تغییر کد نیست.
  • iOS (StoreKit 1) : تراکنش‌های اپ استور که با استفاده از APIهای StoreKit 1 انجام می‌شوند، به طور خودکار ردیابی می‌شوند. نیازی به تغییر کد نیست.
  • iOS (StoreKit 2) : تراکنش‌های اپ استور که با استفاده از APIهای StoreKit 2 انجام می‌شوند، باید به صورت دستی و با استفاده از API سفارشی Unity ثبت شوند.

قبل از اینکه شروع کنی

پیاده‌سازی

اندروید

برای برنامه‌های اندروید، می‌توانید رویدادهای IAP را به محض اتصال به Google Play اندازه‌گیری کنید. برای اندازه‌گیری خریدها نیازی به نوشتن هیچ کد سفارشی در پروژه یونیتی خود ندارید.

آی‌او‌اس

برای برنامه‌های iOS، استراتژی پیاده‌سازی بستگی به این دارد که آیا برنامه شما از StoreKit 1 یا StoreKit 2 استفاده می‌کند:

کیت فروشگاه ۱

اگر جریان خرید شما از StoreKit 1 استفاده می‌کند، Analytics SDK به طور خودکار رویدادهای IAP را ثبت می‌کند. برای ردیابی این خریدها نیازی به اضافه کردن هیچ کد سفارشی ندارید.

فروشگاه کیت ۲

اگر جریان خرید شما از 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

اگر پروژه شما از بسته استاندارد خرید درون‌برنامه‌ای یونیتی ( UnityEngine.Purchasing ) استفاده می‌کند، روش بازیابی شناسه تراکنش به نسخه API IAP یونیتی که استفاده می‌کنید بستگی دارد.

فراخوانی مجدد تأیید با استفاده از Unity IAP نسخه ۵.۲+

در Unity IAP نسخه ۵.۲ و بالاتر، می‌توانید مستقیماً از شیء Order در فراخوانی تأیید، به اطلاعات تراکنش‌های مخصوص اپل دسترسی پیدا کنید. می‌توانید 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;
}