Pomiar przychodów z reklam

Pomiar źródeł przychodów pomaga poznać wartość użytkowników od początku śledzenia i rozwijać działalność związaną z aplikacjami. Z tego przewodnika dowiesz się, jak skonfigurować pomiar przychodów z reklam na swojej platformie.

Po skonfigurowaniu pomiaru przychodów z reklam możesz:

Zanim zaczniesz

Jeśli jeszcze nie masz tych elementów, wykonaj te czynności:

  1. Skonfiguruj projekt i aplikację zgodnie z opisem w artykule Pierwsze kroki z Analytics.

  2. Upewnij się, że projekt w Firebase jest połączony z kontem Google Analytics.

  3. Upewnij się, że Twoja aplikacja zawiera pakiet Android SDK w wersji 17.6.0 lub nowszej albo pakiet Apple platforms SDK w wersji 6.34.0 lub nowszej.

Implementacja

Możesz używać Google Analytics do mierzenia przychodów z reklam generowanych przez wyświetlanie reklam displayowych na platformach do generowania przychodów, takich jak AdMob, AppLovin i ironSource. Aby mierzyć przychody z reklam, musisz rejestrować zdarzenia ad_impression za każdym razem, gdy użytkownik zobaczy reklamę w Twojej aplikacji. Te zdarzenia zawierają szczegółowe informacje, takie jak platforma reklamowa, źródło, waluta i wartość.

AdMob

Jeśli korzystasz z platformy AdMob, połącz swoją aplikację AdMob z Firebase i Analytics, aby włączyć automatyczny pomiar przychodów z reklam. Pakiet SDK Firebase dla Google Analytics automatycznie rejestruje zdarzenie ad_impression, gdy użytkownicy zobaczą wyświetlenie reklamy.

Inne platformy do generowania przychodów z reklam

Platformy takie jak AppLovin i ironSource udostępniają dane o przychodach na poziomie wyświetlenia, których możesz używać do rejestrowania zdarzeń Google Analytics ad_impression.

W sekcjach poniżej znajdziesz przykłady implementacji na kilku różnych platformach do generowania przychodów z reklam.

AppLovin

Swift

Uwaga: ta usługa Firebase nie jest dostępna w przypadku systemu watchOS.
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

Uwaga: ta usługa Firebase nie jest dostępna w przypadku systemu watchOS.
- (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

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

Uwaga: ta usługa Firebase nie jest dostępna w przypadku systemu watchOS.
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

Uwaga: ta usługa Firebase nie jest dostępna w przypadku systemu watchOS.
- (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

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

Uwagi o wdrażaniu

Aby umożliwić usłudze Google Ads przetwarzanie ad_impression, musisz uwzględnić parametry currency i value (opisane poniżej). Oba parametry powinny być jak najdokładniejsze, aby uniknąć zawyżania lub zaniżania wartości użytkowników.

Parametr waluty

Parametr currency (iOS+ | Android | Unity) powinien być wysyłany jako ciąg znaków w 3-literowym formacie ISO_4217 (np. "USD"). Niektóre platformy do generowania przychodów z reklam pomijają walutę, co może wymagać zakodowania parametru na stałe.

Parametr wartości

Parametr value (iOS+ | Android | Unity) powinien być wysyłany z kropką jako separatorem dziesiętnym. Może być konieczne przekształcenie wartości otrzymanych z niektórych platform, aby pasowały do wymaganego formatu. Niektóre platformy lokalizują formaty liczbowe i używają przecinków jako separatorów dziesiętnych. W niektórych przypadkach platforma może w ogóle nie wysyłać wartości.

Dodatkowo wartość powinna być liczbą, np. typu double lub long. Na przykład 1000.01, 0.001 i 1.00 są prawidłowe.

Walidacja

Google Analytics oferuje wiele funkcji do sprawdzania poprawności implementacji w trakcie cyklu programowania.

  1. DebugView
    Podczas pierwszego testowania implementacji użyj DebugView, aby wyświetlić dane testowe ad_impression w konsoli. Gdy wybierzesz zdarzenie ad_impression, możesz sprawdzić parametry, które wysyłasz, w panelu Parametry (po prawej stronie ekranu). Dzięki temu możesz sprawdzić, czy przetwarzane są prawidłowe informacje.

  2. Czas rzeczywisty
    Po wdrożeniu aplikacji użyj Google Analytics raportu Czas rzeczywisty, aby sprawdzić, czy implementacja działa prawidłowo. W raporcie Czas rzeczywisty wyświetl kartę Liczba zdarzeń według nazwy zdarzenia i wybierz ad_impression, aby zobaczyć szczegóły zdarzenia i parametrów z ostatnich 30 minut.

  3. BigQuery
    Użyj eksportu BigQuery, aby wyodrębnić próbkę zdarzeń ad_impression z co najmniej 1 dnia. Użyj tej wyodrębnionej próbki, aby poszukać problemów, takich jak wartości zerowe lub nieustawione, i zastosować poprawki w kodzie w przypadku nieobsługiwanych przypadków użycia.

Dalsze kroki

Otwórz panel Analytics w konsoli Firebase lub w połączonej usłudze Analytics w konsoli Analytics. Przychody z reklam są uwzględniane w danych, takich jak średnie przychody na użytkownika (ARPU) i wartość od początku śledzenia (LTV).