Việc đo lường các nguồn doanh thu giúp bạn hiểu được giá trị lâu dài của người dùng và phát triển hoạt động kinh doanh ứng dụng của mình. Hướng dẫn này chỉ cho bạn cách thiết lập tính năng đo lường doanh thu quảng cáo cho nền tảng của mình.
Sau khi thiết lập tính năng đo lường doanh thu quảng cáo, bạn có thể thực hiện bất kỳ thao tác nào sau đây:
Phân tích các hành động của người dùng đóng góp vào doanh thu quảng cáo do ứng dụng của bạn tạo ra.
Chạy thử nghiệm bằng Thử nghiệm A/B Firebase để tìm những tính năng giúp cải thiện doanh thu quảng cáo trong ứng dụng của bạn hoặc cá nhân hóa trải nghiệm quảng cáo bằng cách sử dụng tính năng cá nhân hóa Cấu hình từ xa .
Tạo đối tượng người dùng và điều chỉnh trải nghiệm người dùng bằng cách sử dụng Cấu hình từ xa Firebase dựa trên mức doanh thu quảng cáo.
Trước khi bắt đầu
Nếu bạn chưa thực hiện, hãy đảm bảo hoàn thành các nhiệm vụ sau:
Thiết lập dự án và ứng dụng của bạn như được mô tả trong Bắt đầu với Analytics .
Đảm bảo rằng bạn đã liên kết dự án Firebase của mình với tài khoản Google Analytics.
Đảm bảo rằng bạn đã đưa vào ứng dụng của mình SDK Android v17.6.0+ hoặc SDK nền tảng Apple v6.34.0+.
Thực hiện
Bạn có thể sử dụng Google Analytics để đo lường doanh thu quảng cáo được tạo từ việc hiển thị quảng cáo trên các nền tảng kiếm tiền như AdMob, AppLovin và ironSource. Để đo lường doanh thu quảng cáo, bạn phải ghi lại các 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 chứa các 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 bạn đang sử dụng nền tảng AdMob, hãy liên kết ứng dụng AdMob của bạn với Firebase và Analytics để bật tính năng tự động đo lường doanh thu quảng cáo. SDK Firebase dành cho Google Analytics tự động ghi lại sự kiện ad_impression
bất cứ khi nào người dùng của bạn nhìn thấy một lần hiển thị quảng cáo.
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ần hiển thị mà sau đó bạn có thể sử dụng để ghi lại các sự kiện ad_impression
của Google Analytics.
Các phần sau đây hiển thị các ví dụ triển khai cho một số nền tảng kiếm tiền từ quảng cáo khác nhau.
AppLovin
Nhanh
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, ]) } }
Mục tiêu-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); }
Đoàn kết
// 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); }
sắtNguồn
Nhanh
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, ]) }
Mục tiêu-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); } }
Đoàn kết
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); } }
Cân nhắc thực hiện
Để cho phép Google Ads xử lý ad_impression
của bạn, hãy đảm bảo bao gồm cả thông số currency
và value
(được mô tả bên dưới). Cả hai tham số phải chính xác nhất có thể để tránh việc đánh giá quá cao hoặc đánh giá thấp người dùng.
Tham số tiền tệ
Tham số currency
( iOS+ | Android | Unity ) phải được gửi dưới dạng chuỗi ở định dạng ISO_4217 gồm ba chữ cái (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ệ, điều này có thể yêu cầu bạn mã hóa cứng thông số.
Tham số giá trị
Tham số value
( iOS+ | Android | Unity ) phải được gửi bằng dấu chấm làm dấu phân cách 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 được yêu cầu ở trên. Một số nền tảng bản địa hóa các định dạng số và sử dụng dấu phẩy làm dấu phân cách thập phân. Trong một số trường hợp, nền tảng có thể không gửi một giá trị nào cả.
Ngoài ra, giá trị phải là loại số, chẳng hạn như gấp đôi hoặc dài. Ví dụ: 1000.01
, 0.001
và 1.00
đều hợp lệ
Thẩm định
Google Analytics cung cấp nhiều tính năng để xác thực việc triển khai của bạn trong suốt chu kỳ phát triển.
Chế độ xem gỡ lỗi
Khi thử nghiệm lần triển khai đầu tiên, hãy sử dụng DebugView để xem dữ liệuad_impression
thử nghiệm của bạn trong bảng điều khiển. Khi chọn sự kiệnad_impression
, bạn có thể xem lại các thông số mình đang gửi trong bảng Thông số (ở bên phải màn hình). Điều này giúp bạn xác nhận rằng thông tin chính xác đang được xử lý.Thời gian thực
Sau khi bạn đã triển khai ứng dụng của mình, hãy sử dụng báo cáo Thời gian thực của Google Analytics để xác nhận việc triển khai đang hoạt động chính xác. Trong báo cáo Thời gian thực, hãy xem Số lượng sự kiện theo thẻ tên Sự kiện và chọn ad_impression để xem chi tiết sự kiện và thông số trong 30 phút qua.BigQuery
Sử dụng tính năng xuất BigQuery để trích xuất mẫu gồm một hoặc nhiều ngày sự kiệnad_impression
. Sử dụng mẫu được trích xuất này để tìm kiếm các vấn đề, chẳng hạn như giá trị 0 hoặc giá trị chưa được đặt, đồng thời áp dụng các bản sửa lỗi cho mã của bạn cho mọi trường hợp sử dụng chưa được xử lý.
Bước tiếp theo
Truy cập trang tổng quan Analytics của bạn trong bảng điều khiển Firebase hoặc trong thuộc tính Analytics được liên kết của bạn trong bảng điều khiển Analytics. Doanh thu quảng cáo được tính vào các chỉ số, chẳng hạn như Doanh thu trung bình trên mỗi người dùng (ARPU) và Giá trị lâu dài (LTV).