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