โฆษณาแบบการแสดงภาพซ้อนภาพ (PIP) จะแสดงในหน้าต่างแบบลอยที่อยู่ด้านบนของเนื้อหาบนหน้าจอ เช่น บทความ ฟีด หรือเกมเพลย์ รูปแบบนี้ช่วยให้ผู้ใช้โต้ตอบกับแอปได้ขณะที่โฆษณายังคงแสดงอยู่ หากต้องการแสดงโฆษณาที่ไม่ครอบคลุมทั้งหน้าจอ ให้เลือกรูปแบบนี้
คู่มือนี้ครอบคลุมการขอและการแสดงโฆษณาแบบภาพซ้อนภาพในแอปโดยใช้ Google Mobile Ads SDK
ก่อนเริ่มต้น
โปรดทำสิ่งต่อไปนี้ก่อนดำเนินการต่อ
ติดตั้ง Google Mobile Ads SDK เวอร์ชัน
13.10.0ขึ้นไป
เปิดใช้โฆษณาทดสอบและใช้รหัสหน่วยโฆษณาทดสอบต่อไปนี้
/21775744923/example/picture-in-picture
โหลดโฆษณา
หากต้องการโหลดออบเจ็กต์ GADPictureInPictureAd ให้สร้างคำขอโฆษณาและเรียกใช้เมธอด load ดังนี้
Swift
แทนที่ adUnitID ด้วยรหัสหน่วยโฆษณา
Objective-C
แทนที่ kAdUnitID ด้วยรหัสหน่วยโฆษณา
แสดงโฆษณา
หากต้องการแสดงโฆษณาแบบภาพซ้อนภาพบนหน้าจอ ให้เรียกใช้เมธอด 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; }
ดูข้อมูลเพิ่มเติมได้ที่ทำให้โฆษณาแสดงในหน้าจอต่างๆ
รอเหตุการณ์โฆษณา
หากต้องการจัดการเหตุการณ์ในวงจรของโฆษณาแบบการแสดงภาพซ้อนภาพ ให้ลงทะเบียนรับเหตุการณ์โฆษณาก่อนแสดงโฆษณา รายงานเหตุการณ์เหล่านี้จะรายงานการโต้ตอบกับโฆษณา เช่น การคลิกและการแสดงผล เหตุการณ์เหล่านี้ยังรายงานเหตุการณ์ที่เจาะจงสำหรับการแสดงภาพซ้อนภาพด้วย เช่น เมื่อโฆษณาแสดงหรือซ่อน
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 เมธอดนี้จะเรียกใช้เหตุการณ์ที่ซ่อนโฆษณา
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; }
ทำให้โฆษณาปรากฏบนหน้าจอต่างๆ
เมื่อคุณตั้งค่าขอบเขตการนำเสนอเป็นแอปพลิเคชัน โฆษณาแบบการแสดงภาพซ้อนภาพจะยังคงมองเห็นได้แม้ว่าแอปจะนำหน้าจอโฮสติ้งออกจากหน่วยความจำก็ตาม หากต้องการโต้ตอบหรือปิดโฆษณาเมื่อผู้ใช้ออกจากหน้าจอโฮสต์ แอปของคุณต้องคงสิทธิ์เข้าถึงโฆษณาแบบการแสดงภาพซ้อนภาพไว้ เราขอแนะนำให้เก็บโฆษณาไว้ใน Singleton ระดับแอปหรือตัวจัดการสถานะที่แชร์ แทนที่จะเก็บไว้ในตัวแปรอินสแตนซ์ของหน้าจอเดียว
ดูตัวอย่างวิธีทำให้โฆษณาปรากฏบนหน้าจอได้จากแอปตัวอย่างต่อไปนี้