วัดรายได้จากโฆษณา

การวัดแหล่งที่มาของรายได้ช่วยให้คุณเข้าใจมูลค่าตลอดอายุการใช้งานของ ผู้ใช้และขยายธุรกิจแอปให้เติบโต คู่มือนี้แสดงวิธีตั้งค่ารายได้จากโฆษณา การวัดผลสำหรับแพลตฟอร์มของคุณ

หลังจากที่ตั้งค่าการวัดรายได้จากโฆษณาแล้ว คุณจะทำ ดังต่อไปนี้:

ก่อนเริ่มต้น

โปรดทำสิ่งต่อไปนี้หากยังไม่ได้ทำ

  1. ตั้งค่าโปรเจ็กต์และแอปตามที่อธิบายไว้ใน เริ่มต้นใช้งาน Analytics

  2. ตรวจสอบว่าคุณได้ลิงก์โปรเจ็กต์ Firebase กับ Google Analytics

  3. ตรวจสอบว่าคุณได้รวม 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

หมายเหตุ: ผลิตภัณฑ์ Firebase นี้ใช้ไม่ได้กับเป้าหมาย macOS
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

หมายเหตุ: ผลิตภัณฑ์ Firebase นี้ใช้ไม่ได้กับเป้าหมาย macOS
- (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

หมายเหตุ: ผลิตภัณฑ์ Firebase นี้ใช้ไม่ได้กับเป้าหมาย macOS
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

หมายเหตุ: ผลิตภัณฑ์ Firebase นี้ใช้ไม่ได้กับเป้าหมาย macOS
- (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 มีฟีเจอร์มากมายในการตรวจสอบการติดตั้งใช้งาน ตลอดวงจรการพัฒนา

  1. DebugView
    เมื่อทดสอบการติดตั้งใช้งานครั้งแรก ให้ใช้ DebugView เพื่อดูข้อมูลการทดสอบ ad_impression ในคอนโซล เมื่อเลือกเหตุการณ์ ad_impression คุณจะตรวจสอบ พารามิเตอร์ที่คุณส่งในแผงพารามิเตอร์ (ทางด้านขวา ของหน้าจอ) ซึ่งจะช่วยยืนยันว่า ข้อมูลที่ถูกต้อง ประมวลผลแล้ว

  2. เรียลไทม์
    เมื่อทำให้แอปใช้งานได้แล้ว ให้ใช้ Google Analytics รายงานแบบเรียลไทม์ เพื่อยืนยันว่าการใช้งาน ทำงานได้อย่างถูกต้อง ในรายงานแบบเรียลไทม์ ดูการ์ดจํานวนเหตุการณ์ตามชื่อเหตุการณ์ แล้วเลือก ad_impression เพื่อดู รายละเอียดเหตุการณ์และพารามิเตอร์ในช่วง 30 นาทีที่ผ่านมา

  3. BigQuery
    ใช้การส่งออก BigQuery เพื่อดึงข้อมูล ตัวอย่างของเหตุการณ์ ad_impression อย่างน้อย 1 วัน ใช้ข้อมูลที่ดึงข้อมูลมานี้ ตัวอย่างเพื่อหาปัญหา เช่น ค่าเป็น 0 หรือไม่ได้ตั้งค่า และนำการแก้ไขไปใช้ ลงในโค้ดสำหรับ Use Case ที่ไม่มีการจัดการ

ขั้นตอนถัดไป

ไปที่แดชบอร์ด Analytics ในคอนโซล Firebase หรือในโฆษณาที่ลิงก์ไว้ พร็อพเพอร์ตี้ Analytics ในคอนโซล Analytics พิจารณารายได้จากโฆษณา เป็นเมตริก เช่น รายได้เฉลี่ยต่อผู้ใช้ (ARPU) และตลอดอายุการใช้งาน มูลค่า (LTV)