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

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


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

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

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

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

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

قبل البدء

التنفيذ

Android

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

iOS

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

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