Reklam gelirini ölçme

Gelir kaynaklarınızı ölçmek, kullanıcılarınızın yaşam boyu değerini anlamanıza ve uygulama işinizi büyütmenize yardımcı olur. Bu kılavuzda, platformunuz için reklam geliri ölçümünü nasıl ayarlayacağınızı görebilirsiniz.

Reklam geliri ölçümünü ayarladıktan sonra aşağıdakilerden birini yapabilirsiniz:

Başlamadan önce

Henüz yapmadıysanız aşağıdaki görevleri tamamladığınızdan emin olun:

  1. Projenizi ve uygulamanızı Analytics'i Kullanmaya Başlama bölümünde açıklandığı şekilde ayarlayın.

  2. Firebase projenizi bir Google Analytics hesabına bağladığınızdan emin olun.

  3. Uygulamanıza Android SDK 17.6.0+ veya Apple platformları SDK v6.34.0+ sürümünü eklediğinizden emin olun.

Kullanım

AdMob, AppLovin ve ironSource gibi para kazanma platformlarına sahip reklamlardan elde edilen reklam gelirini ölçmek için Google Analytics'i kullanabilirsiniz. Reklam gelirini ölçmek için kullanıcı uygulamanızda bir reklam gördüğünde ad_impression etkinliklerini kaydetmeniz gerekir. Bu etkinlikler reklam platformu, kaynak, para birimi ve değer gibi ayrıntıları içerir.

AdMob

AdMob platformunu kullanıyorsanız reklam gelirinin otomatik ölçümünü etkinleştirmek için AdMob uygulamanızı Firebase ve Analytics'e bağlayın. Google Analytics için Firebase SDK'sı, kullanıcılarınız bir reklam gösterimi gördüğünde otomatik olarak ad_impression etkinliğini günlüğe kaydeder.

Reklamdan para kazanmayla ilgili diğer platformlar

AppLovin ve ironSource gibi platformlar, daha sonra Google Analytics ad_impression etkinliklerini günlüğe kaydetmek için kullanabileceğiniz gösterim düzeyinde gelir verileri sağlar.

Aşağıdaki bölümlerde birkaç farklı reklamdan para kazanma platformundaki uygulama örnekleri gösterilmektedir.

AppLovin

Swift

Not: Bu Firebase ürünü, macOS hedefinde kullanılamıyor.
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

Not: Bu Firebase ürünü, macOS hedefinde kullanılamıyor.
- (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);
}

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);
}

DemirKaynak

Swift

Not: Bu Firebase ürünü, macOS hedefinde kullanılamıyor.
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

Not: Bu Firebase ürünü, macOS hedefinde kullanılamıyor.
- (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);
    }
}

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);
  }
}

Uygulamada dikkat edilmesi gereken hususlar

Google Ads'in ad_impression öğenizi işlemesine izin vermek için currency ve value parametrelerini (aşağıda açıklanmıştır) dahil ettiğinizden emin olun. Kullanıcılara gereğinden fazla veya az değer atfedilmesini önlemek için her iki parametre de mümkün olduğunca doğru olmalıdır.

Para birimi parametresi

currency parametresi (iOS+ | Android | Unity) üç harfli ISO_4217 biçiminde (örneğin "USD") dize olarak gönderilmelidir (örneğin, "USD"). Bazı reklam para kazanma platformları para birimi içermez. Bu nedenle parametreyi kod olarak kodlamanız gerekebilir.

Değer parametresi

value parametresi (iOS+ | Android | Unity) ondalık ayırıcı olarak nokta kullanılarak gönderilmelidir. Bazı platformlardan alınan değerleri, yukarıdaki gerekli biçime uyacak şekilde dönüştürmeniz gerekebilir. Bazı platformlar sayısal biçimleri yerelleştirir ve ondalık ayırıcı olarak virgül kullanır. Bazı durumlarda platform hiç değer göndermeyebilir.

Ayrıca, değer çift veya uzun gibi sayısal bir tür olmalıdır. Örneğin 1000.01, 0.001 ve 1.00 değerlerinin tümü geçerlidir

Doğrulama

Google Analytics, geliştirme döngüsü boyunca uygulamanızı doğrulamak için birden çok özellik sunar.

  1. DebugView
    Uygulamanızı ilk test ederken, test ad_impression verilerinizi konsolda görmek için DebugView'u kullanın. Bir ad_impression etkinliği seçtiğinizde, gönderdiğiniz parametreleri Parametreler panelinde (ekranın sağ tarafında) inceleyebilirsiniz. Bu, doğru bilgilerin işlenmekte olduğunu doğrulamanıza yardımcı olur.

  2. Gerçek zamanlı
    Uygulamanızı dağıttıktan sonra, uygulamanın doğru şekilde çalıştığını onaylamak için Google Analytics gerçek zamanlı raporu kullanın. Gerçek zamanlı raporda, son 30 dakikaya ait etkinlik ve parametre ayrıntılarını görmek için Etkinlik adına göre etkinlik sayısı kartını görüntüleyin ve ad_impression'ı seçin.

  3. BigQuery
    Bir veya daha fazla günlük ad_impression etkinliklerinin bir örneğini ayıklamak için BigQuery Export'u kullanın. Bu ayıklanmış örneği kullanarak "sıfır" veya "ayarlanmadı" gibi sorunları arayabilir ve işlenmemiş kullanım alanları için kodunuza düzeltmeler uygulayabilirsiniz.

Sonraki adımlar

Firebase konsolunda veya Analytics konsolundaki bağlı Analytics mülkünüzde Analytics kontrol panelinizi ziyaret edin. Reklam geliri, Kullanıcı Başına Ortalama Gelir (ARPU) ve Yaşam Boyu Değer (YBD) gibi metriklere dahil edilir.