Đo lường doanh thu quảng cáo

Việc đo lường các nguồn doanh thu giúp bạn hiểu được giá trị lâu dài của người dùng và phát triển hoạt động kinh doanh ứng dụng của mình. Hướng dẫn này chỉ cho bạn cách thiết lập tính năng đo lường doanh thu quảng cáo cho nền tảng của mình.

Sau khi thiết lập tính năng đo lường doanh thu quảng cáo, bạn có thể thực hiện bất kỳ thao tác nào sau đây:

Trước khi bắt đầu

Nếu bạn chưa thực hiện, hãy đảm bảo hoàn thành các nhiệm vụ sau:

  1. Thiết lập dự án và ứng dụng của bạn như được mô tả trong Bắt đầu với Analytics .

  2. Đảm bảo rằng bạn đã liên kết dự án Firebase của mình với tài khoản Google Analytics.

  3. Đảm bảo rằng bạn đã đưa vào ứng dụng của mình SDK Android v17.6.0+ hoặc SDK nền tảng Apple v6.34.0+.

Thực hiện

Bạn có thể sử dụng Google Analytics để đo lường doanh thu quảng cáo được tạo từ việc hiển thị quảng cáo trên các nền tảng kiếm tiền như AdMob, AppLovin và ironSource. Để đo lường doanh thu quảng cáo, bạn phải ghi lại các sự kiện ad_impression bất cứ khi nào người dùng nhìn thấy quảng cáo trong ứng dụng của bạn. Những sự kiện này chứa các chi tiết như nền tảng quảng cáo, nguồn, đơn vị tiền tệ và giá trị.

AdMob

Nếu bạn đang sử dụng nền tảng AdMob, hãy liên kết ứng dụng AdMob của bạn với Firebase và Analytics để bật tính năng tự động đo lường doanh thu quảng cáo. SDK Firebase dành cho Google Analytics tự động ghi lại sự kiện ad_impression bất cứ khi nào người dùng của bạn nhìn thấy một lần hiển thị quảng cáo.

Các nền tảng kiếm tiền từ quảng cáo khác

Các nền tảng như AppLovin và ironSource cung cấp dữ liệu doanh thu ở cấp lần hiển thị mà sau đó bạn có thể sử dụng để ghi lại các sự kiện ad_impression của Google Analytics.

Các phần sau đây hiển thị các ví dụ triển khai cho một số nền tảng kiếm tiền từ quảng cáo khác nhau.

AppLovin

Nhanh

Lưu ý: Sản phẩm Firebase này không có sẵn trên mục tiêu 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,
      ])
  }
}

Mục tiêu-C

Lưu ý: Sản phẩm Firebase này không có sẵn trên mục tiêu 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);
}

Đoàn kết

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

sắtNguồn

Nhanh

Lưu ý: Sản phẩm Firebase này không có sẵn trên mục tiêu 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,
    ])
}

Mục tiêu-C

Lưu ý: Sản phẩm Firebase này không có sẵn trên mục tiêu 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);
    }
}

Đoàn kết

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

Cân nhắc thực hiện

Để cho phép Google Ads xử lý ad_impression của bạn, hãy đảm bảo bao gồm cả thông số currencyvalue (được mô tả bên dưới). Cả hai tham số phải chính xác nhất có thể để tránh việc đánh giá quá cao hoặc đánh giá thấp người dùng.

Tham số tiền tệ

Tham số currency ( iOS+ | Android | Unity ) phải được gửi dưới dạng chuỗi ở định dạng ISO_4217 gồm ba chữ cái (ví dụ: "USD" ). Một số nền tảng kiếm tiền từ quảng cáo bỏ qua đơn vị tiền tệ, điều này có thể yêu cầu bạn mã hóa cứng thông số.

Tham số giá trị

Tham số value ( iOS+ | Android | Unity ) phải được gửi bằng dấu chấm làm dấu phân cách thập phân. Bạn có thể cần phải chuyển đổi các giá trị nhận được từ một số nền tảng để phù hợp với định dạng được yêu cầu ở trên. Một số nền tảng bản địa hóa các định dạng số và sử dụng dấu phẩy làm dấu phân cách thập phân. Trong một số trường hợp, nền tảng có thể không gửi một giá trị nào cả.

Ngoài ra, giá trị phải là loại số, chẳng hạn như gấp đôi hoặc dài. Ví dụ: 1000.01 , 0.0011.00 đều hợp lệ

Thẩm định

Google Analytics cung cấp nhiều tính năng để xác thực việc triển khai của bạn trong suốt chu kỳ phát triển.

  1. Chế độ xem gỡ lỗi
    Khi thử nghiệm lần triển khai đầu tiên, hãy sử dụng DebugView để xem dữ liệu ad_impression thử nghiệm của bạn trong bảng điều khiển. Khi chọn sự kiện ad_impression , bạn có thể xem lại các thông số mình đang gửi trong bảng Thông số (ở bên phải màn hình). Điều này giúp bạn xác nhận rằng thông tin chính xác đang được xử lý.

  2. Thời gian thực
    Sau khi bạn đã triển khai ứng dụng của mình, hãy sử dụng báo cáo Thời gian thực của Google Analytics để xác nhận việc triển khai đang hoạt động chính xác. Trong báo cáo Thời gian thực, hãy xem Số lượng sự kiện theo thẻ tên Sự kiện và chọn ad_impression để xem chi tiết sự kiện và thông số trong 30 phút qua.

  3. BigQuery
    Sử dụng tính năng xuất BigQuery để trích xuất mẫu gồm một hoặc nhiều ngày sự kiện ad_impression . Sử dụng mẫu được trích xuất này để tìm kiếm các vấn đề, chẳng hạn như giá trị 0 hoặc giá trị chưa được đặt, đồng thời áp dụng các bản sửa lỗi cho mã của bạn cho mọi trường hợp sử dụng chưa được xử lý.

Bước tiếp theo

Truy cập trang tổng quan Analytics của bạn trong bảng điều khiển Firebase hoặc trong thuộc tính Analytics được liên kết của bạn trong bảng điều khiển Analytics. Doanh thu quảng cáo được tính vào các chỉ số, chẳng hạn như Doanh thu trung bình trên mỗi người dùng (ARPU) và Giá trị lâu dài (LTV).