IMA DAI SDK и клиентский SDK IMA были объединены в версии 4 и переработаны как точное подмножество iOS SDK. Это значительно сокращает время обучения для разработчиков iOS. В результате часть кода, необходимая для пользователей DAI, была изменена и стала более согласованной с другими нашими SDK.
В этом руководстве описан процесс, необходимый для обновления существующей реализации версии 3 до новой версии SDK версии 4.
Если у вас есть сомнения, обратитесь к образцам iOS DAI — API tvOS v4 тот же (за исключением сопутствующих приложений и PIP, которые недоступны в tvOS).
Изменить имя модуля
Чтобы соответствовать iOS SDK, мы изменили имя модуля с InteractiveMediaAds
на GoogleInteractiveMediaAds
.
Изменения | |
---|---|
Старый | #import <InteractiveMediaAds/InteractiveMediaAds.h> |
Новый | #import <GoogleInteractiveMediaAds/GoogleInteractiveMediaAds.h> |
Старый | @import InteractiveMediaAds; |
Новый | @import GoogleInteractiveMediaAds; |
Создайте новый рекламный контейнер
IMAAdDisplayContainer
отвечает за управление видом контейнера рекламы и рекламными местами сопутствующих объявлений, используемыми для воспроизведения рекламы.
Изменения | |
---|---|
Старый | Предыдущего эквивалента не существует. |
Новый | self.adDisplayContainer = [[IMAAdDisplayContainer alloc] initWithAdContainer:self.videoView]; |
Передайте IMAVideoDisplay и IMAAdDisplayContainer в IMAStreamRequest.
Теперь, когда у вас есть видеодисплей и IMAAdDisplayContainer,
вам необходимо передать их в запрос потока, чтобы IMA DAI SDK мог ими управлять.
Изменения | |
---|---|
Старый | IMALiveStreamRequest *streamRequest = [[IMALiveStreamRequest alloc] initWithAssetKey:kAssetKey]; IMAVODStreamRequest *streamRequest = [[IMAVODStreamRequest alloc] initWithContentSourceID:kContentSourceID videoID:kVideoID]; |
Новый | IMALiveStreamRequest *streamRequest = [[IMALiveStreamRequest alloc] initWithAssetKey:kAssetKey adDisplayContainer:self.adDisplayContainer videoDisplay:self.videoDisplay]; IMAVODStreamRequest *streamRequest = [[IMAVODStreamRequest alloc] initWithContentSourceId:kContentSourceID videoId:kVideoID adDisplayContainer:self.adDisplayContainer videoDisplay:self.videoDisplay]; |
Запрос с помощью IMAAdsLoader
Изменения | |
---|---|
Старый | self.streamManager = [[IMAStreamManager alloc] initWithVideoDisplay:self.videoDisplay]; self.streamManager.delegate = self; [self.streamManager requestStream:streamRequest]; |
Новый | self.adsLoader = [[IMAAdsLoader alloc] init]; self.adsLoader.delegate = self; [self.adsLoader requestStreamWithRequest:streamRequest]; |
Внедрите IMAAdsLoaderDelegate для инициализации потока.
Эти функции были переименованы и изменены, чтобы соответствовать iOS SDK. Отношения между менеджером потока и потоком также изменились. В SDK версии 3 один менеджер потоков можно было использовать для управления несколькими потоками. В версии 4 каждый менеджер потоков может управлять только одним потоком.
Изменения | |
---|---|
Старый | - (void)streamManager:(IMAStreamManager *)streamManager didInitializeStream:(NSString *)streamID { NSLog(@"Stream initialized with streamID: %@", streamID); } - (void)streamManager:(IMAStreamManager *)streamManager didReceiveError:(NSError *)error { NSLog(@"Error: %@", error); [self playBackupStream]; } |
Новый | - (void)adsLoader:(IMAAdsLoader *)loader adsLoadedWithData:(IMAAdsLoadedData *)adsLoadedData { self.streamManager = adsLoadedData.streamManager; self.streamManager.delegate = self; [self.streamManager initializeWithAdsRenderingSettings:nil]; NSLog(@"Stream initialized with streamID: %@", self.streamManager.streamId); } - (void)adsLoader:(IMAAdsLoader *)loader failedWithErrorData:(IMAAdLoadingErrorData *)adErrorData { NSLog(@"Error: %@", adErrorData.adError); [self playBackupStream]; } |
Реализация IMAStreamManagerDelegate
Для обеспечения совместимости с iOS SDK пакет tvOS SDK теперь предоставляет один делегат диспетчера потоков IMAStreamManagerDelegate
для обработки событий потока. Теперь вам нужно использовать оператор переключения внутри этого делегата для управления конкретными событиями.
Изменения | |
---|---|
Старый | - (void)streamManager:(IMAStreamManager *)streamManager adBreakDidStart:(IMAAdBreakInfo *)adBreakInfo { NSLog(@"Ad break started"); self.playerViewController.requiresLinearPlayback = YES; } - (void)streamManager:(IMAStreamManager *)streamManager adBreakDidEnd:(IMAAdBreakInfo *)adBreakInfo { NSLog(@"Ad break ended"); self.playerViewController.requiresLinearPlayback = NO; } |
Новый | - (void)streamManager:(IMAStreamManager *)streamManager didReceiveAdEvent:(IMAAdEvent *)event { NSLog(@"StreamManager event (%@).", event.typeString); switch (event.type) { case kIMAAdEvent_AD_BREAK_STARTED: { NSLog(@"Ad break started"); self.playerViewController.requiresLinearPlayback = YES; break; } case kIMAAdEvent_AD_BREAK_ENDED: { NSLog(@"Ad break ended"); self.playerViewController.requiresLinearPlayback = NO; break; } // And so on for other events. default: break; } } |