Mierz przychody z reklam

Pomiar źródeł przychodów pomaga zrozumieć długoterminową wartość użytkowników i rozwijać działalność związaną z aplikacjami. W tym przewodniku dowiesz się, jak skonfigurować pomiar przychodów z reklam na swojej platformie.

Po skonfigurowaniu pomiaru przychodów z reklam możesz wykonać dowolną z następujących czynności:

Zanim zaczniesz

Jeśli jeszcze tego nie zrobiłeś, wykonaj następujące zadania:

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

  2. Upewnij się, że połączyłeś swój projekt Firebase z kontem Google Analytics.

  3. Upewnij się, że w aplikacji znalazłeś zestaw SDK systemu Android w wersji 17.6.0 lub nowszej lub zestaw SDK dla platform Apple w wersji 6.34.0 lub nowszej.

Realizacja

Możesz używać Google Analytics do pomiaru przychodów z reklam generowanych przez wyświetlanie reklam na platformach zarabiania, takich jak AdMob, AppLovin i ironSource. Aby zmierzyć przychody z reklam, musisz rejestrować zdarzenia ad_impression za każdym razem, gdy użytkownik zobaczy reklamę w Twojej aplikacji. Zdarzenia te 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 umożliwić automatyczny pomiar przychodów z reklam. Pakiet SDK Firebase dla Google Analytics automatycznie rejestruje zdarzenie ad_impression za każdym razem, gdy użytkownicy zobaczą wyświetlenie reklamy.

Inne platformy zarabiania na reklamach

Platformy takie jak AppLovin i ironSource dostarczają dane o przychodach na poziomie wyświetleń, które można następnie wykorzystać do rejestrowania zdarzeń ad_impression w Google Analytics.

W poniższych sekcjach przedstawiono przykłady implementacji dla kilku różnych platform zarabiania na reklamach.

AppLovin

Szybki

Uwaga: ten produkt Firebase nie jest dostępny w docelowym systemie 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,
      ])
  }
}

Cel C

Uwaga: ten produkt Firebase nie jest dostępny w docelowym systemie 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);
}

Jedność

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

źródło żelaza

Szybki

Uwaga: ten produkt Firebase nie jest dostępny w docelowym systemie 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,
    ])
}

Cel C

Uwaga: ten produkt Firebase nie jest dostępny w docelowym systemie 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);
    }
}

Jedność

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

Rozważania dotyczące wdrożenia

Aby umożliwić Google Ads przetworzenie ad_impression , pamiętaj o podaniu zarówno parametrów currency , jak i value (opisanych poniżej). Obydwa parametry powinny być jak najbardziej dokładne, aby zapobiec przecenianiu lub niedocenianiu użytkowników.

Parametr waluty

Parametr currency ( iOS+ | Android | Unity ) należy przesłać jako ciąg znaków w trzyliterowym formacie ISO_4217 (na przykład "USD" ). Niektóre platformy zarabiania na reklamach pomijają walutę, co może wymagać zakodowania parametru na stałe.

Parametr wartości

Parametr value ( iOS+ | Android | Unity ) należy przesłać z użyciem kropki jako separatora dziesiętnego. Może być konieczne przekształcenie wartości otrzymanych z niektórych platform, aby dopasować je do wymaganego formatu powyżej. 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 wysłać wartości.

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

Walidacja

Google Analytics oferuje wiele funkcji umożliwiających sprawdzanie implementacji w całym cyklu rozwoju.

  1. Widok debugowania
    Podczas pierwszego testowania implementacji użyj DebugView , aby zobaczyć dane testowe ad_impression w konsoli. Po wybraniu zdarzenia ad_impression możesz sprawdzić wysyłane parametry w panelu Parametry (po prawej stronie ekranu). Pomaga to potwierdzić, że przetwarzane są prawidłowe informacje.

  2. Czas rzeczywisty
    Po wdrożeniu aplikacji skorzystaj z raportu Google Analytics Realtime , aby sprawdzić, czy implementacja działa prawidłowo. W raporcie w czasie rzeczywistym wyświetl liczbę zdarzeń według karty nazwy zdarzenia i wybierz opcję ad_impression , aby wyświetlić 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 jednego lub większej liczby dni. Użyj tego wyodrębnionego przykładu, aby wyszukać problemy, takie jak wartości zerowe lub nieustawione, i zastosuj poprawki do kodu w przypadku wszelkich nieobsługiwanych przypadków użycia.

Następne kroki

Odwiedź swój panel Analytics w konsoli Firebase lub w połączonej usłudze Analytics w konsoli Analytics. Przychody z reklam są uwzględniane w takich wskaźnikach, jak średni przychód na użytkownika (ARPU) i wartość od początku użytkowania (LTV).