يساعدك قياس مصادر الأرباح في فهم القيمة الدائمة المستخدمين وزيادة النشاط التجاري لتطبيقك. يوضّح لك هذا الدليل كيفية إعداد أرباح الإعلانات. قياس أدائك على منصتك.
بعد الانتهاء من إعداد قياس أرباح الإعلانات، يمكنك إجراء أيّ من التالي:
يمكنك تحليل إجراءات المستخدمين التي تساهم في أرباح الإعلانات التي يحقّقها تطبيقك.
يمكنك إجراء التجارب باستخدام Firebase A/B Testing لمعرفة ما ميزات تؤدي إلى تحسين أرباح الإعلانات في تطبيقك أو تخصيص الإعلانات التجارب في استخدام تخصيص Remote Config
إنشاء المحتوى شرائح جمهور المستخدمين وتخصيص تجارب المستخدمين باستخدام Firebase Remote Config استنادًا إلى مستويات أرباح الإعلانات.
قبل البدء
تأكد من إكمال المهام التالية، إذا لم يسبق لك إجراء ذلك:
اضبط إعدادات مشروعك وتطبيقك كما هو موضَّح في. بدء استخدام "Analytics"
تأكَّد من أنّك ربطت مشروعك على Firebase بـ حساب واحد (Google Analytics).
تأكّد من تضمين الإصدار 17.6.0 أو الإصدارات الأحدث من حزمة تطوير البرامج (SDK) لنظام التشغيل Android في تطبيقك. وحزمة تطوير البرامج (SDK) لمنصات Apple بالإصدار 6.34.0 أو الإصدارات الأحدث.
التنفيذ
يمكنك استخدام Google Analytics لقياس أرباح الإعلانات المحقّقة من
عرض إعلانات باستخدام منصات تحقيق الربح مثل AdMob وAppLovin
وهو مصدر ironSource. لقياس أرباح الإعلانات، عليك تسجيل
ad_impression
أحداث
كلما شاهد المستخدم إعلانًا في تطبيقك. تحتوي هذه الأحداث على
التفاصيل، مثل منصّة الإعلان والمصدر والعملة والقيمة.
AdMob
في حال استخدام منصة "AdMob"،
ربط تطبيق "AdMob" بمنصّة Firebase وAnalytics
لتفعيل القياس التلقائي لأرباح الإعلانات حزمة تطوير البرامج (SDK) لمنصّة Firebase
يسجِّل "Google Analytics" حدث ad_impression
تلقائيًا متى شئت
يشاهد المستخدمون مرة ظهور للإعلان
المنصات الأخرى لتحقيق الربح من الإعلانات
توفِّر المنصات، مثل AppLovin وironSource بيانات الأرباح على مستوى مرّات الظهور.
الذي يمكنك استخدامه بعد ذلك لتسجيل Google Analytics
ad_impression
أحداث.
تعرض الأقسام التالية أمثلة على تنفيذ بعض الإعلانات المختلفة. منصات تحقيق الربح
AppLovin
Swift
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
- (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
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
- (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 Ads" بمعالجة
ad_impression
، تأكَّد من تضمين
المَعلمتَين currency
وvalue
(على النحو الموضّح أدناه). كلاهما
يجب أن تكون المعاملات دقيقة قدر الإمكان لمنع الإفراط في التقييم أو
تقييم المستخدمين.
مَعلمة العملة
المَعلمة currency
(iOS+
| نظام التشغيل Android
| الانسجام)
كسلسلة مكونة من ثلاثة أحرف
ISO_4217
التنسيق (مثلاً، "USD"
). تتجاهل بعض منصات تحقيق الربح من الإعلانات العملة
مما قد يتطلب منك ترميزًا ثابتًا للمعلمة.
مَعلمة القيمة
المَعلمة value
(iOS+
| نظام التشغيل Android
| الانسجام)
باستخدام نقطة كفاصل عشري. قد تحتاج إلى تحويل
القيم الواردة من بعض المنصات لتتناسب مع التنسيق المطلوب أعلاه. بعض الإشعارات
تُترجم الأنظمة الأساسية التنسيقات الرقمية وتستخدم الفواصل كفواصل عشرية. ضِمن
في بعض الحالات، قد لا ترسل المنصة أي قيمة على الإطلاق.
بالإضافة إلى ذلك، يجب أن تكون القيمة من نوع عددي، مثل مزدوج أو طويل.
على سبيل المثال، 1000.01
و0.001
و1.00
جميعها
صالحة
التحقق
تقدّم Google Analytics ميزات متعدّدة للتحقّق من صحة عملية التنفيذ. طوال دورة التطوير.
DebugView
عند اختبار التنفيذ لأول مرة، استخدم DebugView للاطّلاع على بياناتad_impression
التجريبية في وحدة التحكم. عند اختيار حدث "ad_impression
"، يمكنك مراجعة المَعلمات التي ترسلها في لوحة المَعلمات (على الجانب الأيسر) من الشاشة). يساعدك هذا في التأكد من أنه يتم نشر المعلومات الصحيحة ومعالجتها.الوقت الفعلي
بعد نشر التطبيق، استخدِم Google Analytics تقرير "الوقت الفعلي" للتأكّد من سير عملية التنفيذ بشكل صحيح في تقرير "الوقت الفعلي" عرض بطاقة عدد الأحداث حسب اسم الحدث واختيار ad_impression للاطّلاع على تفاصيل الحدث والمعلمة خلال آخر 30 دقيقة.BigQuery
استخدام التصدير إلى BigQuery لاستخراج عيّنة من يوم أو أكثر من أحداثad_impression
استخدام هذه المستخرَجة عينة للبحث عن المشاكل، مثل صفر أو عدم تعيين قيم، وتطبيق الإصلاحات إلى الرمز البرمجي في حال حدوث أي حالات استخدام لم تتم معالجتها.
الخطوات التالية
انتقِل إلى لوحة بيانات Analytics في وحدة تحكّم Firebase أو في حسابك المرتبط السمة "Analytics" في وحدة تحكّم Analytics. تتم مراعاة أرباح الإعلانات إلى مقاييس، مثل متوسط الأرباح من كل مستخدم (ARPU) والقيمة الدائمة القيمة (LTV).