اندازه گیری درآمد تبلیغات

اندازه‌گیری منابع درآمدتان به شما کمک می‌کند ارزش مادام العمر کاربران خود را درک کنید و کسب‌وکار اپلیکیشن خود را توسعه دهید. این راهنما به شما نشان می دهد که چگونه اندازه گیری درآمد تبلیغات را برای پلتفرم خود تنظیم کنید.

بعد از اینکه اندازه‌گیری درآمد تبلیغات را تنظیم کردید، می‌توانید یکی از موارد زیر را انجام دهید:

قبل از شروع

اگر قبلاً این کار را نکرده‌اید، حتماً کارهای زیر را تکمیل کنید:

  1. پروژه و برنامه خود را همانطور که در Get Started with Analytics توضیح داده شده است، تنظیم کنید.

  2. مطمئن شوید که پروژه Firebase خود را به یک حساب Google Analytics مرتبط کرده اید.

  3. مطمئن شوید که 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

سویفت

توجه: این محصول Firebase در هدف macOS در دسترس نیست.
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

توجه: این محصول Firebase در هدف macOS در دسترس نیست.
- (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);
}

منبع آهن

سویفت

توجه: این محصول Firebase در هدف macOS در دسترس نیست.
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

توجه: این محصول Firebase در هدف macOS در دسترس نیست.
- (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 چندین ویژگی را برای اعتبارسنجی پیاده سازی شما در طول چرخه توسعه ارائه می دهد.

  1. DebugView
    هنگامی که برای اولین بار پیاده سازی خود را آزمایش می کنید، از DebugView برای مشاهده داده های ad_impression آزمایشی خود در کنسول استفاده کنید. وقتی یک رویداد ad_impression را انتخاب می‌کنید، می‌توانید پارامترهایی را که می‌فرستید در پانل پارامترها (در سمت راست صفحه) مرور کنید. این به شما کمک می کند تا تأیید کنید که اطلاعات صحیح در حال پردازش است.

  2. بلادرنگ
    هنگامی که برنامه خود را اجرا کردید، از گزارش Google Analytics Realtime استفاده کنید تا تأیید کنید که پیاده سازی به درستی کار می کند. در گزارش بلادرنگ، تعداد رویداد را با کارت نام رویداد مشاهده کنید و ad_impression را انتخاب کنید تا جزئیات رویداد و پارامتر را برای 30 دقیقه آخر ببینید.

  3. BigQuery
    از صادرات BigQuery برای استخراج نمونه‌ای از یک یا چند روز رویداد ad_impression استفاده کنید. از این نمونه استخراج شده برای جستجوی مسائلی مانند صفر یا تنظیم نکردن مقادیر استفاده کنید و برای موارد استفاده غیرقابل کنترل در کد خود اصلاحاتی اعمال کنید.

مراحل بعدی

از داشبورد Analytics خود در کنسول Firebase یا در ویژگی Analytics پیوندی خود در کنسول Analytics دیدن کنید. درآمد تبلیغات در معیارهایی مانند میانگین درآمد به ازای هر کاربر (ARPU) و ارزش مادام العمر (LTV) لحاظ می شو��.