اندازهگیری منابع درآمدتان به شما کمک میکند ارزش مادام العمر کاربران خود را درک کنید و کسبوکار اپلیکیشن خود را توسعه دهید. این راهنما به شما نشان می دهد که چگونه اندازه گیری درآمد تبلیغات را برای پلتفرم خود تنظیم کنید.
بعد از اینکه اندازهگیری درآمد تبلیغات را تنظیم کردید، میتوانید یکی از موارد زیر را انجام دهید:
اقدامات کاربر را که به درآمد تبلیغاتی ایجاد شده توسط برنامه شما کمک می کند، تجزیه و تحلیل کنید.
آزمایشها را با استفاده از Firebase A/B Testing اجرا کنید تا ببینید چه ویژگیهایی باعث بهبود درآمد تبلیغات برنامه شما میشوند، یا تجربههای تبلیغاتی را با استفاده از شخصیسازی Remote Config شخصیسازی کنید.
با استفاده از Firebase Remote Config بر اساس سطوح درآمد تبلیغات، مخاطبان کاربر ایجاد کنید و تجارب کاربر را تنظیم کنید .
قبل از شروع
اگر قبلاً این کار را نکردهاید، حتماً کارهای زیر را تکمیل کنید:
پروژه و برنامه خود را همانطور که در Get Started with Analytics توضیح داده شده است، تنظیم کنید.
مطمئن شوید که پروژه Firebase خود را به یک حساب Google 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 دادههای درآمدی در سطح نمایش را ارائه میکنند که میتوانید از آنها برای ثبت رویدادهای Google Analytics ad_impression
استفاده کنید.
بخشهای زیر نمونههای پیادهسازی چند پلتفرم مختلف کسب درآمد از تبلیغات را نشان میدهند.
AppLovin
سویفت
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, ]) } }
هدف-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); }
وحدت
// 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, ]) }
هدف-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); } }
وحدت
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 Realtime استفاده کنید تا تأیید کنید که پیاده سازی به درستی کار می کند. در گزارش بلادرنگ، تعداد رویداد را با کارت نام رویداد مشاهده کنید و ad_impression را انتخاب کنید تا جزئیات رویداد و پارامتر را برای 30 دقیقه آخر ببینید.BigQuery
از صادرات BigQuery برای استخراج نمونهای از یک یا چند روز رویدادad_impression
استفاده کنید. از این نمونه استخراج شده برای جستجوی مسائلی مانند صفر یا تنظیم نکردن مقادیر استفاده کنید و برای موارد استفاده غیرقابل کنترل در کد خود اصلاحاتی اعمال کنید.
مراحل بعدی
از داشبورد Analytics خود در کنسول Firebase یا در ویژگی Analytics پیوندی خود در کنسول Analytics دیدن کنید. درآمد تبلیغات در معیارهایی مانند میانگین درآمد به ازای هر کاربر (ARPU) و ارزش مادام العمر (LTV) لحاظ می شود.