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