衡量您的收入來源有助於您了解用戶的終身價值並發展您的應用業務。本指南向您展示如何為您的平台設定廣告收入衡量。
設定廣告收入衡量後,您可以執行以下任一操作:
分析有助於您的應用程式產生廣告收入的使用者操作。
使用Firebase A/B 測試執行實驗,找出哪些功能可以提高您的應用程式廣告收入,或使用Remote Config 個人化來個人化廣告體驗。
使用Firebase Remote Config根據廣告收入水平創建用戶受眾並自訂用戶體驗。
在你開始之前
如果您還沒有完成,請確保完成以下任務:
按照 Analytics 入門中的說明設定您的專案和應用程式。
確保您已在應用程式中包含 Android SDK v17.6.0+ 或 Apple 平台 SDK v6.34.0+。
執行
您可以使用 Google Analytics(分析)來衡量透過獲利平台(例如 AdMob、AppLovin 和ironSource)展示廣告所產生的廣告收入。要衡量廣告收入,只要使用者在應用程式中看到廣告,您就必須記錄ad_impression
事件。這些事件包含廣告平台、來源、貨幣和價值等詳細資訊。
AdMob
如果您使用的是 AdMob 平台,請將您的 AdMob 應用程式連結到 Firebase 和 Analytics ,以實現廣告收入的自動衡量。每當您的用戶看到廣告展示時,適用於 Google Analytics 的 Firebase SDK 都會自動記錄ad_impression
事件。
其他廣告變現平台
AppLovin 和ironSource 等平台提供印象級收入數據,然後您可以使用這些數據來記錄Google Analytics ad_impression
事件。
以下部分展示了一些不同廣告獲利平台的實施範例。
應用愛
迅速
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
- (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); }
統一
// 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); }
鐵源
迅速
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
- (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); } }
統一
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
參數 ( iOS+ | Android | Unity ) 應以三字母ISO_4217格式的字串傳送(例如, "USD"
)。某些廣告獲利平台會忽略貨幣,這可能需要您對參數進行硬編碼。
數值參數
value
參數 ( iOS+ | Android | Unity ) 應使用點作為小數分隔符號傳送。您可能需要轉換從某些平台收到的值以適合上述所需的格式。某些平臺本地化數字格式並使用逗號作為小數點分隔符號。在某些情況下,平台可能根本不發送值。
此外,該值應該是數字類型,例如 double 或 long。例如, 1000.01
、 0.001
和1.00
都是有效的
驗證
Google Analytics 提供多種功能來驗證您在整個開發週期中的實作情況。
偵錯視圖
首次測試您的實作時,請使用DebugView在控制台中查看您的測試ad_impression
資料。當您選擇ad_impression
事件時,您可以在「參數」面板(位於螢幕右側)中查看發送的參數。這可以幫助您確認正在處理正確的資訊。即時的
部署應用程式後,請使用 Google Analytics即時報告來確認實施是否正常運作。在即時報告中,按事件名稱卡查看事件計數,然後選擇ad_impression以查看過去 30 分鐘的事件和參數詳細資訊。大查詢
使用BigQuery 匯出來提取一天或多天的ad_impression
事件的樣本。使用此提取的範例來尋找問題(例如零值或未設定值),並對任何未處理的用例的程式碼套用修復。
下一步
在 Firebase 控制台或 Analytics 控制台中連結的 Analytics 屬性中造訪您的 Analytics 資訊中心。廣告收入被納入指標中,例如每位使用者平均收入 (ARPU) 和生命週期價值 (LTV)。