يساعدك قياس مصادر الإيرادات على فهم القيمة الدائمة للمستخدمين وتنمية أعمال تطبيقاتك. يوضح لك هذا الدليل كيفية إعداد قياس إيرادات الإعلانات لمنصتك.
بعد الانتهاء من إعداد قياس إيرادات الإعلانات، يمكنك بعد ذلك القيام بأي مما يلي:
قم بتحليل إجراءات المستخدم التي تساهم في عائدات الإعلانات الناتجة عن تطبيقك.
قم بإجراء تجارب باستخدام اختبار Firebase A/B للعثور على الميزات التي تؤدي إلى تحسينات في إيرادات إعلانات تطبيقك، أو تخصيص تجارب الإعلانات باستخدام تخصيص التكوين عن بُعد .
يمكنك إنشاء جماهير مستخدمين وتخصيص تجارب المستخدم باستخدام Firebase Remote Config استنادًا إلى مستويات إيرادات الإعلانات.
قبل ان تبدأ
إذا لم تكن قد قمت بذلك بالفعل، فتأكد من إكمال المهام التالية:
قم بإعداد مشروعك وتطبيقك كما هو موضح في الخطوات الأولى مع Analytics .
تأكد من تضمين تطبيقك 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
سويفت
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, ]) } }
ج موضوعية
- (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); }
مصدر الحديد
سويفت
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, ]) }
ج موضوعية
- (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 ميزات متعددة للتحقق من صحة التنفيذ طوال دورة التطوير.
DebugView
عند اختبار التنفيذ لأول مرة، استخدم DebugView للاطلاع على بيانات اختبارad_impression
في وحدة التحكم. عند تحديد حدثad_impression
، يمكنك مراجعة المعلمات التي ترسلها في لوحة المعلمات (في الجانب الأيمن من الشاشة). يساعدك هذا على التأكد من معالجة المعلومات الصحيحة.في الوقت الحالى
بمجرد نشر تطبيقك، استخدم تقرير Google Analytics Realtime للتأكد من أن التنفيذ يعمل بشكل صحيح. في تقرير الوقت الفعلي، اعرض عدد الأحداث حسب بطاقة اسم الحدث وحدد ad_impression لرؤية تفاصيل الحدث والمعلمة لآخر 30 دقيقة.BigQuery
استخدم تصدير BigQuery لاستخراج عينة من يوم واحد أو أكثر من أحداثad_impression
. استخدم هذا النموذج المستخرج للبحث عن المشكلات، مثل القيم الصفرية أو التي لم يتم تعيينها، وتطبيق الإصلاحات على التعليمات البرمجية الخاصة بك لأي حالات استخدام لم تتم معالجتها.
الخطوات التالية
تفضل بزيارة لوحة تحكم Analytics في وحدة تحكم Firebase أو في موقع Analytics المرتبط في وحدة تحكم Analytics. يتم أخذ إيرادات الإعلانات في الاعتبار إلى مقاييس، مثل متوسط الإيرادات لكل مستخدم (ARPU) والقيمة الدائمة (LTV).