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

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

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

Trước khi bắt đầu

Nhớ hoàn thành những việc sau nếu bạn chưa làm:

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

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

  3. Đảm bảo rằng bạn đã đưa SDK Android phiên bản 17.6.0 trở lên vào ứng dụng của mình hoặc SDK nền tảng Apple phiên bản 6.34.0 trở lên.

Triển khai

Bạn có thể sử dụng Google Analytics để đo lường doanh thu quảng cáo được tạo ra từ hiển thị quảng cáo thông qua các nền tảng kiếm tiền như AdMob, AppLovin và ironSource. Để đo lường doanh thu từ quảng cáo, bạn phải ghi 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 có chứa các thông tin 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 đang sử dụng nền tảng AdMob, liên kết ứng dụng AdMob với Firebase và Analytics để bật tính năng tự động đo lường doanh thu từ quảng cáo. Firebase SDK cho Google Analytics tự động ghi lại sự kiện ad_impression bất cứ khi nào người dùng thấy một quảng cáo hiển thị.

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ượt hiển thị mà sau đó bạn có thể sử dụng để ghi nhật ký Google Analytics ad_impression sự kiện.

Các phần sau đây trình bày ví dụ về cách triển khai cho một số quảng cáo nền tảng kiếm tiền.

AppLovin

Swift

Lưu ý: Sản phẩm Firebase này không dành cho macOS mục tiêu.
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

Lưu ý: Sản phẩm Firebase này không dành cho macOS mục tiêu.
- (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);
}

nguồn sắt

Swift

Lưu ý: Sản phẩm Firebase này không dành cho macOS mục tiêu.
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

Lưu ý: Sản phẩm Firebase này không dành cho macOS mục tiêu.
- (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);
  }
}

Những điều cần cân nhắc khi triển khai

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

Thông số đơn vị tiền tệ

Tham số currency (iOS trở lên | Android | Unity) phải được gửi dưới dạng chuỗi có ba chữ cái ISO_4217 (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ệ, có thể yêu cầu bạn mã cứng tham số.

Thông số giá trị

Tham số value (iOS trở lên | Android | Unity) phải được gửi sử dụng dấu chấm làm dấu phân cách phần 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 bắt buộc nêu trên. Hơi nhiều nền tảng bản địa hoá định dạng số và sử dụng dấu phẩy làm dấu thập phân. Ngang bằng trong một số trường hợp, nền tảng có thể không gửi giá trị nào.

Ngoài ra, giá trị phải là một kiểu số, chẳng hạn như kép hoặc dài. Ví dụ: 1000.01, 0.0011.00 đều là hợp lệ

Xác thực

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

  1. DebugView
    Khi kiểm thử kết quả triển khai lần đầ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 một sự kiện trên ad_impression, bạn có thể xem lại các thông số mà bạn gửi trong bảng Parameters (Thông số) (ở bên phải màn hình). Việc này giúp bạn xác nhận rằng bạn đang cung cấp thông tin chính xác đã xử lý.

  2. Thời gian thực
    Sau khi bạn triển khai ứng dụng, hãy dùng Google Analytics Báo cáo theo thời gian thực để xác nhận rằng quá trình triển khai đang hoạt động chính xác. Trong Báo cáo theo thời gian thực, xem thẻ Số sự kiện theo Tên sự kiện và chọn ad_impression để xem thông tin chi tiết về sự kiện và thông số trong 30 phút vừa qua.

  3. BigQuery
    Sử dụng BigQuery Export để trích xuất mẫu cho một hoặc nhiều ngày gồm sự kiện ad_impression. Sử dụng đoạn mã đã trích xuất này mẫu để tìm các vấn đề (chẳng hạn như giá trị bằng 0 hoặc không được đặt) và áp dụng cách khắc phục vào mã của bạn cho mọi trường hợp sử dụng chưa được xử lý.

Các bước tiếp theo

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