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

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

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

ก่อนที่คุณจะเริ่ม

หากคุณยังไม่ได้ดำเนินการ โปรดดำเนินการต่อไปนี้ให้เสร็จสิ้น:

  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 กับ Firebase และ Analytics เพื่อเปิดใช้การวัดรายได้จากโฆษณาอัตโนมัติ Firebase SDK สำหรับ Google Analytics จะบันทึกเหตุการณ์ ad_impression โดยอัตโนมัติทุกครั้งที่ผู้ใช้เห็นการแสดงโฆษณา

แพลตฟอร์มการสร้างรายได้จากโฆษณาอื่นๆ

แพลตฟอร์ม เช่น AppLovin และ ironSource ให้ข้อมูลรายได้ระดับการแสดงผลที่คุณสามารถใช้เพื่อบันทึกเหตุการณ์ ad_impression ของ Google Analytics

ส่วนต่อไปนี้แสดงตัวอย่างการใช้งานสำหรับแพลตฟอร์มการสร้างรายได้จากโฆษณาต่างๆ

แอพโลวิน

สวิฟท์

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

วัตถุประสงค์-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);
}

ความสามัคคี

// 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);
}

แหล่งเหล็ก

สวิฟท์

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

วัตถุประสงค์-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);
    }
}

ความสามัคคี

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 นำเสนอคุณลักษณะหลายอย่างเพื่อตรวจสอบการใช้งานของคุณตลอดวงจรการพัฒนา

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

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

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

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

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