اندازه‌گیری درآمد آگهی

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

پس‌از راه‌اندازی سنجش درآمد آگهی، می‌توانید هرکدام از کارهای زیر را انجام دهید:

قبل از شروع

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

  1. پروژه و برنامه‌تان را همان‌طور که در شروع به کار با Analytics شرح داده شده است راه‌اندازی کنید.

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

  3. مطمئن شوید که کیت توسعه نرم‌افزار 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

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

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

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

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

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

  2. بلادرنگ
    پس‌از اینکه برنامه‌تان را مستقر کردید، از Google Analytics گزارش بلادرنگ استفاده کنید تا مطمئن شوید پیاده‌سازی به‌درستی کار می‌کند. در گزارش «بلادرنگ»، کارت تعداد رویداد براساس نام رویداد را مشاهده کنید و ad_impression را انتخاب کنید تا جزئیات رویداد و پارامتر را برای ۳۰ دقیقه گذشته ببینید.

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

مراحل بعدی

به داشبورد Analytics در کنسول Firebase یا در دارایی Analytics پیوندشده در کنسول Analytics بروید. درآمد آگهی در سنجه‌هایی مثل «میانگین درآمد به‌ازای هر کاربر» (ARPU) و «ارزش طول عمر» (LTV) لحاظ می‌شود.