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

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

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

قبل البدء

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

  1. اضبط إعدادات مشروعك وتطبيقك كما هو موضَّح في. بدء استخدام "إحصاءات Google"

  2. تأكَّد من أنّك ربطت مشروعك على Firebase بـ حسابك على "إحصاءات Google"

  3. تأكّد من تضمين الإصدار 17.6.0 أو الإصدارات الأحدث من حزمة تطوير البرامج (SDK) لنظام التشغيل Android في تطبيقك. وحزمة تطوير البرامج (SDK) لمنصات Apple بالإصدار 6.34.0 أو الإصدارات الأحدث.

التنفيذ

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

AdMob

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

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

توفِّر المنصات، مثل AppLovin وironSource بيانات الأرباح على مستوى مرّات الظهور. يمكنك استخدامه بعد ذلك لتسجيل بيانات "إحصاءات Google" ad_impression أحداث.

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

AppLovin

Swift

ملاحظة: لا يتوفّر منتج 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,
      ])
  }
}

Objective-C

ملاحظة: لا يتوفّر منتج 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);
}

Unity

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

مصدر الحديد

Swift

ملاحظة: لا يتوفّر منتج 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,
    ])
}

Objective-C

ملاحظة: لا يتوفّر منتج 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);
    }
}

Unity

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 | الانسجام) كسلسلة مكونة من ثلاثة أحرف ISO_4217 التنسيق (مثلاً، "USD"). تتجاهل بعض منصات تحقيق الربح من الإعلانات العملة مما قد يتطلب منك ترميزًا ثابتًا للمعلمة.

مَعلمة القيمة

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

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

التحقق

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

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

  2. الوقت الفعلي
    بعد نشر التطبيق، استخدِم علامة التبويب "إحصاءات Google" تقرير "الوقت الفعلي" للتأكّد من سير عملية التنفيذ بشكل صحيح في تقرير "الوقت الفعلي" عرض بطاقة عدد الأحداث حسب اسم الحدث واختيار ad_impression للاطّلاع على تفاصيل الحدث والمعلمة خلال آخر 30 دقيقة.

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

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

انتقِل إلى لوحة بيانات "إحصاءات Google" في وحدة تحكُّم Firebase أو في موقع "إحصاءات Google" في وحدة تحكُّم "إحصاءات Google". تتم مراعاة أرباح الإعلانات إلى مقاييس، مثل متوسط الأرباح من كل مستخدم (ARPU) والقيمة الدائمة القيمة (LTV).