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

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

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

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

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

Android

ca-app-pub-3940256099942544/5224354917

iOS

ca-app-pub-3940256099942544/1712485313

โหลดโฆษณา

หากต้องการโหลดโฆษณาที่มีการให้รางวัล ให้เรียกใช้เมธอด load ในคลาส RewardedAd

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

export async function loadRewardedAd(
  adUnitId: string,
): Promise<RewardedAd | null> {
  try {
    const ad = await RewardedAd.load({adUnitId});
    return ad;
  } catch (error) {
    const loadError = error as LoadAdError;
    console.error('Failed to load rewarded ad:', loadError.message);
    return null;
  }
}

รอเหตุการณ์โฆษณา

ก่อนแสดงโฆษณา ให้ตั้งค่า Listener adEventCallback ในอินสแตนซ์ RewardedAd ที่โหลดแล้ว Listener นี้จะรับ Callback สำหรับเหตุการณ์ในวงจรของโฆษณา เช่น โฆษณาที่แสดงบนหน้าจอหรือผู้ใช้แตะโฆษณา ดู Callback ที่ใช้ได้ที่ AdEventCallback

ตัวอย่างต่อไปนี้ตั้งค่า Callback เพื่อรอเหตุการณ์โฆษณา

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

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

แสดงโฆษณา

หากต้องการแสดงโฆษณาที่มีการให้รางวัล ให้เรียกใช้เมธอด show พร้อม Callback เพื่อจัดการรางวัลที่ผู้ใช้ได้รับ ดังนี้

export function showRewardedAd(
  ad: RewardedAd,
  onRewardEarned: (reward: Reward) => void,
) {
  ad.show(onRewardEarned);
}

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

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

ระบบจะส่งค่าที่คุณตั้งไว้ไปยังพารามิเตอร์การค้นหา 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',
  };
}

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

ส่วนนี้จะอธิบายตัวอย่างทั้งหมดในการผสานรวมโฆษณาที่มีการให้รางวัลลงในแอป React Native

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

export function RewardedSingleLoadScreen() {
  const [ad, setAd] = useState<RewardedAd | null>(null);
  const [isLoaded, setIsLoaded] = useState(false);
  const [status, setStatus] = useState<string>('Idle');
  const [reward, setReward] = useState<string | null>(null);

  useEffect(() => {
    return () => {
      ad?.destroy();
    };
  }, [ad]);

  const handleLoad = async () => {
    setReward(null);
    setStatus('Loading Rewarded ad...');
    const loadedAd = await loadRewardedAd(REWARDED_AD_UNIT_ID);
    if (loadedAd) {
      registerAdEvents(loadedAd);
      const onDismiss =
        loadedAd.adEventCallback?.onAdDismissedFullScreenContent;
      loadedAd.adEventCallback = {
        ...loadedAd.adEventCallback,
        onAdDismissedFullScreenContent: () => {
          onDismiss?.();
          setStatus('Ad dismissed.');
        },
      };
      setAd((prevAd) => {
        prevAd?.destroy();
        return loadedAd;
      });
      setIsLoaded(true);
      setStatus('Rewarded ad loaded!');
    } else {
      setStatus('Failed to load Rewarded ad.');
    }
  };

  const handleShow = () => {
    if (ad) {
      showRewardedAd(ad, (userReward) => {
        setReward(`${userReward.amount} ${userReward.type}`);
      });
      setIsLoaded(false);
    }
  };

  return (
    <View style={styles.container}>
      <Text style={styles.title}>Rewarded Ad (Single Load)</Text>
      <Text style={styles.status}>Status: {status}</Text>
      {reward && <Text style={styles.rewardText}>Earned: {reward}</Text>}
      <View style={styles.buttonGroup}>
        <Button title="Load Ad" onPress={handleLoad} />
        <View style={styles.spacerSmall} />
        <Button title="Show Ad" onPress={handleShow} disabled={!isLoaded} />
      </View>
    </View>
  );
}

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

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