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];
}
}
คำถามที่พบบ่อย
- ฉันจะเริ่มโฆษณาเมื่อวิดีโออยู่ในโหมดภาพซ้อนภาพได้อย่างไร
- ระบบจะเริ่มโฆษณาไม่ได้ขณะที่วิดีโออยู่ในโหมดภาพซ้อนภาพ แต่จะเริ่มได้ในโหมดการเล่นมาตรฐานเท่านั้น
- การผสานรวมฟีเจอร์ Picture in Picture ที่มีอยู่ต้องตั้งค่า
self.pictureInPictureController.delegate
เป็นคลาสของฉันเอง ฉันจะติดตั้งใช้งานโฆษณา IMA ในโหมดภาพซ้อนภาพและยังคงเป็นผู้มอบสิทธิ์ได้อย่างไร - นอกจากนี้ IMA SDK ยังต้องได้รับข้อความ
AVPictureinPictureControllerDelegate
เพื่อเปิดใช้การเล่นโฆษณาในโหมดภาพซ้อนภาพ ด้วยเหตุนี้ เราจึงขอให้คุณตั้งค่าผู้รับมอบสิทธิ์สำหรับAVPictureinPictureController
เป็นอินสแตนซ์ของIMAPictureInPicturyProxy
ออบเจ็กต์พร็อกซีนี้จะส่งต่อข้อความทั้งหมดAVPictureinPictureControllerDelegate
ไปยังแอปของคุณ แต่ยังส่งต่อการเรียกไปยัง IMA เพื่อเปิดใช้การรองรับโหมดภาพซ้อนภาพด้วย โปรดทราบว่าคุณต้อง รักษาแฮนเดิลในเครื่องสำหรับ AVPlayerLayer ด้วย