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

เลือกแพลตฟอร์ม: Android iOS Unity Flutter

โฆษณาที่มีการให้รางวัลคือโฆษณาที่ผู้ใช้มีตัวเลือกในการโต้ตอบเพื่อแลก กับรางวัลในแอป คู่มือนี้ จะแสดงวิธีผสานรวมโฆษณาที่มีการให้รางวัลจาก AdMob เข้ากับแอป iOS อ่านเรื่องราวความสำเร็จของลูกค้าบางราย กรณีศึกษา 1 กรณีศึกษา 2

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

ทดสอบด้วยโฆษณาทดสอบเสมอ

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

วิธีที่ง่ายที่สุดในการโหลดโฆษณาทดสอบคือการใช้รหัสหน่วยโฆษณาทดสอบเฉพาะสำหรับโฆษณาที่มีการให้รางวัลใน iOS

ca-app-pub-3940256099942544/1712485313

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

ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีการทำงานของโฆษณาทดสอบของ Mobile Ads SDK ได้ที่โฆษณาทดสอบ

การใช้งาน

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

  • โหลดโฆษณา
  • [ไม่บังคับ] ตรวจสอบการเรียกกลับ SSV
  • ลงทะเบียนเพื่อรับการโทรกลับ
  • แสดงโฆษณาและจัดการเหตุการณ์รางวัล

โหลดโฆษณา

การโหลดโฆษณาจะทำได้โดยใช้เมธอด load(adUnitID:request) ในคลาส GADRewardedAd

Swift

func loadRewardedAd() async {
  do {
    rewardedAd = try await RewardedAd.load(
      // Replace this ad unit ID with your own ad unit ID.
      with: "ca-app-pub-3940256099942544/1712485313", request: Request())
    rewardedAd?.fullScreenContentDelegate = self
  } catch {
    print("Rewarded ad failed to load with error: \(error.localizedDescription)")
  }
}

SwiftUI

import GoogleMobileAds

class RewardedViewModel: NSObject, ObservableObject, FullScreenContentDelegate {
  @Published var coins = 0
  private var rewardedAd: RewardedAd?

  func loadAd() async {
    do {
      rewardedAd = try await RewardedAd.load(
        with: "ca-app-pub-3940256099942544/1712485313", request: Request())
      rewardedAd?.fullScreenContentDelegate = self
    } catch {
      print("Failed to load rewarded ad with error: \(error.localizedDescription)")
    }
  }

Objective-C

// Replace this ad unit ID with your own ad unit ID.
[GADRewardedAd loadWithAdUnitID:@"ca-app-pub-3940256099942544/1712485313"
              request:[GADRequest request]
    completionHandler:^(GADRewardedAd *ad, NSError *error) {
      if (error) {
        NSLog(@"Rewarded ad failed to load with error: %@", [error localizedDescription]);
        return;
      }
      self.rewardedAd = ad;
      self.rewardedAd.fullScreenContentDelegate = self;
    }];

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

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

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

Swift

do {
  rewardedAd = try await RewardedAd.load(
    // Replace this ad unit ID with your own ad unit ID.
    with: "ca-app-pub-3940256099942544/1712485313", request: Request())
  let options = ServerSideVerificationOptions()
  options.customRewardText = "SAMPLE_CUSTOM_DATA_STRING"
  rewardedAd?.serverSideVerificationOptions = options
} catch {
  print("Rewarded ad failed to load with error: \(error.localizedDescription)")
}

Objective-C

// Replace this ad unit ID with your own ad unit ID.
[GADRewardedAd loadWithAdUnitID:@"ca-app-pub-3940256099942544/1712485313"
                        request:[GADRequest request]
              completionHandler:^(GADRewardedAd *ad, NSError *error) {
                if (error) {
                  NSLog(@"Rewarded ad failed to load with error: %@", error.localizedDescription);
                  return;
                }
                self.rewardedAd = ad;
                GADServerSideVerificationOptions *options =
                    [[GADServerSideVerificationOptions alloc] init];
                options.customRewardString = @"SAMPLE_CUSTOM_DATA_STRING";
                ad.serverSideVerificationOptions = options;
              }];

ลงทะเบียนเพื่อรับการโทรกลับ

หากต้องการรับการแจ้งเตือนสำหรับกิจกรรมการนำเสนอ คุณต้องกำหนดพร็อพเพอร์ตี้ GADFullScreenContentDelegate to thefullScreenContentDelegate` ของโฆษณาที่แสดงผล

Swift

rewardedAd?.fullScreenContentDelegate = self

SwiftUI

rewardedAd?.fullScreenContentDelegate = self

Objective-C

self.rewardedAd.fullScreenContentDelegate = self;

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

Swift

func adDidRecordImpression(_ ad: FullScreenPresentingAd) {
  print("\(#function) called.")
}

func adDidRecordClick(_ ad: FullScreenPresentingAd) {
  print("\(#function) called.")
}

func adWillPresentFullScreenContent(_ ad: FullScreenPresentingAd) {
  print("\(#function) called.")
}

func adWillDismissFullScreenContent(_ ad: FullScreenPresentingAd) {
  print("\(#function) called.")
}

func adDidDismissFullScreenContent(_ ad: FullScreenPresentingAd) {
  print("\(#function) called.")
  // Clear the rewarded ad.
  rewardedAd = nil
}

func ad(
  _ ad: FullScreenPresentingAd,
  didFailToPresentFullScreenContentWithError error: Error
) {
  print("\(#function) called with error: \(error.localizedDescription).")
}

SwiftUI

func adDidRecordImpression(_ ad: FullScreenPresentingAd) {
  print("\(#function) called")
}

func adDidRecordClick(_ ad: FullScreenPresentingAd) {
  print("\(#function) called")
}

func ad(
  _ ad: FullScreenPresentingAd,
  didFailToPresentFullScreenContentWithError error: Error
) {
  print("\(#function) called")
}

func adWillPresentFullScreenContent(_ ad: FullScreenPresentingAd) {
  print("\(#function) called")
}

func adWillDismissFullScreenContent(_ ad: FullScreenPresentingAd) {
  print("\(#function) called")
}

func adDidDismissFullScreenContent(_ ad: FullScreenPresentingAd) {
  print("\(#function) called")
  // Clear the rewarded ad.
  rewardedAd = nil
}

Objective-C

- (void)adDidRecordImpression:(id<GADFullScreenPresentingAd>)ad {
  NSLog(@"%s called", __PRETTY_FUNCTION__);
}

- (void)adDidRecordClick:(id<GADFullScreenPresentingAd>)ad {
  NSLog(@"%s called", __PRETTY_FUNCTION__);
}

- (void)adWillPresentFullScreenContent:(id<GADFullScreenPresentingAd>)ad {
  NSLog(@"%s called", __PRETTY_FUNCTION__);
}

- (void)adWillDismissFullScreenContent:(id<GADFullScreenPresentingAd>)ad {
  NSLog(@"%s called", __PRETTY_FUNCTION__);
}

- (void)adDidDismissFullScreenContent:(id<GADFullScreenPresentingAd>)ad {
  NSLog(@"%s called", __PRETTY_FUNCTION__);
  // Clear the rewarded ad.
  self.rewardedAd = nil;
}

- (void)ad:(id)ad didFailToPresentFullScreenContentWithError:(NSError *)error {
  NSLog(@"%s called with error: %@", __PRETTY_FUNCTION__, error.localizedDescription);
}

แสดงโฆษณาและจัดการเหตุการณ์รางวัล

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

เมื่อแสดงโฆษณา คุณต้องระบุออบเจ็กต์ GADUserDidEarnRewardHandler เพื่อจัดการรางวัลสำหรับผู้ใช้

โค้ดต่อไปนี้แสดงวิธีที่ดีที่สุดในการแสดงโฆษณาที่มีการให้รางวัล

Swift

rewardedAd.present(from: self) {
  let reward = rewardedAd.adReward
  print("Reward received with currency \(reward.amount), amount \(reward.amount.doubleValue)")

  // TODO: Reward the user.
}

SwiftUI

ตรวจสอบเหตุการณ์ UI ในมุมมองเพื่อพิจารณาเวลาที่จะแสดงโฆษณา

var body: some View {
  VStack(spacing: 20) {
      Button("Watch video for additional 10 coins") {
        viewModel.showAd()
        showWatchVideoButton = false
      }

แสดงโฆษณาที่มีการให้รางวัลจาก ViewModel

func showAd() {
  guard let rewardedAd = rewardedAd else {
    return print("Ad wasn't ready.")
  }

  rewardedAd.present(from: nil) {
    let reward = rewardedAd.adReward
    print("Reward amount: \(reward.amount)")
    self.addCoins(reward.amount.intValue)
  }
}

Objective-C

[self.rewardedAd presentFromRootViewController:self
                      userDidEarnRewardHandler:^{
                        GADAdReward *reward = self.rewardedAd.adReward;
                        NSString *rewardMessage = [NSString
                            stringWithFormat:@"Reward received with currency %@ , amount %lf",
                                             reward.type, [reward.amount doubleValue]];
                        NSLog(@"%@", rewardMessage);

                        // TODO: Reward the user.
                      }];

คำถามที่พบบ่อย

ฉันจะดูรายละเอียดรางวัลสำหรับ GADRewardedAd ได้ไหม
ได้ หากต้องการทราบจำนวนรางวัลก่อนที่จะเรียกใช้userDidEarnRewardการเรียกกลับ GADRewardedAd มีพร็อพเพอร์ตี้ adReward ที่คุณสามารถตรวจสอบเพื่อยืนยันจำนวนรางวัลหลังจากที่โฆษณาโหลดแล้ว
การเรียกใช้การเริ่มต้นมีระยะหมดเวลาไหม
หลังจากผ่านไป 10 วินาที SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google จะเรียกใช้ GADInitializationCompletionHandler ที่ระบุไว้ในเมธอด startWithCompletionHandler: แม้ว่าเครือข่ายสื่อกลางจะยังเริ่มต้น
ไม่เสร็จก็ตาม
จะเกิดอะไรขึ้นหากเครือข่ายสื่อกลางบางเครือข่ายไม่พร้อมเมื่อฉันได้รับการเรียกกลับการเริ่มต้น

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

คุณสามารถสำรวจสถานะการเริ่มต้นของอแดปเตอร์ทั้งหมดตลอดเซสชันแอปได้โดยเรียกใช้ GADMobileAds.initializationStatus

ฉันจะรู้ได้อย่างไรว่าเหตุใดเครือข่ายสื่อกลางหนึ่งๆ จึงไม่พร้อมใช้งาน

description พร็อพเพอร์ตี้ของออบเจ็กต์ GADAdapterStatus จะอธิบายสาเหตุที่อแดปเตอร์ไม่พร้อมให้บริการคำขอโฆษณา

ตัวแฮนเดิลการดำเนินการ userDidEarnRewardHandler จะถูกเรียกใช้ก่อนเมธอดของตัวแทน adDidDismissFullScreenContent: เสมอใช่ไหม

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

ตัวอย่างใน GitHub

ดูตัวอย่างโฆษณาที่มีการให้รางวัลฉบับเต็มในภาษาที่คุณต้องการ

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

ดูข้อมูลเพิ่มเติมเกี่ยวกับความเป็นส่วนตัวของผู้ใช้