قياس عمليات الشراء داخل التطبيق

اختيار المنصة: +iOS Android Unity


عمليات الشراء داخل التطبيق (IAP) هي محتوى رقمي أو ميزات يمكنك بيعها في تطبيق متوافق مع الأجهزة الجوّالة من خلال Apple App Store أو Google Play حتى لا يضطر تطبيقك إلى معالجة المعاملات المالية. وتشمل أمثلة عمليات الشراء داخل التطبيق المحتوى المستند إلى الاشتراك أو قطع الألعاب الخاصة.

تعرض Analytics أحداث الشراء داخل التطبيق في تقرير "عمليات الشراء داخل التطبيق".

بالنسبة إلى تطبيقات Unity، تتكامل حزمة تطوير البرامج (SDK) لـ Analytics مع متجر تطبيقات Apple على أجهزة iOS وGoogle Play على أجهزة Android.

في معظم الحالات، تجمع حزمة تطوير البرامج (SDK) لـ "Analytics" أحداث الشراء داخل التطبيق تلقائيًا بدون الحاجة إلى طلبات بيانات من واجهة برمجة التطبيقات في تطبيقك. وتعتمد متطلبات الإعداد وسلوك التتبُّع على المنصة المستهدَفة:

  • ‫Android: يتم تتبُّع معاملات "Google Play" تلقائيًا بعد ربط "Google Play". ولا يلزم إجراء أي تغييرات على الرموز.
  • أجهزة iOS (الإصدار StoreKit 1): يتم تلقائيًا تتبُّع معاملات App Store التي تتم باستخدام واجهات برمجة تطبيقات StoreKit 1. ولا يلزم إجراء أي تغييرات على الرموز.
  • نظام التشغيل iOS‏ (StoreKit 2): يجب تسجيل معاملات App Store التي تتم باستخدام واجهات برمجة تطبيقات StoreKit 2 يدويًا باستخدام واجهة برمجة تطبيقات Unity المخصّصة.

قبل البدء

التنفيذ

Android

بالنسبة إلى تطبيقات Android، يمكنك قياس أحداث الشراء داخل التطبيق فور الربط بـ Google Play. ليس عليك كتابة أي رمز مخصّص في مشروع Unity لقياس عمليات الشراء.

iOS

بالنسبة إلى تطبيقات iOS، تعتمد استراتيجية التنفيذ على ما إذا كان تطبيقك يستخدم StoreKit 1 أو StoreKit 2:

StoreKit 1

إذا كان مسار الشراء يستخدم StoreKit 1، تسجِّل حزمة تطوير البرامج (SDK) لخدمة "إحصاءات Google" أحداث الشراء داخل التطبيق تلقائيًا. ولست بحاجة إلى إضافة أي رمز مخصّص لتتبُّع عمليات الشراء هذه.

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 الذي تستخدمه.

عملية معاودة الاتصال للتأكيد باستخدام الإصدار 5.2 من Unity IAP أو الإصدارات الأحدث

في الإصدار 5.2 من Unity IAP والإصدارات الأحدث، يمكنك الوصول إلى معلومات المعاملات الخاصة بـ Apple مباشرةً من عنصر 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;
}

تسجيل أحداث الشراء داخل التطبيق يدويًا

إذا أردت تتبُّع عمليات الشراء داخل التطبيق التي تتم خارج "متجر 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)
    );
}