SDK для медиарекламы (IMA) для iOS.
Данное руководство предназначено для издателей IMA, которые хотят добавить поддержку режима «картинка в картинке» в свою существующую реализацию IMA.
Предварительные требования
- Пройдите руководство по началу работы .
Добавление поддержки режима «картинка в картинке» в ваше приложение
Начиная с версии SDK 3.1.0, IMA поддерживает режим «Картинка в картинке» от Apple для iPad. Чтобы добавить поддержку режима «Картинка в картинке» в ваше приложение, вам нужно изменить несколько настроек и реализовать несколько новых классов IMA, как показано ниже.
Обновление настроек для разрешения фонового воспроизведения.
Для работы в режиме «Картинка в картинке» необходимо разрешить фоновое воспроизведение мультимедиа в вашем приложении.
Включите фоновые режимы для аудио, 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; }
Изменение запроса на показ рекламы
Необходимо создать еще один новый объект: IMAAVPlayerVideoDisplay . Он передается в конструктор IMAAdsRequest и позволяет SDK вставлять рекламу в окно «картинка в картинке», когда видео воспроизводится в этом режиме.
... - (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 в режиме «Картинка в картинке», оставаясь при этом в роли делегата? - The IMA SDK also needs to receive
AVPictureinPictureControllerDelegatemessages to enable ad playback in Picture in Picture mode. This is why we ask you to set the delegate forAVPictureinPictureControllerto an instance ofIMAPictureInPicturyProxy. This proxy object forwards on allAVPictureinPictureControllerDelegatemessages to your app, but also forwards the calls to IMA to enable Picture in Picture support. Note that you must also maintain a local handle to your AVPlayerLayer.