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

کیت توسعه نرم‌افزار (SDK) تبلیغات رسانه‌ای (IMA) برای iOS.

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

پیش‌نیازها

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

از نسخه ۳.۱.۰ کیت توسعه نرم‌افزار (SDK)، IMA از حالت تصویر در تصویر اپل برای آیپد پشتیبانی می‌کند. برای افزودن پشتیبانی از تصویر در تصویر به برنامه خود، باید چند تنظیم را تغییر داده و چند کلاس جدید 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 استفاده می‌کنید، باید دکمه تصویر در تصویر خودتان را اضافه کنید. ما یکی از این دکمه‌ها را در نمونه پیشرفته خود به شکل زیر پیاده‌سازی کرده‌ایم:

- (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 خود نیز داشته باشید.