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

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

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

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

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

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

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

  1. ตั้งค่าโหมดพื้นหลังเป็นเปิดสำหรับ Audio, AirPlay และ Picture in Picture ที่แสดงด้านล่าง

  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];
  }
}

คำถามที่พบบ่อย

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