Mengukur pendapatan iklan

Dengan mengukur sumber pendapatan, Anda dapat memahami nilai umur pengguna dan mengembangkan bisnis aplikasi Anda. Panduan ini menunjukkan cara menyiapkan pengukuran pendapatan iklan untuk platform Anda.

Setelah menyiapkan pengukuran pendapatan iklan, Anda dapat melakukan tindakan berikut:

Sebelum memulai

Jika Anda belum melakukannya, pastikan untuk menyelesaikan tugas-tugas berikut:

  1. Siapkan project dan aplikasi Anda seperti yang dijelaskan dalam artikel Mulai Menggunakan Analytics.

  2. Pastikan Anda telah menautkan project Firebase ke akun Google Analytics.

  3. Pastikan Anda menyertakan Android SDK v17.6.0+ atau SDK platform Apple v6.34.0+ di aplikasi.

Penerapan

Anda dapat menggunakan Google Analytics untuk mengukur pendapatan iklan yang dihasilkan dari menampilkan iklan dengan platform monetisasi, seperti AdMob, AppLovin, dan ironSource. Untuk mengukur pendapatan iklan, Anda harus mencatat peristiwa ad_impression ke dalam log setiap kali pengguna melihat iklan dalam aplikasi Anda. Peristiwa ini berisi detail seperti platform iklan, sumber, mata uang, dan nilai.

AdMob

Jika Anda menggunakan platform AdMob, tautkan aplikasi AdMob Anda ke Firebase dan Analytics untuk mengaktifkan pengukuran otomatis pendapatan iklan. Firebase SDK untuk Google Analytics akan otomatis mencatat peristiwa ad_impression ke dalam log setiap kali pengguna melihat tayangan iklan.

Platform monetisasi iklan lainnya

Beberapa platform seperti AppLovin dan ironSource menyediakan data pendapatan tingkat tayangan yang kemudian dapat Anda gunakan untuk mencatat peristiwa ad_impression Google Analytics ke dalam log.

Bagian berikut menunjukkan contoh implementasi untuk beberapa platform monetisasi iklan yang berbeda.

AppLovin

Swift

Catatan: Produk Firebase ini tidak tersedia di target 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,
      ])
  }
}

Objective-C

Catatan: Produk Firebase ini tidak tersedia di target 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);
}

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

Catatan: Produk Firebase ini tidak tersedia di target 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,
    ])
}

Objective-C

Catatan: Produk Firebase ini tidak tersedia di target 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);
    }
}

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

Pertimbangan penerapan

Agar Google Ads dapat memproses ad_impression Anda, pastikan untuk menyertakan parameter currency dan value (dijelaskan di bawah). Kedua parameter harus seakurat mungkin untuk mencegah penilaian pengguna yang terlalu tinggi atau terlalu rendah.

Parameter mata uang

Parameter currency (iOS+ | Android | Unity) harus dikirim sebagai string dalam format ISO_4217 tiga huruf (misalnya, "USD"). Beberapa platform monetisasi iklan menghilangkan mata uang, sehingga Anda mungkin harus meng-hardcode parameter tersebut.

Parameter nilai

Parameter value (iOS+ | Android | Unity) harus dikirim menggunakan titik sebagai pemisah desimal. Anda mungkin perlu mengubah nilai yang diterima dari beberapa platform agar sesuai dengan format yang diperlukan di atas. Beberapa platform melokalkan format numerik dan menggunakan koma sebagai pemisah desimal. Pada beberapa kasus, platform mungkin tidak mengirimkan nilai sama sekali.

Selain itu, nilai harus berupa jenis numerik seperti double atau long. Misalnya, 1000.01, 0.001, dan 1.00 semuanya valid

Validasi

Google Analytics menawarkan beberapa fitur untuk memvalidasi penerapan selama siklus pengembangan.

  1. DebugView
    Saat pertama kali menguji penerapan, gunakan DebugView untuk melihat data ad_impression pengujian Anda di konsol. Saat memilih peristiwa ad_impression, Anda dapat meninjau parameter yang Anda kirimkan di panel Parameters (di sisi kanan layar). Hal ini membantu Anda mengonfirmasi bahwa informasi yang benar sedang diproses.

  2. Realtime
    Setelah Anda men-deploy aplikasi, gunakan Laporan realtime Google Analytics untuk mengonfirmasi bahwa penerapan berfungsi dengan benar. Dalam laporan Realtime, lihat kartu Event count by Event name, lalu pilih ad_impression untuk melihat detail peristiwa dan parameter selama 30 menit terakhir.

  3. BigQuery
    Gunakan BigQuery Export untuk mengekstrak contoh peristiwa ad_impression dari satu atau beberapa hari. Gunakan contoh yang diekstrak ini untuk mencari masalah, seperti nilai nol atau nilai yang tidak ditetapkan, dan terapkan perbaikan pada kode Anda untuk setiap kasus penggunaan yang tidak tertangani.

Langkah berikutnya

Buka dasbor Analytics di Firebase console atau di properti Analytics tertaut di Analytics console. Pendapatan iklan diperhitungkan dalam metrik, seperti Pendapatan Rata-Rata Per Pengguna (ARPU) dan Nilai Umur (LTV).