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