تصویر در تصویر

این راهنما برای ناشران IMA در نظر گرفته شده است که می خواهند پشتیبانی Picture in Picture را به پیاده سازی IMA موجود خود اضافه کنند.

پیش نیازها

افزودن پشتیبانی تصویر در تصویر به برنامه شما

از نسخه SDK 3.1.0، IMA از تصویر اپل در حالت تصویر برای iPad پشتیبانی می کند. برای افزودن پشتیبانی از Picture in Picture به برنامه خود، باید چند تنظیمات را تغییر دهید و چند کلاس IMA جدید را اجرا کنید، همانطور که در زیر نشان داده شده است.

به روز رسانی تنظیمات برای اجازه پخش پس زمینه

تصویر در حالت تصویر نیاز دارد که اجازه پخش رسانه پس‌زمینه را در برنامه خود بدهید.

  1. حالت‌های پس‌زمینه را برای صدا، پخش و تصویر در تصویر روی ON تنظیم کنید، همانطور که در زیر نشان داده شده است:

  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 برای تصویر در تصویر

برای پشتیبانی از تصویر در تصویر، اپل کلاس های 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;
}

تغییر درخواست تبلیغات شما

یک شی جدید دیگر برای ایجاد وجود دارد: 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 استفاده می کنید، باید دکمه Picture in Picture خود را اضافه کنید. ما یکی از این موارد را در نمونه پیشرفته خود پیاده سازی کرده ایم:

- (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 هدایت می‌کند تا پشتیبانی Picture in Picture را فعال کند. توجه داشته باشید که باید یک دسته محلی نیز برای AVPlayerLayer خود داشته باشید.