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

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

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

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

หากยังไม่ได้ดำเนินการ โปรดทํางานต่อไปนี้ให้เสร็จสมบูรณ์

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

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

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

หมายเหตุ: ผลิตภัณฑ์ 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

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

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 มีฟีเจอร์มากมายเพื่อตรวจสอบการติดตั้งใช้งาน ตลอดวงจรการพัฒนา

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

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

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

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

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