โฆษณาคั่นระหว่างหน้า

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

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

คู่มือนี้จะแสดงวิธีผสานรวมโฆษณาคั่นระหว่างหน้าเข้ากับแอป iOS

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

ตั้งค่า Google Mobile Ads SDK ก่อนดำเนินการต่อ

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

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

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

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

ดูรายละเอียดเกี่ยวกับโฆษณาทดสอบGoogle Mobile Ads SDKได้ที่ หัวข้อเปิดใช้โฆษณาทดสอบ

การใช้งาน

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

  1. โหลดโฆษณา
  2. ลงทะเบียนเพื่อรับการเรียกกลับ
  3. แสดงโฆษณา

โหลดโฆษณา

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

Swift

fileprivate func loadInterstitial() async {
  do {
    interstitial = try await AdManagerInterstitialAd.load(
      with: "/21775744923/example/interstitial", request: AdManagerRequest())
    interstitial?.fullScreenContentDelegate = self
  } catch {
    print("Failed to load interstitial ad with error: \(error.localizedDescription)")
  }
}

SwiftUI

import GoogleMobileAds

class InterstitialViewModel: NSObject, FullScreenContentDelegate {
  private var interstitialAd: InterstitialAd?

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

Objective-C

[GAMInterstitialAd loadWithAdManagerAdUnitID:@"/21775744923/example/interstitial"
                                     request:[GAMRequest request]
                           completionHandler:^(GAMInterstitialAd *ad, NSError *error) {
                             if (error) {
                               NSLog(@"Failed to load interstitial ad with error: %@",
                                     [error localizedDescription]);
                               return;
                             }
                             self.interstitial = ad;
                             self.interstitial.fullScreenContentDelegate = self;
                           }];

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

หากต้องการรับการแจ้งเตือนสำหรับเหตุการณ์การนำเสนอ คุณต้องกำหนด GADFullScreenContentDelegate ให้กับพร็อพเพอร์ตี้ fullScreenContentDelegate ของโฆษณาที่แสดง

Swift

interstitial?.fullScreenContentDelegate = self

SwiftUI

interstitialAd?.fullScreenContentDelegate = self

Objective-C

self.interstitial.fullScreenContentDelegate = self;

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

Swift

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

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

func ad(_ ad: FullScreenPresentingAd, didFailToPresentFullScreenContentWithError error: Error) {
  print("\(#function) called with error: \(error.localizedDescription)")
  // Clear the interstitial ad.
  interstitial = nil
}

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

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

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

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 interstitial ad.
  interstitialAd = nil
}

Objective-C

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

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

- (void)ad:(id<GADFullScreenPresentingAd>)ad
    didFailToPresentFullScreenContentWithError:(NSError *)error {
  NSLog(@"%s called with error: %@", __PRETTY_FUNCTION__, error.localizedDescription);
  // Clear the interstitial ad.
  self.interstitial = nil;
}

- (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 interstitial ad.
  self.interstitial = nil;
}

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

แสดงโฆษณา

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

Swift

ad.present(from: self!)

SwiftUI

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

var body: some View {
  // ...
  }
  .onChange(of: countdownTimer.isComplete) { newValue in
    showGameOverAlert = newValue
  }
  .alert(isPresented: $showGameOverAlert) {
    Alert(
      title: Text("Game Over"),
      message: Text("You lasted \(countdownTimer.countdownTime) seconds"),
      dismissButton: .cancel(
        Text("OK"),
        action: {
          viewModel.showAd()
        }))

แสดงโฆษณาคั่นระหว่างหน้าจาก View Model ดังนี้

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

  interstitialAd.present(from: nil)
}

Objective-C

[self.interstitial presentFromRootViewController:self];

แนวทางปฏิบัติแนะนำ

พิจารณาว่าโฆษณาคั่นระหว่างหน้าเป็นโฆษณาประเภทที่เหมาะสมกับแอปของคุณหรือไม่
โฆษณาคั่นระหว่างหน้าเหมาะที่สุดสำหรับแอปที่มีจุดเปลี่ยนหน้าปกติ การทำงานเสร็จภายในแอป เช่น การแชร์รูปภาพหรือเล่นเกมผ่านด่าน จะสร้างจุดเปลี่ยนหน้าดังกล่าว เนื่องจากผู้ใช้คาดหวังว่าจะมีการหยุดพักการทำงาน จึงแสดงโฆษณาคั่นระหว่างหน้าได้ง่ายโดยไม่ขัดขวางประสบการณ์ของผู้ใช้ โปรดพิจารณาว่าคุณจะแสดงโฆษณาคั่นระหว่างหน้าที่จุดใดในเวิร์กโฟลว์ของแอป และผู้ใช้มีแนวโน้มที่จะตอบสนองอย่างไร
อย่าลืมหยุดการทำงานชั่วคราวเมื่อแสดงโฆษณาคั่นระหว่างหน้า
โฆษณาคั่นระหว่างหน้ามีหลายประเภท ได้แก่ แบบข้อความ รูปภาพ วิดีโอ และอื่นๆ คุณควรตรวจสอบว่าเมื่อแอปแสดงโฆษณาคั่นระหว่างหน้า แอปจะระงับการใช้ทรัพยากรบางอย่างด้วย เพื่อให้โฆษณาสามารถใช้ประโยชน์จากทรัพยากรเหล่านั้นได้ ตัวอย่างเช่น เมื่อโทรเพื่อแสดงโฆษณาคั่นระหว่างหน้า ให้หยุดเอาต์พุตเสียงใดๆ ที่แอปของคุณสร้างขึ้นชั่วคราว คุณสามารถเล่นเสียงต่อในตัวแฮนเดิลเหตุการณ์ adDidDismissFullScreenContent: ซึ่งจะเรียกใช้เมื่อผู้ใช้โต้ตอบกับโฆษณาเสร็จแล้ว นอกจากนี้ ให้พิจารณาหยุดงานการคำนวณที่ซับซ้อนชั่วคราว (เช่น Game Loop) ขณะที่โฆษณากำลังแสดง วิธีนี้ช่วยให้ผู้ใช้ไม่พบกราฟิกที่ช้าหรือไม่ตอบสนองหรือวิดีโอที่กระตุก
เผื่อเวลาโหลดให้เพียงพอ
เช่นเดียวกับที่ต้องตรวจสอบว่าคุณแสดงโฆษณาคั่นระหว่างหน้าในเวลาที่เหมาะสม คุณก็ต้องตรวจสอบด้วยว่าผู้ใช้ไม่ต้องรอให้โฆษณาโหลด การโหลดโฆษณาล่วงหน้าก่อนที่จะแสดงจะช่วยให้แอปมีโฆษณาคั่นระหว่างหน้าที่โหลดเต็มที่พร้อมแสดงเมื่อถึงเวลา
อย่าแสดงโฆษณาให้ผู้ใช้เห็นมากเกินไป
แม้การแสดงโฆษณาคั่นระหว่างหน้าถี่ขึ้นในแอปอาจเป็นวิธีเพิ่มรายได้ที่ดี แต่อาจทำให้ประสบการณ์ของผู้ใช้แย่ลงและลดอัตราการคลิกผ่าน อย่าขัดจังหวะผู้ใช้บ่อยเกินไปจนกระทั่งไม่สนุกกับการใช้แอป
อย่าใช้การเรียกกลับการโหลดเสร็จสมบูรณ์เพื่อแสดงโฆษณาคั่นระหว่างหน้า
ซึ่งอาจทำให้ผู้ใช้ได้รับประสบการณ์การใช้งานที่ไม่ดี แต่ให้โหลดโฆษณาไว้ล่วงหน้าก่อนที่จะต้องแสดง จากนั้นตรวจสอบเมธอด canPresentFromRootViewController:error: ใน GAMInterstitialAd เพื่อดูว่าโฆษณาพร้อมแสดงหรือไม่

ตัวอย่างใน GitHub

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

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