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

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

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

قبل از شروع

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

  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) باید بااستفاده از نقطه به‌عنوان جداکننده اعشاری ارسال شود. ممکن است لازم باشد مقادیر دریافتی از برخی پلاتفرم‌ها را تبدیل کنید تا با قالب موردنیاز در بالا مطابقت داشته باشد. برخی‌از پلاتفرم‌ها قالب‌های عددی را بومی‌سازی می‌کنند و از ویرگول به‌عنوان جداکننده اعشار استفاده می‌کنند. در برخی موارد، ممکن است پلاتفرم اصلاً مقداری ارسال نکند.

علاوه‌براین، مقدار باید از نوع عددی مثل عدد اعشاری یا عدد صحیح بزرگ باشد. برای مثال، 1000.01، 0.001، و 1.00 همه معتبر هستند

اعتبارسنجی

‫Google Analytics ویژگی‌های متعددی برای اعتبارسنجی پیاده‌سازی شما درطول چرخه توسعه ارائه می‌دهد.

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

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

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

مراحل بعدی

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