Việc đo lường nguồn doanh thu giúp bạn hiểu rõ 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 cho bạn biết 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ể thực hiện thao tác bất kỳ 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 mà ứng dụng của bạn tạo ra.
Chạy thử nghiệm bằng cách sử dụng tính năng Thử nghiệm A/B trong Firebase để tìm hiểu những tính năng giúp cải thiện doanh thu từ quảng cáo ứng dụng hoặc cá nhân hoá trải nghiệm quảng cáo bằng cách sử dụng tính năng cá nhân hoá 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 từ quảng cáo.
Trước khi bắt đầu
Nhớ hoàn thành những việc sau nếu bạn chưa làm:
Thiết lập dự án và ứng dụng của bạn như mô tả trong bài viết 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 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 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.
Triển khai
Bạn có thể sử dụng Google Analytics để đo lường doanh thu quảng cáo có được từ việc hiển thị quảng cáo trên các nền tảng kiếm tiền, chẳng hạn như AdMob, AppLovin và ironSource. Để đo lường doanh thu từ quảng cáo, bạn phải ghi lại
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. Những 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 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 từ quảng cáo. Firebase SDK dành cho Google Analytics sẽ tự động ghi lại sự kiện ad_impression
bất cứ khi nào người dùng của bạ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ể sử dụng để ghi lại các sự kiện
ad_impression
của Google Analytics.
Các phần sau đây trình bày ví dụ 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+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); }
nguồn sắt
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+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); } }
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ớ bao gồm cả tham số currency
và value
(như mô tả bên dưới). Cả hai thông số đều 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.
Thông số đơn vị tiền tệ
Tham số currency
(iOS+ | Android| Unity) phải được gửi dưới dạng một chuỗi ở định dạng ba chữ cái ISO_4217 (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ệ, do đó có thể bạn phải mã cứng tham số này.
Thông số giá trị
Bạn phải gửi tham số value
(iOS+ | Android| Unity) bằng dấu chấm làm dấu thập phân. Bạn có thể cần phải biến đổi các giá trị nhận được từ một số nền tảng cho 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, nền tảng có thể không gửi giá trị nào.
Ngoài ra, giá trị phải là một kiểu số, chẳng hạn như kép hoặc dài.
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 việc triển khai của bạn trong suốt chu kỳ phát triển.
DebugView
Khi kiểm thử hoạt động triển khai lần đầ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 một sự kiệnad_impression
, bạn có thể xem lại các thông số mà bạn đang gửi trong bảng điều khiển Parameters (Thông số) (ở bên phải màn hình). Việc 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 bạn triển khai ứng dụng, hãy sử dụng Báo cáo theo thời gian thực của Google Analytics để xác nhận rằng phương thức triển khai đang hoạt động đúng cách. 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 và chọn ad_impression để xem thông tin chi tiết về sự kiện và thông số trong 30 phút vừa qua.BigQuery
Sử dụng tính năng BigQuery Export để trích xuất một mẫu gồm một hoặc nhiều ngày gồm các sự kiệnad_impression
. Hãy sử dụng mẫu đã trích xuất này để tìm vấn đề (chẳng hạn như giá trị bằng 0 hoặc chưa đặt) và áp dụng bản sửa lỗi cho mã của bạn trong 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 của Firebase hoặc trong tài sản 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).