اندازهگیری منابع درآمد به شما کمک میکند ارزش طول عمر کاربران را درک کنید و کسبوکار برنامهتان را رشد دهید. این راهنما نحوه راهاندازی اندازهگیری درآمد آگهی را برای پلاتفرم شما نشان میدهد.
پساز راهاندازی اندازهگیری درآمد آگهی، میتوانید هریک از موارد زیر را انجام دهید:
کنشهای کاربری را که به درآمد آگهی تولیدشده توسط برنامهتان کمک میکند تجزیهوتحلیل کنید.
بااستفاده از Firebase A/B Testing آزمایش اجرا کنید تا ببینید کدام ویژگیها باعث بهبود درآمد آگهی برنامه شما میشود، یا بااستفاده از Remote Config شخصیسازی، تجربههای آگهی را شخصیسازی کنید.
بااستفاده از Firebase Remote Config براساس سطوح درآمد آگهی، مخاطبان کاربر ایجاد کنید و تجربههای کاربر را سفارشیسازی کنید.
قبل از شروع
اگر قبلاً این کار را نکردهاید، حتماً تکالیف زیر را تکمیل کنید:
پروژه و برنامهتان را همانطور که در شروع کار با Analytics توضیح داده شده است راهاندازی کنید.
مطمئن شوید که پروژه Firebase خود را به حساب Google Analytics پیوند دادهاید.
مطمئن شوید که کیت توسعه نرمافزار Android نسخه ۱۷.۶.۰ یا بالاتر یا کیت توسعه نرمافزار پلاتفرمهای Apple نسخه ۶.۳۴.۰ یا بالاتر را در برنامهتان گنجاندهاید.
پیادهسازی
میتوانید از Google Analytics برای اندازهگیری درآمد آگهی تولیدشده از
نمایش آگهی با پلاتفرمهای درآمدزایی، مثل AdMob، AppLovin، و
ironSource استفاده کنید. برای اندازهگیری درآمد آگهی، باید
ad_impression رویدادها
را هر زمان که کاربرتان در برنامهتان آگهی میبیند ثبت کنید. این رویدادها حاوی
جزئیاتی مثل پلاتفرم آگهی، منبع، واحد پول، و مقدار است.
AdMob
اگر از پلاتفرم AdMob استفاده میکنید،
برنامه AdMob خود را به Firebase و Analytics پیوند دهید
تا اندازهگیری خودکار درآمد آگهی را فعال کنید. «کیت توسعه نرمافزار 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
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)
باید بااستفاده از نقطه بهعنوان جداکننده اعشاری ارسال شود. ممکن است لازم باشد مقادیر دریافتی از برخی پلاتفرمها را تبدیل کنید تا با قالب موردنیاز در بالا مطابقت داشته باشد. برخیاز
پلاتفرمها قالبهای عددی را بومیسازی میکنند و از ویرگول بهعنوان جداکننده اعشار استفاده میکنند. در
برخی موارد، ممکن است پلاتفرم اصلاً مقداری ارسال نکند.
علاوهبراین، مقدار باید از نوع عددی مثل عدد اعشاری یا عدد صحیح بزرگ باشد.
برای مثال، 1000.01، 0.001، و 1.00 همه
معتبر هستند
اعتبارسنجی
Google Analytics ویژگیهای متعددی برای اعتبارسنجی پیادهسازی شما درطول چرخه توسعه ارائه میدهد.
DebugView
وقتی برای اولینبار پیادهسازیتان را آزمایش میکنید، از DebugView برای دیدن دادههای آزمایشیad_impressionدر کنسول استفاده کنید. وقتی رویدادad_impressionرا انتخاب میکنید، میتوانید پارامترهایی را که در پانل پارامترها (در سمت راست صفحهنمایش) ارسال میکنید مرور کنید. این کار به شما کمک میکند تأیید کنید که اطلاعات صحیح درحال پردازش است.زمان واقعی
پساز استقرار برنامه، از Google Analytics گزارش «زمان واقعی» برای تأیید اینکه پیادهسازی بهدرستی کار میکند استفاده کنید. در گزارش «بلادرنگ»، کارت تعداد رویداد براساس نام رویداد را ببینید و ad_impression را انتخاب کنید تا جزئیات رویداد و پارامتر را برای ۳۰ دقیقه گذشته ببینید.BigQuery
برای استخراج نمونهای از رویدادهایad_impressionدر یک یا چند روز، از BigQuery صادر کردن استفاده کنید. از این نمونه استخراجشده برای یافتن مشکلات، مانند مقادیر صفر یا تنظیمنشده، استفاده کنید و برای هریک از موارد استفاده رسیدگینشده، اصلاحات را روی کدتان اعمال کنید.
مراحل بعدی
به داشبورد Analytics در کنسول Firebase یا در دارایی پیوندشده Analytics در کنسول Analytics مراجعه کنید. درآمد آگهی در سنجههایی مانند «میانگین درآمد بهازای هر کاربر» (ARPU) و «ارزش طول عمر» (LTV) لحاظ میشود.