評估收益來源有助於瞭解 以及拓展應用程式業務本指南說明如何設定廣告收益 您需要為每個平台進行評估
廣告收益評估設定完畢後,你可以執行以下任一操作: 包括:
分析能為應用程式帶來廣告收益的使用者動作。
使用 Firebase A/B Testing 進行實驗,以找出需要的項目 有助於提升應用程式廣告收益或放送個人化廣告 採用 Remote Config 個人化服務的服務體驗。
創作 使用者目標對象 以及運用自動化工具,量身打造使用者體驗 Firebase Remote Config。
事前準備
如果您尚未完成下列工作,請務必完成這項作業:
按照相關說明設定專案和應用程式 開始使用 Analytics。
確認您已在應用程式中加入 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
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
- (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
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
- (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
,請務必加入
currency
和 value
參數 (如下所述)。兩者皆有
參數的值應盡可能準確,以免高估值或低估值
計算使用者的價值
Currency 參數
currency
參數
(iOS 以上版本)
|Android
|Unity)
應以三個字母的字串形式傳送
ISO_4217
格式 (例如 "USD"
)。部分廣告營利平台會省略幣別
可能需要對參數進行硬式編碼
值參數
value
參數
(iOS 以上版本)
|Android
|Unity)
應以半形句號做為小數分隔符傳送。您可能需要將
為符合上述規定格式,從某些平台收到的值。只有部分通知
平台,採用本地化數字格式,並使用逗號做為小數點。於
在某些情況下,平台可能根本沒有傳送價值。
此外,這個值應為數字類型,例如雙精度浮點數或長整數。
舉例來說,1000.01
、0.001
和 1.00
都是
有效
驗證
Google Analytics 提供多種功能,協助您驗證導入狀態 整個開發週期
DebugView
首次測試實作成果時,請使用 DebugView 可以查看測試的ad_impression
資料 。選取ad_impression
事件後,您可以查看 「參數」面板中傳送的參數 (右側) 螢幕頂端)。這有助於確認使用者輸入的資訊是否正確 處理完畢即時
部署應用程式後,請使用 Google Analytics 即時報表 來確認導入作業是否正常運作在「即時」報表中 查看「按事件名稱列出的事件計數」資訊卡,然後選取「ad_impression」即可查看 過去 30 分鐘的事件和參數詳細資料。
BigQuery 使用 BigQuery 匯出功能擷取 一或多天的ad_impression
事件樣本。使用此擷取的 找出問題 (例如零或未設定值),再套用修正方法 新增到程式碼中
後續步驟
前往 Firebase 控制台或已連結的「Analytics」資訊主頁 Analytics 屬性。Analytics影響廣告收益 例如每位使用者的平均收益 (ARPU) 和生命週期 價值 (LTV)。