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:
Menganalisis tindakan pengguna yang berkontribusi pada pendapatan iklan yang dihasilkan oleh aplikasi Anda.
Menjalankan eksperimen menggunakan Firebase A/B Testing untuk menemukan fitur yang mendorong peningkatan pendapatan iklan aplikasi, atau mempersonalisasi pengalaman iklan menggunakan personalisasi Remote Config.
Membuat audience pengguna dan menyesuaikan pengalaman pengguna menggunakan Firebase Remote Config berdasarkan level pendapatan iklan.
Sebelum memulai
Jika Anda belum melakukannya, pastikan untuk menyelesaikan tugas-tugas berikut:
Siapkan project dan aplikasi Anda seperti yang dijelaskan dalam artikel Memulai Analytics.
Pastikan Anda telah menautkan project Firebase ke akun Google Analytics.
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
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
- (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
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
- (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.
DebugView
Saat pertama kali menguji penerapan, gunakan DebugView untuk melihat dataad_impression
pengujian Anda di konsol. Saat memilih peristiwaad_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.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.BigQuery
Gunakan BigQuery Export untuk mengekstrak contoh satu atau beberapa hari dari peristiwaad_impression
. 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 Anda di Firebase console atau di properti Analytics tertaut di konsol Analytics. Pendapatan iklan diperhitungkan dalam metrik, seperti Pendapatan Rata-Rata Per Pengguna (ARPU) dan Nilai Umur (LTV).