اندازهگیری منابع درآمدتان به شما کمک میکند ارزش طول عمر کاربران خود را درک کنید و کسبوکار برنامهتان را توسعه دهید. این راهنما به شما نشان میدهد که چگونه سنجش درآمد آگهی را برای پلاتفرم خود راهاندازی کنید.
پساز راهاندازی سنجش درآمد آگهی، میتوانید هرکدام از کارهای زیر را انجام دهید:
کنشهای کاربر را که به درآمد آگهی تولیدشده توسط برنامهتان کمک میکند تجزیهوتحلیل کنید.
بااستفاده از 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)
باید بااستفاده از نقطه بهعنوان جداکننده اعشاری ارسال شود. ممکن است لازم باشد مقادیر دریافتی از برخی پلاتفرمها را تغییر دهید تا با قالب الزامی بالا مطابقت داشته باشند. برخی پلاتفرمها قالبهای عددی را بومیسازی میکنند و از ویرگول بهعنوان جداکننده اعشاری استفاده میکنند. در
برخی موارد، ممکن است پلاتفرم اصلاً مقداری ارسال نکند.
علاوهبراین، مقدار باید از نوع عددی باشد، مثلاً double یا long.
برای مثال، 1000.01، 0.001، و 1.00 همگی
معتبر هستند
اعتبارسنجی
Google Analytics ویژگیهای متعددی برای اعتبارسنجی پیادهسازی شما درطول چرخه توسعه ارائه میدهد.
DebugView
هنگام آزمایش اولیه پیادهسازی، از DebugView برای دیدن دادههای آزمایشیad_impressionدر کنسول استفاده کنید. وقتی رویدادad_impressionرا انتخاب میکنید، میتوانید پارامترهایی را که در پانل پارامترها (در سمت راست صفحه) ارسال میکنید مرور کنید. این کار به شما کمک میکند تأیید کنید که اطلاعات صحیح درحال پردازش است.بلادرنگ
پساز اینکه برنامهتان را مستقر کردید، از Google Analytics گزارش بلادرنگ استفاده کنید تا مطمئن شوید پیادهسازی بهدرستی کار میکند. در گزارش «بلادرنگ»، کارت تعداد رویداد براساس نام رویداد را مشاهده کنید و ad_impression را انتخاب کنید تا جزئیات رویداد و پارامتر را برای ۳۰ دقیقه گذشته ببینید.BigQuery
از صادر کردن BigQuery برای استخراج نمونهای از یک یا چند روز رویدادهایad_impressionاستفاده کنید. از این نمونه استخراجشده برای جستجوی مشکلات، مانند مقادیر صفر یا تنظیمنشده، استفاده کنید و برای هر مورد استفاده مدیریتنشده، اصلاحات را در کد خود اعمال کنید.
مراحل بعدی
به داشبورد Analytics در کنسول Firebase یا در دارایی Analytics پیوندشده در کنسول Analytics بروید. درآمد آگهی در سنجههایی مثل «میانگین درآمد بهازای هر کاربر» (ARPU) و «ارزش طول عمر» (LTV) لحاظ میشود.