SDK медиарекламы (IMA) для iOS.
Это руководство предназначено для издателей, которые используют IMA и хотят добавить поддержку режима "картинка в картинке" в существующую реализацию IMA.
Требования
- Следуйте инструкциям в руководстве по началу работы.
Как добавить в приложение поддержку режима "Картинка в картинке"
Начиная с версии 3.1.0, IMA SDK поддерживает режим "Картинка в картинке" от Apple для iPad. Чтобы добавить в приложение поддержку режима "Картинка в картинке", вам нужно изменить несколько настроек и реализовать несколько новых классов IMA, как показано ниже.
Как разрешить воспроизведение в фоновом режиме
Для режима "Картинка в картинке" необходимо разрешить воспроизведение медиаконтента в фоновом режиме.
Установите для параметра Background Modes (Фоновые режимы) значение ON (ВКЛ.) для Audio, AirPlay and Picture in Picture (Аудио, 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 в режиме "Картинка в картинке" и при этом оставаться делегатом? - IMA SDK также должна получать
AVPictureinPictureControllerDelegateсообщения, чтобы воспроизводить объявления в режиме "Картинка в картинке". Поэтому мы просим вас задать делегат дляAVPictureinPictureControllerв экземпляреIMAPictureInPicturyProxy. Этот объект-посредник пересылает все сообщенияAVPictureinPictureControllerDelegateв ваше приложение, а также пересылает вызовы в IMA, чтобы включить поддержку режима "Картинка в картинке". Обратите внимание, что вам также необходимо поддерживать локальный дескриптор для AVPlayerLayer.