รองรับการแสดงภาพซ้อนภาพ

SDK โฆษณาสื่อ (IMA) สำหรับ iOS

คู่มือนี้มีไว้สำหรับผู้เผยแพร่โฆษณา IMA ที่ต้องการเพิ่มการรองรับภาพในภาพลงในการติดตั้งใช้งาน IMA ที่มีอยู่

ข้อกำหนดเบื้องต้น

การเพิ่มการรองรับการแสดงภาพซ้อนภาพลงในแอป

ตั้งแต่ SDK เวอร์ชัน 3.1.0 เป็นต้นไป IMA รองรับโหมดภาพซ้อนภาพของ Apple สำหรับ iPad หากต้องการเพิ่มการรองรับโหมดภาพซ้อนภาพในแอป คุณต้องปรับแต่งการตั้งค่าบางอย่างและใช้คลาส IMA ใหม่ 2-3 คลาสตามที่แสดงด้านล่าง

การอัปเดตการตั้งค่าเพื่ออนุญาตการเล่นขณะล็อกหน้าจอหรือขณะใช้แอปอื่น

โหมดการแสดงภาพซ้อนภาพกำหนดให้คุณต้องอนุญาตการเล่นสื่อในเบื้องหลังในแอป

  1. ตั้งค่าโหมดพื้นหลังเป็นเปิดสำหรับเสียง, AirPlay และการแสดงภาพซ้อนภาพตามที่แสดงด้านล่าง

  2. ตั้งค่าพร็อพเพอร์ตี้ 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 ด้วย