คู่มือนี้มีไว้สำหรับผู้เผยแพร่โฆษณา 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 ไว้ด้วย