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

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

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

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

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

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

ca-app-pub-3940256099942544/1712485313

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

สําหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการทํางานของโฆษณาทดสอบของ SDK โฆษณาในอุปกรณ์เคลื่อนที่ โปรดดูโฆษณาทดสอบ

การใช้งาน

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

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

โหลดโฆษณา

การโหลดโฆษณาทําได้โดยใช้เมธอด loadWithAdUnitID:request:completionHandler: แบบคงที่ในคลาส GADRewardedAd วิธีการโหลดต้องมีรหัสหน่วยโฆษณาของคุณ ออบเจ็กต์ GADRequest และเครื่องจัดการการดําเนินการที่จะถูกเรียกเมื่อการโหลดโฆษณาสําเร็จหรือล้มเหลว ออบเจ็กต์ GADRewardedAd ที่โหลดระบุไว้เป็นพารามิเตอร์ในเครื่องจัดการที่สําเร็จ ตัวอย่างด้านล่างแสดงวิธีโหลด GADRewardedAd ในคลาส ViewController

Swift

import GoogleMobileAds
import UIKit

class ViewController: UIViewController {

  private var rewardedAd: GADRewardedAd?

  func loadRewardedAd() {
    let request = GADRequest()
    GADRewardedAd.load(withAdUnitID:"ca-app-pub-3940256099942544/1712485313",
                       request: request,
                       completionHandler: { [self] ad, error in
      if let error = error {
        print("Failed to load rewarded ad with error: \(error.localizedDescription)")
        return
      }
      rewardedAd = ad
      print("Rewarded ad loaded.")
    }
    )
  }
}

Objective-C

@import GoogleMobileAds;
@import UIKit;

@interface ViewController ()

@property(nonatomic, strong) GADRewardedAd *rewardedAd;

@end

@implementation ViewController
- (void)loadRewardedAd {
  GADRequest *request = [GADRequest request];
  [GADRewardedAd
       loadWithAdUnitID:@"ca-app-pub-3940256099942544/1712485313"
                request:request
      completionHandler:^(GADRewardedAd *ad, NSError *error) {
        if (error) {
          NSLog(@"Rewarded ad failed to load with error: %@", [error localizedDescription]);
          return;
        }
        self.rewardedAd = ad;
        NSLog(@"Rewarded ad loaded.");
      }];
}

[ไม่บังคับ] ตรวจสอบโค้ดเรียกกลับการยืนยันฝั่งเซิร์ฟเวอร์ (SSV)

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

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

Swift

GADRewardedInterstitialAd.load(withAdUnitID:"ca-app-pub-3940256099942544/1712485313",
                       request: request,
                       completionHandler: { [self] ad, error in
      if let error != error {
      rewardedInterstitialAd = ad
      let options = GADServerSideVerificationOptions()
      options.customRewardString = "SAMPLE_CUSTOM_DATA_STRING"
      rewardedInterstitialAd.serverSideVerificationOptions = options
    }

Objective-C

GADRequest *request = [GADRequest request];
[GADRewardedInterstitialAd
     loadWithAdUnitID:@"ca-app-pub-3940256099942544/1712485313"
              request:request
    completionHandler:^(GADRewardedInterstitialAd *ad, NSError *error) {
      if (error) {
        // Handle Error
        return;
      }
      self.rewardedInterstitialAd = ad;
      GADServerSideVerificationOptions *options =
          [[GADServerSideVerificationOptions alloc] init];
      options.customRewardString = @"SAMPLE_CUSTOM_DATA_STRING";
      ad.serverSideVerificationOptions = options;
    }];

ลงทะเบียนสําหรับการติดต่อกลับ

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

Swift

class ViewController: UIViewController, GADFullScreenContentDelegate {

  private var rewardedAd: GADRewardedAd?

  func loadRewardedAd() {
    let request = GADRequest()
    GADRewarded.load(withAdUnitID:"ca-app-pub-3940256099942544/1712485313",
                     request: request,
                     completionHandler: { [self] ad, error in
      if let error = error {
        print("Failed to load rewarded ad with error: \(error.localizedDescription)")
        return
      }
      rewardedAd = ad
      print("Rewarded ad loaded.")
      rewardedAd?.fullScreenContentDelegate = self
    }
    )
  }

  /// Tells the delegate that the ad failed to present full screen content.
  func ad(_ ad: GADFullScreenPresentingAd, didFailToPresentFullScreenContentWithError error: Error) {
    print("Ad did fail to present full screen content.")
  }

  /// Tells the delegate that the ad will present full screen content.
  func adWillPresentFullScreenContent(_ ad: GADFullScreenPresentingAd) {
    print("Ad will present full screen content.")
  }

  /// Tells the delegate that the ad dismissed full screen content.
  func adDidDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) {
    print("Ad did dismiss full screen content.")
  }
}

Objective-C

@interface ViewController ()<GADFullScreenContentDelegate>

@property(nonatomic, strong) GADRewardedAd *rewardedAd;

@end

@implementation ViewController
- (void)loadRewardedAd {
  GADRequest *request = [GADRequest request];
  [GADRewardedAd
       loadWithAdUnitID:@"ca-app-pub-3940256099942544/4806952744"
                request:request
      completionHandler:^(GADRewardedAd *ad, NSError *error) {
        if (error) {
          NSLog(@"Rewarded ad failed to load with error: %@", [error localizedDescription]);
          return;
        }
        self.rewardedAd = ad;
        NSLog(@"Rewarded ad loaded.");
        self.rewardedAd.fullScreenContentDelegate = self;
      }];
}

/// Tells the delegate that the ad failed to present full screen content.
- (void)ad:(nonnull id<GADFullScreenPresentingAd>)ad
    didFailToPresentFullScreenContentWithError:(nonnull NSError *)error {
    NSLog(@"Ad did fail to present full screen content.");
}

/// Tells the delegate that the ad will present full screen content.
- (void)adWillPresentFullScreenContent:(nonnull id<GADFullScreenPresentingAd>)ad {
    NSLog(@"Ad will present full screen content.");
}

/// Tells the delegate that the ad dismissed full screen content.
- (void)adDidDismissFullScreenContent:(nonnull id<GADFullScreenPresentingAd>)ad {
    NSLog(@"Ad did dismiss full screen content.");
}

GADRewardedAd เป็นการใช้ครั้งเดียว ซึ่งหมายความว่าเมื่อโฆษณาที่มีการให้รางวัลแสดง แล้ว โฆษณานั้นจะไม่สามารถแสดงผลได้อีก แนวทางปฏิบัติที่ดีที่สุดคือการโหลดโฆษณาที่มีการให้รางวัลรายการอื่นในเมธอด adDidDismissFullScreenContent: บน GADFullScreenContentDelegate เพื่อให้โฆษณาที่มีการให้รางวัลถัดไปเริ่มโหลดทันทีที่ระบบปิดโฆษณาก่อนหน้า

แสดงโฆษณาและจัดการกิจกรรมรางวัล

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

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

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

Swift

func show() {
  if let ad = rewardedAd {
    ad.present(fromRootViewController: self) {
      let reward = ad.adReward
      print("Reward received with currency \(reward.amount), amount \(reward.amount.doubleValue)")
      // TODO: Reward the user.
    }
  } else {
    print("Ad wasn't ready")
  }
}

Objective-C

- (void)show {
  ...
  if (self.rewardedAd) {
    [self.rewardedAd presentFromRootViewController:self
                                  userDidEarnRewardHandler:^{
                                  GADAdReward *reward =
                                      self.rewardedAd.adReward;
                                  // TODO: Reward the user!
                                }];
  } else {
    NSLog(@"Ad wasn't ready");
  }
}

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

ฉันจะดูรายละเอียดรางวัลของ 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

  • ตัวอย่างโฆษณาที่มีการให้รางวัล ได้แก่ Swift | Objective-C

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

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