ตั้งค่าโฆษณาที่มีการให้รางวัล

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

เพื่อลดเวลาในการตอบสนองของการนำเสนอและตรวจสอบว่ามีโฆษณาพร้อมใช้งานเมื่อผู้ใช้ได้รับรางวัล Google Mobile Ads SDK for React Native ใช้การโหลดโฆษณาล่วงหน้าเพื่อจัดการการโหลดในเบื้องหลัง การแคช และการเติมบัฟเฟอร์

คู่มือนี้แสดงวิธีผสานรวมโฆษณาที่มีการให้รางวัลในแอป React Native

ข้อกำหนดเบื้องต้น

โปรดทำสิ่งต่อไปนี้ก่อนดำเนินการต่อ

Android

ca-app-pub-3940256099942544/5224354917

iOS

ca-app-pub-3940256099942544/1712485313

ทำความเข้าใจการโหลดโฆษณาล่วงหน้า

การโหลดโฆษณาล่วงหน้าใน Google Mobile Ads SDK for React Native จะโหลดและแคชโฆษณาโดยอัตโนมัติ

การโหลดโฆษณาล่วงหน้ามีประโยชน์ดังนี้

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

หากต้องการโหลดโฆษณาด้วยตนเอง โปรดดูโหลดโฆษณาที่มีการให้รางวัลรายการเดียว

เริ่มโหลดล่วงหน้า

หากต้องการเริ่มโหลดโฆษณาล่วงหน้า ให้เรียกใช้เมธอด RewardedAdPreloader.start แล้วส่งค่า preloadId, การตั้งค่า และ Callback เหตุการณ์เพื่อตรวจสอบการเปลี่ยนแปลงสถานะบัฟเฟอร์ ดังนี้

export function startRewardedAdPreloader(
  adUnitId: string,
  preloadId: string,
  customPreloadCallback?: PreloadCallback,
): boolean {
  const started = RewardedAdPreloader.start(
    preloadId,
    {
      request: {adUnitId},
      bufferSize: 2,
    },
    {
      // Called when an ad is preloaded into the buffer.
      onAdPreloaded: (event) => {
        console.log(`Rewarded ad preloaded for ${event.preloadId}`);
        customPreloadCallback?.onAdPreloaded?.(event);
      },
      // Called when an ad fails to preload.
      onAdFailedToPreload: (error: LoadAdError) => {
        console.error('Failed to preload rewarded ad:', error.message);
        customPreloadCallback?.onAdFailedToPreload?.(error);
      },
      // Called when all preloaded ads in the buffer have been shown.
      onAdsExhausted: () => {
        console.log('Rewarded ad buffer exhausted.');
        customPreloadCallback?.onAdsExhausted?.();
      },
    },
  );
  return started;
}

รหัสการโหลดล่วงหน้าคือสตริงที่ระบุการกำหนดค่าการโหลดโฆษณาล่วงหน้าโดยไม่ซ้ำกัน หากคุณใช้รหัสหน่วยโฆษณาสำหรับการกำหนดค่าการโหลดล่วงหน้าแบบเดี่ยวในแอป คุณสามารถใช้รหัสหน่วยโฆษณานั้นเป็นรหัสการโหลดล่วงหน้าได้ หากแอปของคุณต้องใช้ตัวโหลดล่วงหน้าหลายตัวสำหรับรหัสหน่วยโฆษณาเดียวกัน ให้ส่งสตริงที่แตกต่างกันสำหรับรหัสการโหลดล่วงหน้าแต่ละรหัส

เมื่อแอปของคุณดึงโฆษณาที่โหลดไว้ล่วงหน้าจากบัฟเฟอร์ Google Mobile Ads SDK for React Native จะขอโฆษณาทดแทนในเบื้องหลังเพื่อเติมบัฟเฟอร์อีกครั้ง หากไม่มีโฆษณาที่โหลดไว้ล่วงหน้าเหลืออยู่ในบัฟเฟอร์ Google Mobile Ads SDK for React Native จะเรียกใช้ onAdsExhausted

ขีดจำกัดแคชที่โหลดล่วงหน้า

Google Mobile Ads SDK for React Native บังคับใช้ขีดจำกัดทั่วทั้งแอปสำหรับจำนวนโฆษณาที่โหลดล่วงหน้าทั้งหมดในหน่วยโฆษณาและรหัสการโหลดล่วงหน้าทั้งหมด ดังนี้

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

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

สำรวจและแสดงโฆษณา

ก่อนแสดงโฆษณา ให้ยืนยันว่ามีโฆษณาพร้อมแสดงโดยเรียกใช้เมธอด RewardedAdPreloader.isAdAvailable หากต้องการดึงข้อมูลโฆษณา ให้เรียกใช้เมธอด RewardedAdPreloader.pollAd

หากต้องการฟังเหตุการณ์การนำเสนอ เช่น การปิดโฆษณาหรือการแสดงผลไม่สำเร็จ ให้ตั้งค่าพร็อพเพอร์ตี้ adEventCallback ในอินสแตนซ์โฆษณาก่อนเรียกใช้เมธอด show ดังนี้

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

export function showPreloadedRewardedAd(
  preloadId: string,
  onRewardEarned: (reward: Reward) => void,
  customAdEventCallback?: FullScreenAdEventCallback,
) {
  if (!RewardedAdPreloader.isAdAvailable(preloadId)) {
    console.log('No preloaded rewarded ad available right now.');
    return;
  }

  const ad = RewardedAdPreloader.pollAd(preloadId);
  if (!ad) {
    return;
  }

  ad.adEventCallback = {
    // Called when the ad is presented on screen.
    onAdShowedFullScreenContent: () => {
      console.log('Preloaded rewarded ad showed full screen content.');
      customAdEventCallback?.onAdShowedFullScreenContent?.();
    },
    // Called when the ad is closed by the user.
    onAdDismissedFullScreenContent: () => {
      console.log('Preloaded rewarded ad dismissed full screen content.');
      customAdEventCallback?.onAdDismissedFullScreenContent?.();
      ad.destroy();
    },
    // Called when presentation fails.
    onAdFailedToShowFullScreenContent: (error) => {
      console.error('Failed to show preloaded rewarded ad:', error);
      customAdEventCallback?.onAdFailedToShowFullScreenContent?.(error);
      ad.destroy();
    },
    // Called when an impression is recorded.
    onAdImpression: () => {
      console.log('Preloaded rewarded ad recorded an impression.');
      customAdEventCallback?.onAdImpression?.();
    },
    // Called when the user taps the ad.
    onAdClicked: () => {
      console.log('Preloaded rewarded ad was clicked.');
      customAdEventCallback?.onAdClicked?.();
    },
    // Called when the ad is estimated to have earned money.
    onAdPaid: (adValue) => {
      console.log(
        `Preloaded rewarded ad paid: ${adValue.amountMicros}` +
          ` ${adValue.currencyCode}`,
      );
      customAdEventCallback?.onAdPaid?.(adValue);
    },
  };

  ad.show(onRewardEarned);
}

หากต้องการปล่อยหน่วยความจำและทรัพยากร ให้เรียกใช้เมธอด ad.destroy ใน Callback onAdDismissedFullScreenContent และ onAdFailedToShowFullScreenContent

อ่านข้อมูลการตอบกลับ

หากต้องการตรวจสอบข้อมูลการตอบกลับของโฆษณาที่โหลดไว้ล่วงหน้าถัดไปโดยไม่ต้องนำโฆษณาออกจากแคช ให้เรียกใช้เมธอด RewardedAdPreloader.peekAdResponseInfo ดังนี้

export function peekRewardedAdResponseInfo(
  preloadId: string,
): ResponseInfo | null {
  const responseInfo = RewardedAdPreloader.peekAdResponseInfo(preloadId);
  if (responseInfo) {
    console.log('Next preloaded rewarded ad response info:', responseInfo);
  }
  return responseInfo;
}

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

ไม่บังคับ: ตรวจสอบความถูกต้องของ Callback การยืนยันฝั่งเซิร์ฟเวอร์

หากแอปของคุณต้องใช้พารามิเตอร์การยืนยันที่กำหนดเอง เช่น รหัสผู้ใช้หรือข้อมูลเมตาของรางวัลที่กำหนดเองใน Callback ของการยืนยันฝั่งเซิร์ฟเวอร์ (SSV) ให้ตั้งค่าพร็อพเพอร์ตี้ serverSideVerificationOptions ในอินสแตนซ์โฆษณาที่สำรวจก่อนเรียกใช้ show

ระบบจะส่งค่าที่คุณตั้งไว้ไปยังพารามิเตอร์การค้นหา SSV Callback ดังนี้

  • userId: ส่งไปยังพารามิเตอร์การค้นหา user_id เพื่อระบุผู้ใช้
  • customData: ส่งไปยังพารามิเตอร์การค้นหา custom_data เพื่อส่งต่อข้อมูลเมตาที่กำหนดเอง

ตัวอย่างต่อไปนี้จะตั้งค่า ServerSideVerificationOptions (customData และ userId) ในออบเจ็กต์โฆษณาที่มีการให้รางวัลก่อนแสดงโฆษณา

export function setServerSideVerificationRewarded(ad: RewardedAd) {
  ad.serverSideVerificationOptions = {
    userId: 'user_123',
    customData: 'sample_custom_data',
  };
}

ล้างทรัพยากร

หากไม่จำเป็นต้องแสดงโฆษณาสำหรับรหัสการโหลดล่วงหน้าที่เฉพาะเจาะจงในช่วงที่เหลือของเซสชันอีกต่อไป ให้เรียกใช้เมธอด RewardedAdPreloader.destroy กระบวนการนี้จะหยุดการโหลดล่วงหน้าสำหรับรหัสการโหลดล่วงหน้านั้น และนำโฆษณาที่โหลดล่วงหน้าที่ไม่ได้ใช้ออกจากหน่วยความจำ

ตัวอย่างต่อไปนี้จะหยุดการโหลดล่วงหน้า

export function destroyRewardedAdPreloader(preloadId: string) {
  RewardedAdPreloader.destroy(preloadId);
}

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

ดูตัวอย่างแบบเต็ม

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

export function RewardedScreen() {
  const [numAdsAvailable, setNumAdsAvailable] = useState<number>(0);
  const [status, setStatus] = useState<string>('Preloader idle.');
  const [reward, setReward] = useState<string | null>(null);

  const refreshAdCount = () => {
    const count = RewardedAdPreloader.getNumAdsAvailable(PRELOAD_ID);
    setNumAdsAvailable(count);
  };

  useEffect(() => {
    // Start preloading ads on component mount
    const started = startRewardedAdPreloader(REWARDED_AD_UNIT_ID, PRELOAD_ID, {
      onAdPreloaded: () => {
        refreshAdCount();
        setStatus('Rewarded ad preloaded into buffer.');
      },
      onAdFailedToPreload: (error) => {
        setStatus(`Failed to preload rewarded ad: ${error.message}`);
      },
      onAdsExhausted: () => {
        refreshAdCount();
        setStatus('Preload buffer exhausted for rewarded ads.');
      },
    });
    if (started) {
      setStatus('Preloader started.');
    }

    // Clean up preloader resources on component unmount
    return () => {
      destroyRewardedAdPreloader(PRELOAD_ID);
    };
  }, []);

  const handleShowAd = () => {
    setReward(null);
    setStatus('Showing preloaded ad...');
    showPreloadedRewardedAd(
      PRELOAD_ID,
      (userReward) => {
        setReward(`${userReward.amount} ${userReward.type}`);
      },
      {
        onAdDismissedFullScreenContent: () => {
          setStatus('Ad dismissed.');
        },
        onAdFailedToShowFullScreenContent: (error) => {
          setStatus(`Failed to show preloaded ad: ${error.message}`);
        },
      },
    );
    refreshAdCount();
  };

  return (
    <View style={styles.container}>
      <Text style={styles.title}>Preload Rewarded Ads</Text>
      <Text style={styles.status}>Status: {status}</Text>
      <Text style={styles.status}>Ads Available: {numAdsAvailable}</Text>
      {reward && <Text style={styles.rewardText}>Earned: {reward}</Text>}
      <View style={styles.buttonGroup}>
        <Button
          title="Show Preloaded Ad"
          onPress={handleShowAd}
          disabled={numAdsAvailable === 0}
        />
      </View>
    </View>
  );
}

แทนที่ค่าต่อไปนี้

  • REWARDED_AD_UNIT_ID ด้วยรหัสหน่วยโฆษณา
  • PRELOAD_ID ด้วยรหัส Preloader

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

หลังจากผสานรวมโฆษณาที่มีการให้รางวัลแล้ว ให้สำรวจหัวข้อต่อไปนี้