SDK โฆษณาสื่อ (IMA) สำหรับ iOS
คู่มือนี้มีไว้สำหรับผู้เผยแพร่โฆษณา IMA ที่ต้องการเพิ่มการรองรับการแสดงภาพซ้อนภาพลงในการใช้งาน IMA ที่มีอยู่
ข้อกำหนดเบื้องต้น
- ทำตามคู่มือเริ่มต้นใช้งาน ให้เสร็จสมบูรณ์
การเพิ่มการรองรับการแสดงภาพซ้อนภาพลงในแอป
ตั้งแต่ SDK เวอร์ชัน 3.1.0 เป็นต้นมา IMA รองรับโหมดการแสดงภาพซ้อนภาพของ 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 ด้วย