การวัดแหล่งที่มาของรายได้ช่วยให้คุณเข้าใจมูลค่าตลอดอายุการใช้งานของ ผู้ใช้และขยายธุรกิจแอปให้เติบโต คู่มือนี้แสดงวิธีตั้งค่ารายได้จากโฆษณา การวัดผลสำหรับแพลตฟอร์มของคุณ
หลังจากที่ตั้งค่าการวัดรายได้จากโฆษณาแล้ว คุณจะทำ ดังต่อไปนี้:
วิเคราะห์การกระทำของผู้ใช้ที่ส่งผลต่อรายได้จากโฆษณาที่เกิดจากแอปของคุณ
เรียกใช้การทดสอบโดยใช้ Firebase A/B Testing เพื่อค้นหา ช่วยเพิ่มรายได้จากโฆษณาในแอปหรือปรับโฆษณาตามโปรไฟล์ของผู้ใช้ ประสบการณ์โดยใช้Remote Configการปรับเปลี่ยนในแบบของคุณ
สร้าง กลุ่มเป้าหมายที่เป็นผู้ใช้ และปรับแต่งประสบการณ์ของผู้ใช้ได้โดยใช้ 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 มีข้อมูลรายได้ระดับการแสดงผล
ซึ่งคุณสามารถใช้บันทึก Google Analytics
ad_impression
กิจกรรม
ส่วนต่อไปนี้แสดงตัวอย่างการติดตั้งใช้งานสำหรับโฆษณาต่างๆ 2-3 รายการ แพลตฟอร์มการสร้างรายได้
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); }
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 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); } }
ข้อควรพิจารณาในการติดตั้งใช้งาน
หากต้องการอนุญาตให้ Google Ads ประมวลผล
ad_impression
อย่าลืมใส่
ทั้งพารามิเตอร์ currency
และ value
(อธิบายไว้ด้านล่าง) ทั้ง 2 อย่าง
ควรมีความถูกต้องมากที่สุด เพื่อป้องกันการประเมินค่าสูงเกินจริงหรือต่ำเกินไป
การประเมินค่าผู้ใช้
พารามิเตอร์สกุลเงิน
พารามิเตอร์ currency
(iOS
| Android
| Unity)
ควรส่งเป็นสตริงในตัวอักษร 3 ตัว
ISO_4217
(เช่น "USD"
) แพลตฟอร์มการสร้างรายได้จากโฆษณาบางแพลตฟอร์มไม่มีสกุลเงิน
ซึ่งอาจทำให้คุณต้องฮาร์ดโค้ดพารามิเตอร์
พารามิเตอร์ค่า
พารามิเตอร์ value
(iOS
| Android
| Unity)
ควรส่งโดยใช้จุดเป็นตัวคั่นทศนิยม คุณอาจต้องเปลี่ยนรูปแบบ
ค่าที่ได้รับจากบางแพลตฟอร์มเพื่อให้พอดีกับรูปแบบที่กำหนดด้านบน ใช้บ้าง
แพลตฟอร์มจะแปลรูปแบบตัวเลขและใช้เครื่องหมายจุลภาคเป็นตัวคั่นทศนิยม ใน
ในบางกรณี แพลตฟอร์มอาจไม่ส่งค่าใดๆ เลย
นอกจากนี้ ค่าควรเป็นประเภทตัวเลข เช่น เลขคู่หรือยาว
เช่น 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 หรือไม่ได้ตั้งค่า และนำการแก้ไขไปใช้ ลงในโค้ดสำหรับ Use Case ที่ไม่มีการจัดการ
ขั้นตอนถัดไป
ไปที่แดชบอร์ด Analytics ในคอนโซล Firebase หรือในโฆษณาที่ลิงก์ไว้ พร็อพเพอร์ตี้ Analytics ในคอนโซล Analytics พิจารณารายได้จากโฆษณา เป็นเมตริก เช่น รายได้เฉลี่ยต่อผู้ใช้ (ARPU) และตลอดอายุการใช้งาน มูลค่า (LTV)