قياس أرباح الإعلانات

يساعدك قياس مصادر الإيرادات على فهم القيمة الدائمة للمستخدمين وتنمية أعمال تطبيقاتك. يوضح لك هذا الدليل كيفية إعداد قياس إيرادات الإعلانات لمنصتك.

بعد الانتهاء من إعداد قياس إيرادات الإعلانات، يمكنك بعد ذلك القيام بأي مما يلي:

قبل ان تبدأ

إذا لم تكن قد قمت بذلك بالفعل، فتأكد من إكمال المهام التالية:

  1. قم بإعداد مشروعك وتطبيقك كما هو موضح في الخطوات الأولى مع Analytics .

  2. تأكد من ربط مشروع Firebase الخاص بك بحساب Google Analytics.

  3. تأكد من تضمين تطبيقك Android SDK v17.6.0+ أو Apple Platform SDK v6.34.0+.

تطبيق

يمكنك استخدام Google Analytics لقياس إيرادات الإعلانات الناتجة عن عرض الإعلانات باستخدام منصات تحقيق الدخل، مثل AdMob وAppLovin وironSource. لقياس إيرادات الإعلانات، يجب عليك تسجيل أحداث ad_impression عندما يرى المستخدم إعلانًا في تطبيقك. تحتوي هذه الأحداث على تفاصيل مثل النظام الأساسي للإعلان والمصدر والعملة والقيمة.

ادموب

إذا كنت تستخدم نظام AdMob الأساسي، فاربط تطبيق AdMob بـ Firebase وAnalytics لتمكين القياس التلقائي لإيرادات الإعلانات. تقوم Firebase SDK لبرنامج Google Analytics بتسجيل حدث ad_impression تلقائيًا عندما يرى المستخدمون مرة ظهور للإعلان.

منصات أخرى لتحقيق الدخل من الإعلانات

توفر الأنظمة الأساسية مثل AppLovin وironSource بيانات الإيرادات على مستوى مرات الظهور والتي يمكنك استخدامها بعد ذلك لتسجيل أحداث ad_impression في Google Analytics.

تعرض الأقسام التالية أمثلة تنفيذية لعدد قليل من الأنظمة الأساسية المختلفة لتحقيق الدخل من الإعلانات.

AppLovin

سويفت

ملاحظة: منتج Firebase هذا غير متوفر على هدف macOS.
func didPayRevenue(_ impressionData: MAAd?) {
  if let impressionData = impressionData {
    Analytics.logEvent(
      AnalyticsEventAdImpression,
      parameters: [
        AnalyticsParameterAdPlatform: "AppLovin",
        AnalyticsParameterAdUnitName: impressionData.adUnitIdentifier,
        AnalyticsParameterAdFormat: impressionData.format,
        AnalyticsParameterValue: impressionData.revenue,
        AnalyticsParameterCurrency: "USD",  // All Applovin revenue is sent in USD
        AnalyticsParameterAdSource: impressionData.networkName,
      ])
  }
}

ج موضوعية

ملاحظة: منتج Firebase هذا غير متوفر على هدف macOS.
- (void)didPayRevenueForAd:(MAAd *)impressionData {
    [FIRAnalytics logEventWithName:kFIREventAdImpression
                    parameters: @{
                        kFIRParameterAdPlatform: @"AppLovin",
                        kFIRParameterAdSource: impressionData.networkName,
                        kFIRParameterAdFormat: impressionData.format,
                        kFIRParameterAdUnitName: impressionData.adUnitIdentifier,
                        kFIRParameterCurrency: @"USD", // All Applovin revenue is sent in USD
                        kFIRParameterValue: impressionData.revenue
                    }];
}

Kotlin+KTX

override fun onAdRevenuePaid(impressionData: MaxAd?) {
    impressionData?.let {
        firebaseAnalytics = Firebase.analytics
        firebaseAnalytics.logEvent(FirebaseAnalytics.Event.AD_IMPRESSION) {
            param(FirebaseAnalytics.Param.AD_PLATFORM, "appLovin")
            param(FirebaseAnalytics.Param.AD_UNIT_NAME, impressionData.adUnitId)
            param(FirebaseAnalytics.Param.AD_FORMAT, impressionData.format.label)
            param(FirebaseAnalytics.Param.AD_SOURCE, impressionData.networkName)
            param(FirebaseAnalytics.Param.VALUE, impressionData.revenue)
            param(FirebaseAnalytics.Param.CURRENCY, "USD") // All Applovin revenue is sent in USD
        }
    }
}

Java

@Override
public void onAdRevenuePaid(MaxAd impressionData) {

    double revenue = impressionData.getRevenue(); // In USD

    mFirebaseAnalytics = FirebaseAnalytics.getInstance(this);
    Bundle params = new Bundle();
    params.putString(FirebaseAnalytics.Param.AD_PLATFORM, "appLovin");
    params.putString(FirebaseAnalytics.Param.AD_SOURCE, impressionData.getNetworkName());
    params.putString(FirebaseAnalytics.Param.AD_FORMAT, impressionData.getFormat().getLabel());
    params.putString(FirebaseAnalytics.Param.AD_UNIT_NAME, impressionData.getAdUnitId());
    params.putDouble(FirebaseAnalytics.Param.VALUE, revenue);
    params.putString(FirebaseAnalytics.Param.CURRENCY, "USD"); // All Applovin revenue is sent in USD
    mFirebaseAnalytics.logEvent(FirebaseAnalytics.Event.AD_IMPRESSION, params);
}

وحدة

// Attach callbacks based on the ad format(s) you are using
MaxSdkCallbacks.Interstitial.OnAdRevenuePaidEvent += OnAdRevenuePaidEvent;
MaxSdkCallbacks.Rewarded.OnAdRevenuePaidEvent += OnAdRevenuePaidEvent;
MaxSdkCallbacks.Banner.OnAdRevenuePaidEvent += OnAdRevenuePaidEvent;
MaxSdkCallbacks.MRec.OnAdRevenuePaidEvent += OnAdRevenuePaidEvent;
private void OnAdRevenuePaidEvent(string adUnitId, MaxSdkBase.AdInfo impressionData)
{
double revenue = impressionData.Revenue;
var impressionParameters = new[] {
  new Firebase.Analytics.Parameter("ad_platform", "AppLovin"),
  new Firebase.Analytics.Parameter("ad_source", impressionData.NetworkName),
  new Firebase.Analytics.Parameter("ad_unit_name", impressionData.AdUnitIdentifier),
  new Firebase.Analytics.Parameter("ad_format", impressionData.AdFormat),
  new Firebase.Analytics.Parameter("value", revenue),
  new Firebase.Analytics.Parameter("currency", "USD"), // All AppLovin revenue is sent in USD
};
Firebase.Analytics.FirebaseAnalytics.LogEvent("ad_impression", impressionParameters);
}

مصدر الحديد

سويفت

ملاحظة: منتج Firebase هذا غير متوفر على هدف macOS.
func impressionDataDidSucceed(_ impressionData: ISImpressionData!) {
  Analytics.logEvent(
    AnalyticsEventAdImpression,
    parameters: [
      AnalyticsParameterAdPlatform: "ironSource",
      AnalyticsParameterAdSource: impressionData.ad_network ?? "No ad_network",
      AnalyticsParameterAdFormat: impressionData.ad_unit ?? "No ad_unit",
      AnalyticsParameterAdUnitName: impressionData.instance_name ?? "No instance_name",
      AnalyticsParameterCurrency: "USD",
      AnalyticsParameterValue: impressionData.revenue ?? 0,
    ])
}

ج موضوعية

ملاحظة: منتج Firebase هذا غير متوفر على هدف macOS.
- (void)impressionDataDidSucceed:(ISImpressionData *)impressionData {
  [FIRAnalytics logEventWithName:kFIREventAdImpression
                      parameters:@{
                        kFIRParameterAdPlatform: @"ironSource",
                        kFIRParameterAdSource: impressionData.ad_network,
                        kFIRParameterAdFormat: impressionData.ad_unit,
                        kFIRParameterAdUnitName: impressionData.instance_name,
                        kFIRParameterCurrency: @"USD",
                        kFIRParameterValue: impressionData.revenue
                      }];
}

Kotlin+KTX

override fun onImpressionSuccess(impressionData: ImpressionData) {
    // The onImpressionSuccess will be reported when the rewarded video and interstitial ad is
    // opened.
    // For banners, the impression is reported on load success. Log.d(TAG, "onImpressionSuccess" +
    // impressionData)
    firebaseAnalytics = Firebase.analytics
    firebaseAnalytics.logEvent(FirebaseAnalytics.Event.AD_IMPRESSION) {
        param(FirebaseAnalytics.Param.AD_PLATFORM, "ironSource")
        param(FirebaseAnalytics.Param.AD_SOURCE, impressionData.adNetwork)
        param(FirebaseAnalytics.Param.AD_FORMAT, impressionData.adUnit)
        param(FirebaseAnalytics.Param.AD_UNIT_NAME, impressionData.instanceName)
        param(FirebaseAnalytics.Param.CURRENCY, "USD")
        param(FirebaseAnalytics.Param.VALUE, impressionData.revenue)
    }
}

Java

@Override
public void onImpressionSuccess(ImpressionData impressionData) {
    // The onImpressionSuccess will be reported when the rewarded video and interstitial ad is opened.
    // For banners, the impression is reported on load success. Log.d(TAG, "onImpressionSuccess" + impressionData);
    mFirebaseAnalytics = FirebaseAnalytics.getInstance(this);
    if (impressionData != null) {
        Bundle bundle = new Bundle();
        bundle.putString(FirebaseAnalytics.Param.AD_PLATFORM, "ironSource");
        bundle.putString(FirebaseAnalytics.Param.AD_SOURCE, impressionData.getAdNetwork());
        bundle.putString(FirebaseAnalytics.Param.AD_FORMAT, impressionData.getAdUnit());
        bundle.putString(FirebaseAnalytics.Param.AD_UNIT_NAME, impressionData.getInstanceName());
        bundle.putString(FirebaseAnalytics.Param.CURRENCY, "USD");
        bundle.putDouble(FirebaseAnalytics.Param.VALUE, impressionData.getRevenue());
        mFirebaseAnalytics.logEvent(FirebaseAnalytics.Event.AD_IMPRESSION, bundle);
    }
}

وحدة

private void ImpressionSuccessEvent(IronSourceImpressionData impressionData) {
  if (impressionData != null) {
      Firebase.Analytics.Parameter[] AdParameters = {
        new Firebase.Analytics.Parameter("ad_platform", "ironSource"),
        new Firebase.Analytics.Parameter("ad_source", impressionData.adNetwork),
        new Firebase.Analytics.Parameter("ad_unit_name", impressionData.getInstanceName),
        new Firebase.Analytics.Parameter("ad_format", impressionData.getAdUnit),
        new Firebase.Analytics.Parameter("currency","USD"),
        new Firebase.Analytics.Parameter("value", impressionData.getRevenue)
      };
      Firebase.Analytics.FirebaseAnalytics.LogEvent("ad_impression", AdParameters);
  }
}

اعتبارات التنفيذ

للسماح لبرنامج إعلانات Google بمعالجة ad_impression ، تأكد من تضمين معلمات currency value (الموضحة أدناه). يجب أن يكون كلا المعلمتين دقيقين قدر الإمكان لمنع المبالغة في تقدير المستخدمين أو التقليل من قيمتهم.

معلمة العملة

يجب إرسال معلمة currency ( iOS+ | Android | Unity ) كسلسلة بتنسيق ISO_4217 مكون من ثلاثة أحرف (على سبيل المثال، "USD" ). تحذف بعض منصات تحقيق الدخل من الإعلانات العملة، الأمر الذي قد يتطلب منك ترميز المعلمة بشكل ثابت.

معلمة القيمة

يجب إرسال معلمة value ( iOS+ | Android | Unity ) باستخدام نقطة كفاصل عشري. قد تحتاج إلى تحويل القيم المستلمة من بعض الأنظمة الأساسية لتناسب التنسيق المطلوب أعلاه. تقوم بعض الأنظمة الأساسية بترجمة التنسيقات الرقمية واستخدام الفواصل كفواصل عشرية. في بعض الحالات، قد لا يرسل النظام الأساسي قيمة على الإطلاق.

بالإضافة إلى ذلك، يجب أن تكون القيمة من النوع الرقمي، مثل مزدوج أو طويل. على سبيل المثال، 1000.01 و 0.001 و 1.00 كلها صالحة

تصديق

يقدم Google Analytics ميزات متعددة للتحقق من صحة التنفيذ طوال دورة التطوير.

  1. DebugView
    عند اختبار التنفيذ لأول مرة، استخدم DebugView للاطلاع على بيانات اختبار ad_impression في وحدة التحكم. عند تحديد حدث ad_impression ، يمكنك مراجعة المعلمات التي ترسلها في لوحة المعلمات (في الجانب الأيمن من الشاشة). يساعدك هذا على التأكد من معالجة المعلومات الصحيحة.

  2. في الوقت الحالى
    بمجرد نشر تطبيقك، استخدم تقرير Google Analytics Realtime للتأكد من أن التنفيذ يعمل بشكل صحيح. في تقرير الوقت الفعلي، اعرض عدد الأحداث حسب بطاقة اسم الحدث وحدد ad_impression لرؤية تفاصيل الحدث والمعلمة لآخر 30 دقيقة.

  3. BigQuery
    استخدم تصدير BigQuery لاستخراج عينة من يوم واحد أو أكثر من أحداث ad_impression . استخدم هذا النموذج المستخرج للبحث عن المشكلات، مثل القيم الصفرية أو التي لم يتم تعيينها، وتطبيق الإصلاحات على التعليمات البرمجية الخاصة بك لأي حالات استخدام لم تتم معالجتها.

الخطوات التالية

تفضل بزيارة لوحة تحكم Analytics في وحدة تحكم Firebase أو في موقع Analytics المرتبط في وحدة تحكم Analytics. يتم أخذ إيرادات الإعلانات في الاعتبار إلى مقاييس، مثل متوسط ​​الإيرادات لكل مستخدم (ARPU) والقيمة الدائمة (LTV).