คู่มือนี้มีไว้สําหรับผู้เผยแพร่โฆษณา IMA ที่ต้องการเพิ่มการรองรับการแสดงภาพซ้อนภาพลงในการติดตั้งใช้งาน IMA ที่มีอยู่
ข้อกำหนดเบื้องต้น
- ทำตามคู่มือเริ่มต้นใช้งาน
การเพิ่มการรองรับการแสดงภาพซ้อนภาพลงในแอป
IMA สนับสนุนโหมดการแสดงภาพซ้อนภาพของ Apple สำหรับ iPad สำหรับ SDK เวอร์ชัน 3.1.0 หากต้องการเพิ่มการรองรับการแสดงภาพซ้อนภาพลงในแอป คุณจะต้องปรับการตั้งค่าบางอย่างและใช้คลาส IMA ใหม่บางรายการดังที่แสดงด้านล่าง
กำลังอัปเดตการตั้งค่าเพื่ออนุญาตการเล่นขณะล็อกหน้าจอหรือขณะใช้แอปอื่น
การแสดงภาพซ้อนภาพกำหนดให้คุณต้องอนุญาตการเล่นสื่อขณะล็อกหน้าจอหรือขณะใช้แอปอื่นในแอป
ตั้งค่าโหมดพื้นหลังเป็นเปิดสำหรับ Audio, AirPlay และ Picture in Picture ที่แสดงด้านล่าง
ตั้งค่าพร็อพเพอร์ตี้
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 ด้วย