ใช้โฆษณาการแสดงภาพซ้อนภาพ (เบต้า)

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

การแสดงภาพซ้อนภาพ

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

คู่มือนี้ครอบคลุมการขอและแสดงโฆษณาแบบ Picture-in-Picture ในแอปของคุณ โดยใช้ Google Mobile Ads SDK

ก่อนเริ่มต้น

ก่อนดำเนินการต่อ ให้ทำดังนี้

โหลดโฆษณา

หากต้องการโหลดออบเจ็กต์ GADPictureInPictureAd ให้สร้างคำขอโฆษณาและเรียกใช้เมธอด load ดังนี้

Swift

private func loadPictureInPictureAd() async {
  do {
    // Capture the PictureInPictureAd reference for later use.
    pipAd = try await PictureInPictureAd.load(
      with: adUnitID, request: Request())
    // Set the delegate to be notified of ad events.
    pipAd?.delegate = self
  } catch {
    print(
      "Picture-in-Picture ad failed to load: \(error.localizedDescription)")
  }
}

แทนที่ adUnitID ด้วยรหัสหน่วยโฆษณา

Objective-C

- (void)loadPictureInPictureAd {
  GADRequest *request = [GADRequest request];

  [GADPictureInPictureAd
       loadWithAdUnitID:kAdUnitID
                request:request
      completionHandler:^(GADPictureInPictureAd *_Nullable ad, NSError *_Nullable error) {
        if (error) {
          NSLog(@"Picture-in-Picture ad failed to load: %@", error);
          return;
        }
        // Capture the PictureInPictureAd reference for later use.
        self.pipAd = ad;
        // Set the delegate to be notified of ad events.
        self.pipAd.delegate = self;
      }];
}

แทนที่ kAdUnitID ด้วยรหัสหน่วยโฆษณา

แสดงโฆษณา

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

Swift

private func showPictureInPictureAd() {
  // Use the loaded PictureInPictureAd instance.
  guard let pipAd else {
    print("No ad to show.")
    return
  }
  let options = PictureInPictureAdOptions()
  // Uses the Google Mobile Ads SDK's default screen position.
  options.position = .default
  // Binds the ad lifecycle to the host screen.
  options.presentationScope = .screen

  pipAd.show(with: options)
}

Objective-C

- (void)showPictureInPictureAd {
  // Use the loaded PictureInPictureAd instance.
  if (!self.pipAd) {
    NSLog(@"No ad to show.");
    return;
  }
  GADPictureInPictureAdOptions *options =
      [[GADPictureInPictureAdOptions alloc] init];
  // Uses the Google Mobile Ads SDK's default screen position.
  options.position = GADPictureInPictureAdPositionDefault;
  // Binds the ad lifecycle to the host screen.
  options.presentationScope = GADPictureInPictureAdPresentationScopeScreen;

  [self.pipAd showWithOptions:options];
}

กำหนดตำแหน่ง

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

Swift

private func createTopLeftPositionOptions() -> PictureInPictureAdOptions {
  let options = PictureInPictureAdOptions()
  // Sets the ad position to the top-left corner of the screen.
  options.position = .topLeft
  return options
}

Objective-C

- (GADPictureInPictureAdOptions *)createTopLeftPositionOptions {
  GADPictureInPictureAdOptions *options =
      [[GADPictureInPictureAdOptions alloc] init];
  // Sets the ad position to the top-left corner of the screen.
  options.position = GADPictureInPictureAdPositionTopLeft;
  return options;
}

ดูตำแหน่งว่างทั้งหมดได้ที่ GADPictureInPictureAdPosition

กำหนดขอบเขตการนำเสนอ

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

Swift

private func createApplicationScopedOptions() -> PictureInPictureAdOptions {
  let options = PictureInPictureAdOptions()
  // Keeps the ad visible beyond the host screen's lifecycle.
  options.presentationScope = .application
  return options
}

Objective-C

- (GADPictureInPictureAdOptions *)createApplicationScopedOptions {
  GADPictureInPictureAdOptions *options =
      [[GADPictureInPictureAdOptions alloc] init];
  // Keeps the ad visible beyond the host screen's lifecycle.
  options.presentationScope = GADPictureInPictureAdPresentationScopeApplication;
  return options;
}

ดูข้อมูลเพิ่มเติมได้ที่ทำให้โฆษณามองเห็นได้ในทุกหน้าจอ

ตั้งค่าการเรียกกลับของเหตุการณ์โฆษณา

หากต้องการจัดการเหตุการณ์วงจรโฆษณาแบบภาพซ้อนภาพ ให้ตั้งค่า Callback ของเหตุการณ์ใน โฆษณาก่อนแสดง การเรียกกลับนี้จะรายงานเหตุการณ์มาตรฐาน เช่น การคลิก และการแสดงผล การเรียกกลับนี้ยังรายงานเหตุการณ์เฉพาะการแสดงภาพซ้อนภาพ เช่น เมื่อโฆษณาแสดงหรือซ่อนอยู่ด้วย

Swift

func pictureInPictureAdDidShow(_ pictureInPictureAd: PictureInPictureAd) {
  print("Picture-in-Picture ad shown.")
}

func pictureInPictureAdDidHide(_ pictureInPictureAd: PictureInPictureAd) {
  print("Picture-in-Picture ad hidden.")
}

func pictureInPictureAdDidFailToShow(
  _ pictureInPictureAd: PictureInPictureAd, error: Error
) {
  print("Picture-in-Picture ad failed to show: \(error.localizedDescription)")
}

func pictureInPictureAdDidRecordImpression(
  _ pictureInPictureAd: PictureInPictureAd
) {
  print("Picture-in-Picture ad recorded an impression.")
}

func pictureInPictureAdDidRecordClick(
  _ pictureInPictureAd: PictureInPictureAd
) {
  print("Picture-in-Picture ad recorded a click.")
}

func pictureInPictureAdWillPresentScreen(
  _ pictureInPictureAd: PictureInPictureAd
) {
  print("Picture-in-Picture ad will present screen.")
}

func pictureInPictureAdWillDismissScreen(
  _ pictureInPictureAd: PictureInPictureAd
) {
  print("Picture-in-Picture ad will dismiss screen.")
}

func pictureInPictureAdDidDismissScreen(
  _ pictureInPictureAd: PictureInPictureAd
) {
  print("Picture-in-Picture ad dismissed screen.")
}

Objective-C

- (void)pictureInPictureAdDidShow:(GADPictureInPictureAd *)pictureInPictureAd {
  NSLog(@"Picture-in-Picture ad shown.");
}

- (void)pictureInPictureAdDidHide:(GADPictureInPictureAd *)pictureInPictureAd {
  NSLog(@"Picture-in-Picture ad hidden.");
}

- (void)pictureInPictureAdDidFailToShow:(GADPictureInPictureAd *)pictureInPictureAd
                              withError:(NSError *)error {
  NSLog(@"Picture-in-Picture ad failed to show: %@", error);
}

- (void)pictureInPictureAdDidRecordImpression:(GADPictureInPictureAd *)pictureInPictureAd {
  NSLog(@"Picture-in-Picture ad recorded an impression.");
}

- (void)pictureInPictureAdDidRecordClick:(GADPictureInPictureAd *)pictureInPictureAd {
  NSLog(@"Picture-in-Picture ad recorded a click.");
}

- (void)pictureInPictureAdWillPresentScreen:(GADPictureInPictureAd *)pictureInPictureAd {
  NSLog(@"Picture-in-Picture ad will present screen.");
}

- (void)pictureInPictureAdWillDismissScreen:(GADPictureInPictureAd *)pictureInPictureAd {
  NSLog(@"Picture-in-Picture ad will dismiss screen.");
}

- (void)pictureInPictureAdDidDismissScreen:(GADPictureInPictureAd *)pictureInPictureAd {
  NSLog(@"Picture-in-Picture ad dismissed screen.");
}

ซ่อนโฆษณา

หากต้องการนำโฆษณาลอยออกจากหน้าจอ ให้เรียกใช้เมธอด hide เมธอดนี้ เรียกใช้ Callback ของเหตุการณ์ที่ซ่อนโฆษณา

Swift

private func hidePictureInPictureAd() {
  // Use the loaded PictureInPictureAd instance.
  guard let pipAd else {
    print("No ad to hide.")
    return
  }
  pipAd.hide()
}

Objective-C

- (void)hidePictureInPictureAd {
  // Use the loaded PictureInPictureAd instance.
  if (!self.pipAd) {
    NSLog(@"No ad to hide.");
    return;
  }
  [self.pipAd hide];
}

ล้างข้อมูลทรัพยากรโฆษณา

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

Swift

private func cleanUpPictureInPictureAd() {
  pipAd?.hide()
  pipAd = nil
}

Objective-C

- (void)cleanUpPictureInPictureAd {
  [self.pipAd hide];
  self.pipAd = nil;
}

แสดงโฆษณาในหน้าจอต่างๆ

เมื่อตั้งค่าขอบเขตของงานนำเสนอเป็นแอปพลิเคชัน โฆษณาแบบ Picture-in-Picture จะยังคงมองเห็นได้แม้ว่าแอปจะนำหน้าจอโฮสติ้งออกจากหน่วยความจำแล้วก็ตาม หากต้องการโต้ตอบหรือปิดโฆษณาเมื่อผู้ใช้ออกจากหน้าจอโฮสต์ แอปของคุณต้องคงสิทธิ์เข้าถึงโฆษณาแบบภาพซ้อนภาพไว้ เราขอแนะนําให้ เก็บโฆษณาไว้ในตัวจัดการสถานะที่ใช้ร่วมกันหรือ Singleton ระดับแอปแทนที่จะเก็บไว้ใน ตัวแปรอินสแตนซ์ของหน้าจอเดียว