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