การวัดแหล่งที่มาของรายได้ช่วยให้คุณเข้าใจมูลค่าตลอดอายุการใช้งานของผู้ใช้และทำให้ธุรกิจแอปของคุณเติบโต คู่มือนี้แสดงวิธีตั้งค่าการวัดรายได้จากโฆษณาสำหรับแพลตฟอร์มของคุณ
หลังจากตั้งค่าการวัดรายได้จากโฆษณาแล้ว คุณจะดำเนินการใดๆ ต่อไปนี้ได้
วิเคราะห์การกระทำของผู้ใช้ที่นำไปสู่รายได้จากโฆษณาที่แอปของคุณสร้างขึ้น
เรียกใช้การทดสอบโดยใช้ การทดสอบ A/B ของ Firebase เพื่อค้นหาว่าฟีเจอร์ใดที่กระตุ้นการปรับปรุงรายได้จากโฆษณาในแอปของคุณ หรือปรับแต่งประสบการณ์โฆษณาในแบบของคุณโดยใช้ การกำหนดค่าระยะไกลในแบบ ของคุณ
สร้าง กลุ่มเป้าหมายผู้ใช้ และ ปรับแต่งประสบการณ์ของผู้ใช้ โดยใช้ Firebase Remote Config ตามระดับรายได้จากโฆษณา
ก่อนที่คุณจะเริ่มต้น
หากคุณยังไม่ได้ดำเนินการ ตรวจสอบให้แน่ใจว่าได้ดำเนินการต่อไปนี้ให้เสร็จสิ้น:
ตั้งค่าโครงการและแอปของคุณตามที่อธิบายไว้ใน เริ่มต้นใช้งาน Analytics
ตรวจสอบว่าคุณ เชื่อมโยงโปรเจ็กต์ Firebase กับบัญชี Google Analytics แล้ว
ตรวจสอบให้แน่ใจว่าคุณได้รวม Android SDK v17.6.0+ หรือ SDK แพลตฟอร์มของ Apple v6.34.0+ ไว้ในแอปแล้ว
การดำเนินการ
คุณสามารถใช้ Google Analytics เพื่อวัดรายได้จากโฆษณาที่เกิดจากการแสดงโฆษณาด้วยแพลตฟอร์มการสร้างรายได้ เช่น AdMob, AppLovin และ ironSource ในการวัดรายได้จากโฆษณา คุณต้องบันทึก เหตุการณ์ ad_impression
ทุกครั้งที่ผู้ใช้เห็นโฆษณาในแอปของคุณ เหตุการณ์เหล่านี้มีรายละเอียดต่างๆ เช่น แพลตฟอร์มโฆษณา แหล่งที่มา สกุลเงิน และมูลค่า
AdMob
หากคุณใช้แพลตฟอร์ม AdMob ให้ลิงก์แอป AdMob กับ Firebase และ Analytics เพื่อเปิดใช้การวัดรายได้จากโฆษณาโดยอัตโนมัติ Firebase SDK สำหรับ Google Analytics จะบันทึกเหตุการณ์ ad_impression
โดยอัตโนมัติเมื่อใดก็ตามที่ผู้ใช้เห็นการแสดงโฆษณา
แพลตฟอร์มการสร้างรายได้จากโฆษณาอื่นๆ
แพลตฟอร์มต่างๆ เช่น AppLovin และ ironSource ให้ข้อมูลรายได้ระดับการแสดงผล ซึ่งคุณสามารถใช้เพื่อบันทึกเหตุการณ์ ad_impression
ของ Google Analytics
ส่วนต่อไปนี้แสดงตัวอย่างการใช้งานสำหรับแพลตฟอร์มการสร้างรายได้จากโฆษณาต่างๆ
แอพเลิฟวิน
สวิฟต์
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); }
ความสามัคคี
// 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, ]) }
วัตถุประสงค์-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 ตัวอักษร 3 ตัว (เช่น "USD"
) แพลตฟอร์มการสร้างรายได้จากโฆษณาบางแพลตฟอร์มไม่ใช้สกุลเงิน ซึ่งอาจกำหนดให้คุณต้องฮาร์ดโค้ดพารามิเตอร์
ค่าพารามิเตอร์
พารามิเตอร์ value
( iOS+ | Android | Unity ) ควรส่งโดยใช้จุดเป็นตัวคั่นทศนิยม คุณอาจต้องแปลงค่าที่ได้รับจากบางแพลตฟอร์มเพื่อให้พอดีกับรูปแบบที่กำหนดด้านบน บางแพลตฟอร์มแปลรูปแบบตัวเลขและใช้เครื่องหมายจุลภาคเป็นตัวคั่นทศนิยม ในบางกรณี แพลตฟอร์มอาจไม่ส่งค่าเลย
นอกจากนี้ ค่าควรเป็นประเภทตัวเลข เช่น double หรือ long ตัวอย่างเช่น 1000.01
, 0.001
และ 1.00
ถูกต้อง ทั้งหมด
การตรวจสอบ
Google Analytics มีคุณลักษณะหลายอย่างเพื่อตรวจสอบการใช้งานของคุณตลอดวงจรการพัฒนา
DebugView
เมื่อทดสอบการใช้งานครั้งแรก ให้ใช้ DebugView เพื่อดูข้อมูลการทดสอบad_impression
ในคอนโซล เมื่อคุณเลือกเหตุการณ์ad_impression
คุณสามารถตรวจสอบพารามิเตอร์ที่คุณส่งได้ในแผง พารามิเตอร์ (ทางด้านขวาของหน้าจอ) ซึ่งช่วยให้คุณยืนยันว่าข้อมูลที่ถูกต้องกำลังดำเนินการอยู่เรียลไทม์
เมื่อคุณทำให้แอปใช้งานได้แล้ว ให้ใช้ รายงานเรียลไทม์ ของ Google Analytics เพื่อยืนยันว่าการติดตั้งใช้งานได้ถูกต้อง ในรายงานเรียลไทม์ ดู จำนวนเหตุการณ์ตามการ์ดชื่อเหตุการณ์ แล้วเลือก ad_impression เพื่อดูรายละเอียดเหตุการณ์และพารามิเตอร์ในช่วง 30 นาทีที่ผ่านมาBigQuery
ใช้ BigQuery export เพื่อแยกตัวอย่างเหตุการณ์ad_impression
1 วันขึ้นไป ใช้ตัวอย่างที่แยกออกมานี้เพื่อค้นหาปัญหา เช่น ค่าศูนย์หรือไม่ได้ตั้งค่า และใช้การแก้ไขกับโค้ดของคุณสำหรับกรณีการใช้งานที่ไม่ได้จัดการใดๆ
ขั้นตอนถัดไป
ไปที่แดชบอร์ด Analytics ในคอนโซล Firebase หรือพร็อพเพอร์ตี้ Analytics ที่ลิงก์ในคอนโซล Analytics รายได้จากโฆษณาจะถูกนำมาพิจารณาเป็นเมตริก เช่น รายได้เฉลี่ยต่อผู้ใช้ (ARPU) และมูลค่าตลอดอายุการใช้งานของลูกค้า (LTV)