評估廣告收益

評估收益來源有助於瞭解 以及拓展應用程式業務本指南說明如何設定廣告收益 您需要為每個平台進行評估

廣告收益評估設定完畢後,你可以執行以下任一操作: 包括:

事前準備

如果您尚未完成下列工作,請務必完成這項作業:

  1. 按照相關說明設定專案和應用程式 開始使用 Analytics

  2. 確認您已將 Firebase 專案連結至 「Google Analytics」帳戶。

  3. 確認您已在應用程式中加入 Android SDK 17.6.0 以上版本或 Apple 平台 SDK v6.34.0 以上版本。

導入作業

您可以使用 Google Analytics,評估以下項目產生的廣告收益: 這些營利平台包含的廣告,例如 AdMob、AppLovin 和 ironSource。如要評估廣告收益,您必須記錄 ad_impression 事件 每當使用者在應用程式中看到廣告時。這些事件含有 廣告平台、來源、貨幣和價值等詳細資訊

AdMob

如果你使用 AdMob 平台, AdMob 應用程式連結至 Firebase 和 Analytics 就能自動評估廣告收益。Firebase SDK for Google Analytics 會在每次發生時自動記錄 ad_impression 事件 使用者看到一次廣告曝光時

其他廣告營利平台

AppLovin 和 ironSource 等平台提供了曝光層級的收益資料。 這樣可以用來記錄 Google Analytics ad_impression 事件。

以下各節說明幾種不同廣告的導入範例 營利平台

AppLovin

Swift

注意:這項 Firebase 產品不適用於 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,
      ])
  }
}

目標-C

注意:這項 Firebase 產品不適用於 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

注意:這項 Firebase 產品不適用於 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,
    ])
}

目標-C

注意:這項 Firebase 產品不適用於 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);
  }
}

導入方面的注意事項

如要允許「Google Ads」處理您的 ad_impression,請務必加入 currencyvalue 參數 (如下所述)。兩者皆有 參數的值應盡可能準確,以免高估值或低估值 計算使用者的價值

Currency 參數

currency 參數 (iOS 以上版本) |Android |Unity) 應以三個字母的字串形式傳送 ISO_4217 格式 (例如 "USD")。部分廣告營利平台會省略幣別 可能需要對參數進行硬式編碼

值參數

value 參數 (iOS 以上版本) |Android |Unity) 應以半形句號做為小數分隔符傳送。您可能需要將 為符合上述規定格式,從某些平台收到的值。只有部分通知 平台,採用本地化數字格式,並使用逗號做為小數點。於 在某些情況下,平台可能根本沒有傳送價值。

此外,這個值應為數字類型,例如雙精度浮點數或長整數。 舉例來說,1000.010.0011.00 都是 有效

驗證

Google Analytics 提供多種功能,協助您驗證導入狀態 整個開發週期

  1. DebugView
    首次測試實作成果時,請使用 DebugView 可以查看測試的 ad_impression 資料 。選取 ad_impression 事件後,您可以查看 「參數」面板中傳送的參數 (右側) 螢幕頂端)。這有助於確認使用者輸入的資訊是否正確 處理完畢

  2. 即時
    部署應用程式後,請使用 Google Analytics 即時報表 來確認導入作業是否正常運作在「即時」報表中 查看「按事件名稱列出的事件計數」資訊卡,然後選取「ad_impression」即可查看 過去 30 分鐘的事件和參數詳細資料。


  3. BigQuery 使用 BigQuery 匯出功能擷取 一或多天的 ad_impression 事件樣本。使用此擷取的 找出問題 (例如零或未設定值),再套用修正方法 新增到程式碼中

後續步驟

前往 Firebase 控制台或已連結的「Analytics」資訊主頁 Analytics 屬性。Analytics影響廣告收益 例如每位使用者的平均收益 (ARPU) 和生命週期 價值 (LTV)。