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

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

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

قبل از اینکه شروع کنی

اگر هنوز این کار را نکرده‌اید، حتماً کارهای زیر را انجام دهید:

  1. پروژه و برنامه خود را مطابق آنچه در «شروع با Analytics توضیح داده شده است، تنظیم کنید.

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

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

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

اپ‌لوین

سویفت

توجه: این محصول 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,
      ])
  }
}

هدف-سی

توجه: این محصول 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

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,
    ])
}

هدف-سی

توجه: این محصول 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

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

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

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

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

مراحل بعدی

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