การวัดแหล่งที่มาของรายได้จะช่วยให้คุณเข้าใจมูลค่าตลอดช่วงชีวิตของผู้ใช้และขยายธุรกิจแอป คู่มือนี้แสดงวิธีตั้งค่าการวัดรายได้จากโฆษณา สำหรับแพลตฟอร์มของคุณ
หลังจากตั้งค่าการวัดรายได้จากโฆษณาแล้ว คุณจะทำสิ่งต่อไปนี้ได้
วิเคราะห์การกระทําของผู้ใช้ที่มีส่วนทําให้เกิดรายได้จากโฆษณาที่แอปของคุณสร้างขึ้น
ทำการทดสอบโดยใช้ Firebase A/B Testing เพื่อดูว่าฟีเจอร์ใดช่วยเพิ่มรายได้จากโฆษณาในแอป หรือปรับเปลี่ยนประสบการณ์การใช้งานโฆษณาในแบบของคุณโดยใช้Remote Configการปรับเปลี่ยนในแบบของคุณ
สร้างกลุ่มเป้าหมายผู้ใช้ และปรับแต่งประสบการณ์ของผู้ใช้โดยใช้ Firebase Remote Config ตามระดับรายได้จากโฆษณา
ก่อนเริ่มต้น
หากยังไม่ได้ดำเนินการ โปรดทํางานต่อไปนี้ให้เสร็จสมบูรณ์
ตั้งค่าโปรเจ็กต์และแอปตามที่อธิบายไว้ในเริ่มต้นใช้งาน Analytics
ตรวจสอบว่าคุณได้ลิงก์โปรเจ็กต์ Firebase กับบัญชีGoogle Analytics แล้ว
ตรวจสอบว่าคุณได้รวม Android SDK เวอร์ชัน 17.6.0 ขึ้นไปหรือ SDK ของแพลตฟอร์ม Apple เวอร์ชัน 6.34.0 ขึ้นไปไว้ในแอปแล้ว
การใช้งาน
คุณสามารถใช้ Google Analytics เพื่อวัดรายได้จากโฆษณาที่สร้างขึ้นจากการ
แสดงโฆษณาด้วยแพลตฟอร์มการสร้างรายได้ เช่น AdMob, AppLovin และ
ironSource หากต้องการวัดรายได้จากโฆษณา คุณต้องบันทึกad_impression
เหตุการณ์
ทุกครั้งที่ผู้ใช้เห็นโฆษณาในแอป เหตุการณ์เหล่านี้มีรายละเอียด เช่น แพลตฟอร์มโฆษณา แหล่งที่มา สกุลเงิน และมูลค่า
AdMob
หากใช้แพลตฟอร์ม AdMob
ให้ลิงก์แอป AdMob กับ Firebase และ Analytics
เพื่อเปิดใช้การวัดรายได้จากโฆษณาโดยอัตโนมัติ Firebase SDK สำหรับ
Google Analytics จะบันทึกเหตุการณ์ ad_impression
โดยอัตโนมัติทุกครั้งที่
ผู้ใช้เห็นการแสดงโฆษณา
แพลตฟอร์มอื่นๆ ในการสร้างรายได้จากโฆษณา
แพลตฟอร์มต่างๆ เช่น AppLovin และ ironSource จะให้ข้อมูลรายได้ระดับการแสดงผล
ซึ่งคุณสามารถใช้เพื่อบันทึกเหตุการณ์ Google Analytics
ad_impression
ได้
ส่วนต่อไปนี้แสดงตัวอย่างการติดตั้งใช้งานสำหรับแพลตฟอร์มการสร้างรายได้จากโฆษณาบางแพลตฟอร์ม
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); } }
ข้อควรพิจารณาในการติดตั้งใช้งาน
หากต้องการอนุญาตให้ Google Ads ประมวลผล
ad_impression
โปรดตรวจสอบว่าได้รวม
ทั้งพารามิเตอร์ currency
และ value
(อธิบายไว้ด้านล่าง) พารามิเตอร์ทั้ง 2 รายการควรมีความแม่นยำมากที่สุดเพื่อป้องกันไม่ให้ประเมินมูลค่าผู้ใช้สูงหรือต่ำเกินไป
พารามิเตอร์สกุลเงิน
พารามิเตอร์ 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การส่งออกเพื่อดึงตัวอย่างเหตุการณ์ad_impression
ของอย่างน้อย 1 วัน ใช้ตัวอย่างที่แยกออกมานี้ เพื่อค้นหาปัญหา เช่น ค่าเป็น 0 หรือไม่ได้ตั้งค่า และใช้การแก้ไข กับโค้ดสำหรับกรณีการใช้งานที่ไม่ได้จัดการ
ขั้นตอนถัดไป
ไปที่Analyticsแดชบอร์ดในFirebaseคอนโซลหรือในAnalyticsพร็อพเพอร์ตี้ที่ลิงก์ไว้ในAnalyticsคอนโซล ระบบจะนำรายได้จากโฆษณามาพิจารณา ในเมตริกต่างๆ เช่น รายได้เฉลี่ยต่อผู้ใช้ (ARPU) และมูลค่าตลอดช่วงชีวิตของลูกค้า (LTV)