Catch up on highlights from Firebase at Google I/O 2023. Learn more

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

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

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

قبل ان تبدأ

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

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

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

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

تطبيق

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

AdMob

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

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

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

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

أب لوفين

سويفت

ملاحظة: منتج 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 ، يمكنك مراجعة المعلمات التي ترسلها في لوحة Parameters (في الجانب الأيمن من الشاشة). يساعدك هذا في التأكد من معالجة المعلومات الصحيحة.

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

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

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

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