評估廣告收益

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

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

事前準備

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

  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)。