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