Mesurer les revenus publicitaires

Mesurer vos sources de revenus vous aide à comprendre la valeur vie client de vos utilisateurs et à développer votre activité liée à votre application. Ce guide vous explique comment configurer la mesure des revenus publicitaires pour votre plate-forme.

Une fois la mesure des revenus publicitaires configurée, vous pouvez effectuer les opérations suivantes:

Avant de commencer

Si ce n'est pas déjà fait, assurez-vous d'effectuer les tâches suivantes:

  1. Configurez votre projet et votre application comme décrit dans la section Premiers pas avec Analytics.

  2. Assurez-vous d'avoir associé votre projet Firebase à un compte Google Analytics.

  3. Assurez-vous d'avoir inclus dans votre application le SDK Android 17.6.0 ou version ultérieure ou le SDK des plates-formes Apple 6.34.0 ou version ultérieure.

Implémentation

Vous pouvez utiliser Google Analytics pour mesurer les revenus publicitaires générés par la diffusion d'annonces avec des plates-formes de monétisation telles que AdMob, AppLovin et ironSource. Pour mesurer les revenus publicitaires, vous devez enregistrer des événements ad_impression chaque fois qu'un utilisateur voit une annonce dans votre application. Ces événements contiennent des informations telles que la plate-forme publicitaire, la source, la devise et la valeur.

AdMob

Si vous utilisez la plate-forme AdMob, associez votre application AdMob à Firebase et à Analytics pour activer la mesure automatique des revenus publicitaires. Le SDK Firebase pour Google Analytics enregistre automatiquement l'événement ad_impression chaque fois que vos utilisateurs voient une impression d'annonce.

Autres plates-formes de monétisation des annonces

Des plates-formes telles qu'AppLovin et ironSource fournissent des données sur les revenus au niveau des impressions que vous pouvez ensuite utiliser pour consigner les événements Google Analytics ad_impression.

Les sections suivantes présentent des exemples d'implémentation pour plusieurs plates-formes de monétisation des annonces.

AppLovin

Swift

Remarque:Ce produit Firebase n'est pas disponible sur la cible 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

Remarque:Ce produit Firebase n'est pas disponible sur la cible 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

Remarque:Ce produit Firebase n'est pas disponible sur la cible 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

Remarque:Ce produit Firebase n'est pas disponible sur la cible 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);
  }
}

Observations concernant la mise en œuvre

Pour permettre à Google Ads de traiter votre ad_impression, veillez à inclure à la fois les paramètres currency et value (décrits ci-dessous). Les deux paramètres doivent être aussi précis que possible pour éviter de surestimer ou de sous-estimer les utilisateurs.

Paramètre de devise

Le paramètre currency (iOS+ | Android | Unity) doit être envoyé sous forme de chaîne au format ISO_4217 à trois lettres (par exemple, "USD"). Certaines plates-formes de monétisation d'annonces omettent la devise, ce qui peut vous obliger à coder en dur le paramètre.

Paramètre "value"

Le paramètre value (iOS+ | Android | Unity) doit être envoyé à l'aide d'un point comme séparateur décimal. Vous devrez peut-être transformer les valeurs reçues de certaines plates-formes pour les adapter au format requis ci-dessus. Certaines plates-formes localisent les formats numériques et utilisent des virgules comme séparateurs décimaux. Dans certains cas, une plate-forme peut ne pas envoyer de valeur du tout.

De plus, la valeur doit être de type numérique, comme un double ou un long. Par exemple, 1000.01, 0.001 et 1.00 sont tous valides.

Validation

Google Analytics propose plusieurs fonctionnalités pour valider votre implémentation tout au long du cycle de développement.

  1. DebugView
    Lorsque vous testez votre implémentation pour la première fois, utilisez DebugView pour afficher vos données ad_impression de test dans la console. Lorsque vous sélectionnez un événement ad_impression, vous pouvez consulter les paramètres que vous envoyez dans le panneau Paramètres (sur le côté droit de l'écran). Cela vous permet de vérifier que les informations correctes sont traitées.

  2. Temps réel
    Une fois que vous avez déployé votre application, utilisez le Google Analytics rapport "Temps réel" pour vérifier que l'implémentation fonctionne correctement. Dans le rapport "Temps réel", accédez à la fiche Nombre d'événements par nom d'événement, puis sélectionnez ad_impression pour afficher les détails de l'événement et des paramètres au cours des 30 dernières minutes.

  3. BigQuery
    Utilisez l'exportation BigQuery pour extraire un échantillon d'un ou de plusieurs jours d'événements ad_impression. Utilisez cet exemple extrait pour rechercher des problèmes, tels que des valeurs nulles ou non définies, et appliquer des correctifs à votre code pour tous les cas d'utilisation non gérés.

Étapes suivantes

Accédez à votre tableau de bord Analytics dans la console Firebase ou dans votre propriété Analytics associée dans la console Analytics. Les revenus publicitaires sont pris en compte dans des métriques telles que le revenu moyen par utilisateur (ARPU) et la valeur vie (LTV).