Misurare le fonti di guadagno ti aiuta a comprendere il valore della vita dei tuoi utenti e a far crescere il business delle tue app. Questa guida ti mostra come impostare la misurazione delle entrate pubblicitarie per la tua piattaforma.
Dopo aver impostato la misurazione delle entrate pubblicitarie, puoi eseguire una delle seguenti operazioni:
Analizza le azioni degli utenti che contribuiscono alle entrate pubblicitarie generate dalla tua app.
Esegui esperimenti utilizzando Firebase A/B Testing per scoprire quali funzionalità migliorano le entrate pubblicitarie della tua app oppure personalizza le esperienze pubblicitarie utilizzando la personalizzazione Remote Config .
Crea segmenti di pubblico e personalizza le esperienze degli utenti utilizzando Firebase Remote Config in base ai livelli di entrate pubblicitarie.
Prima di iniziare
Se non l'hai già fatto, assicurati di completare le seguenti attività:
Configura il tuo progetto e la tua app come descritto in Iniziare con Analytics .
Assicurati di aver collegato il tuo progetto Firebase a un account Google Analytics.
Assicurati di aver incluso nella tua app l'SDK Android v17.6.0+ o l'SDK delle piattaforme Apple v6.34.0+.
Implementazione
Puoi utilizzare Google Analytics per misurare le entrate pubblicitarie generate dalla visualizzazione di annunci con piattaforme di monetizzazione, come AdMob, AppLovin e ironSource. Per misurare le entrate pubblicitarie, devi registrare gli eventi ad_impression
ogni volta che l'utente vede un annuncio pubblicitario nella tua app. Questi eventi contengono dettagli come la piattaforma pubblicitaria, l'origine, la valuta e il valore.
AdMob
Se utilizzi la piattaforma AdMob, collega la tua app AdMob a Firebase e Analytics per abilitare la misurazione automatica delle entrate pubblicitarie. L'SDK Firebase per Google Analytics registra automaticamente l'evento ad_impression
ogni volta che i tuoi utenti visualizzano un'impressione dell'annuncio.
Altre piattaforme di monetizzazione pubblicitaria
Piattaforme come AppLovin e ironSource forniscono dati sulle entrate a livello di impressione che puoi quindi utilizzare per registrare gli eventi ad_impression
di Google Analytics.
Le sezioni seguenti mostrano esempi di implementazione per alcune diverse piattaforme di monetizzazione degli annunci.
AppLovin
Veloce
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, ]) } }
Obiettivo-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); }
Unità
// 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
Veloce
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, ]) }
Obiettivo-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); } }
Unità
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); } }
Considerazioni sull'implementazione
Per consentire a Google Ads di elaborare la tua ad_impression
, assicurati di includere sia i parametri currency
che quelli del value
(descritti di seguito). Entrambi i parametri dovrebbero essere il più accurati possibile per evitare di sopravvalutare o sottovalutare gli utenti.
Parametro valutario
Il parametro currency
( iOS+ | Android | Unity ) deve essere inviato come stringa in formato ISO_4217 di tre lettere (ad esempio, "USD"
). Alcune piattaforme di monetizzazione degli annunci omettono la valuta, il che potrebbe richiedere la codifica del parametro.
Parametro valore
Il parametro value
( iOS+ | Android | Unity ) deve essere inviato utilizzando un punto come separatore decimale. Potrebbe essere necessario trasformare i valori ricevuti da alcune piattaforme per adattarli al formato richiesto sopra. Alcune piattaforme localizzano i formati numerici e utilizzano le virgole come separatori decimali. In alcuni casi, una piattaforma potrebbe non inviare alcun valore.
Inoltre, il valore deve essere di tipo numerico, ad esempio double o long. Ad esempio, 1000.01
, 0.001
e 1.00
sono tutti validi
Validazione
Google Analytics offre molteplici funzionalità per convalidare la tua implementazione durante l'intero ciclo di sviluppo.
Visualizzazione debug
Quando testi per la prima volta la tua implementazione, utilizza DebugView per visualizzare i dati di testad_impression
nella console. Quando selezioni un eventoad_impression
, puoi rivedere i parametri che stai inviando nel pannello Parametri (sul lato destro dello schermo). Ciò ti aiuta a confermare che vengono elaborate le informazioni corrette.Tempo reale
Dopo aver distribuito la tua app, utilizza il rapporto in tempo reale di Google Analytics per verificare che l'implementazione funzioni correttamente. Nel rapporto in tempo reale, visualizza la scheda Conteggio eventi per nome evento e seleziona ad_impression per visualizzare i dettagli dell'evento e dei parametri negli ultimi 30 minuti.BigQuery
Utilizza l'esportazione BigQuery per estrarre un campione di uno o più giorni di eventiad_impression
. Utilizza questo esempio estratto per cercare problemi, ad esempio valori pari a zero o non impostati, e applicare correzioni al codice per eventuali casi d'uso non gestiti.
Prossimi passi
Visita la dashboard di Analytics nella console Firebase o nella proprietà Analytics collegata nella console Analytics. Le entrate pubblicitarie vengono prese in considerazione in parametri quali le entrate medie per utente (ARPU) e il Lifetime Value (LTV).