คู่มือนี้มีไว้สําหรับผู้เผยแพร่โฆษณา IMA ที่ต้องการเพิ่มการรองรับภาพซ้อนภาพในการติดตั้งใช้งาน IMA ที่มีอยู่
ข้อกำหนดเบื้องต้น
- ทำตามคู่มือเริ่มต้นใช้งาน
การเพิ่มการรองรับการแสดงภาพซ้อนภาพลงในแอป
ตั้งแต่ SDK เวอร์ชัน 3.1.0 เป็นต้นไป IMA รองรับโหมดภาพในภาพ (Picture in Picture) ของ Apple สำหรับ iPad หากต้องการเพิ่มการรองรับโหมดภาพในภาพลงในแอป คุณต้องปรับการตั้งค่าบางอย่างและใช้คลาส IMA ใหม่ 2-3 คลาสตามที่แสดงด้านล่าง
การอัปเดตการตั้งค่าเพื่ออนุญาตให้เล่นขณะล็อกหน้าจอหรือขณะใช้แอปอื่น
โหมดการแสดงภาพซ้อนภาพกำหนดให้คุณอนุญาตให้เล่นสื่อในเบื้องหลังในแอป
ตั้งค่าโหมดขณะล็อกหน้าจอหรือขณะใช้แอปอื่นเป็นเปิดสำหรับเสียง, AirPlay และการแสดงภาพซ้อนภาพดังที่แสดงด้านล่าง
ตั้งค่าพร็อพเพอร์ตี้
AVAudioSession
เพื่อรองรับการเล่นขณะล็อกหน้าจอหรือขณะใช้แอปอื่น รวมถึงเปิดใช้การเล่นขณะล็อกหน้าจอหรือขณะใช้แอปอื่นในIMASettings
... – (void)viewDidLoad { [super viewDidLoad]; self.playButton.layer.zPosition = MAXFLOAT; [[AVAudioSession sharedInstance] setActive:YES error:nil]; [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil]; [self setupAdsLoader]; [self setUpContentPlayer]; } – (void)setupAdsLoader { IMASettings *settings = [[IMASettings alloc] init]; settings.enableBackgroundPlayback = YES; self.adsLoader = [[IMAAdsLoader alloc] initWithSettings:settings]; self.adsLoader.delegate = self; }
การสร้างออบเจ็กต์ iOS และ IMA ใหม่สำหรับฟีเจอร์ภาพซ้อนภาพ
Apple เพิ่มคลาส AVPictureInPictureController
และ AVPictureinPictureControllerDelegate
เพื่อรองรับโหมดภาพในภาพ IMA เพิ่ม
IMAPictureInPictureProxy
หากต้องการรวมคลาสเหล่านี้ไว้ในโปรเจ็กต์ ให้เพิ่มคำสั่งต่อไปนี้ลงในโค้ด
... @interface VideoViewController () <AVPictureInPictureControllerDelegate, IMAAdsLoaderDelegate, IMAAdsManagerDelegate, UIAlertViewDelegate> ... // PiP objects. @property(nonatomic, strong) IMAPictureInPictureProxy *pictureInPictureProxy; @property(nonatomic, strong) AVPictureInPictureController *pictureInPictureController; ... @end - (void)setUpContentPlayer { ... self.pictureInPictureProxy = [[IMAPictureInPictureProxy alloc] initWithAVPictureInPictureControllerDelegate:self]; self.pictureInPictureController = [[AVPictureInPictureController alloc] initWithPlayerLayer:self.contentPlayerLayer]; self.pictureInPictureController.delegate = self.pictureInPictureProxy; }
การแก้ไขคําขอโฆษณา
โปรดสร้างออบเจ็กต์ใหม่อีก 1 รายการ: IMAAVPlayerVideoDisplay
ข้อมูลนี้จะส่งไปยังคอนสตรคเตอร์ IMAAdsRequest
และช่วยให้ SDK แทรกโฆษณาลงในหน้าต่าง PIP ได้เมื่อวิดีโอเล่นในโหมดภาพซ้อนภาพ
... - (void)requestAdsWithTag:(NSString *)adTagUrl { [self logMessage:@"Requesting ads"]; // Create an ad request with our ad tag, display container, and optional user context. IMAAdsRequest *request = [[IMAAdsRequest alloc] initWithAdTagUrl:adTagUrl adDisplayContainer:[self createAdDisplayContainer] avPlayerVideoDisplay:[[IMAAVPlayerVideoDisplay alloc] initWithAVPlayer:self.contentPlayer] pictureInPictureProxy:self.pictureInPictureProxy userContext:nil]; [self.adsLoader requestAdsWithRequest:request]; }
การเริ่มโฆษณา
โฆษณา IMA SDK จะเริ่มแสดงไม่ได้ขณะอยู่ในโหมดภาพซ้อนภาพ ด้วยเหตุนี้ คุณจึงต้องตรวจสอบว่าได้เรียกใช้ [adsManager start]
เฉพาะเมื่อวิดีโออยู่ในโหมดการเล่นมาตรฐานเท่านั้น โดยทำดังนี้
... - (void)adsManager:(IMAAdsManager *)adsManager didReceiveAdEvent:(IMAAdEvent *)event { [self logMessage:@"AdsManager event (%s).", AdEventNames[event.type]]; // When the SDK notified you that ads have been loaded, play them. switch (event.type) { case kIMAAdEvent_LOADED: if (![self.pictureInPictureController isPictureInPictureActive]) { [adsManager start]; } break; ... default: break; } }
เข้าสู่โหมดการแสดงภาพซ้อนภาพ
หากใช้ AVPlayer
ที่ไม่มี AVPlayerViewController
คุณจะต้องเพิ่มปุ่มภาพในภาพของคุณเอง เราได้ติดตั้งใช้งานในตัวอย่างขั้นสูง ดังนี้
- (IBAction)onPipButtonClicked:(id)sender {
if ([self.pictureInPictureController isPictureInPictureActive]) {
[self.pictureInPictureController stopPictureInPicture];
} else {
[self.pictureInPictureController startPictureInPicture];
}
}
คำถามที่พบบ่อย
- ฉันจะเริ่มโฆษณาเมื่อวิดีโออยู่ในโหมดภาพซ้อนภาพได้อย่างไร
- โฆษณาจะเริ่มเล่นไม่ได้ขณะที่วิดีโออยู่ในโหมดภาพซ้อนภาพ แต่จะเริ่มต้นได้ในโหมดการเล่นมาตรฐานเท่านั้น
- การผสานรวมภาพในภาพที่มีอยู่ของฉันต้องตั้งค่า
self.pictureInPictureController.delegate
เป็นชั้นเรียนของฉันเอง ฉันจะติดตั้งใช้งานโฆษณา IMA ในฟีเจอร์ภาพในภาพและยังคงเป็นผู้รับมอบสิทธิ์ได้อย่างไร - นอกจากนี้ IMA SDK ยังต้องได้รับ
AVPictureinPictureControllerDelegate
ข้อความเพื่อเปิดใช้การเล่นโฆษณาในโหมดภาพซ้อนภาพด้วย ด้วยเหตุนี้ เราจึงขอให้คุณตั้งค่าผู้รับมอบสิทธิ์สำหรับAVPictureinPictureController
เป็นอินสแตนซ์ของIMAPictureInPicturyProxy
ออบเจ็กต์พร็อกซีนี้จะส่งต่อAVPictureinPictureControllerDelegate
ข้อความทั้งหมดไปยังแอปของคุณ และยังส่งต่อการเรียกไปยัง IMA เพื่อเปิดใช้การรองรับภาพในภาพ โปรดทราบว่าคุณต้องเก็บแฮนเดิลภายในสำหรับ AVPlayerLayer ไว้ด้วย