Pakiety IMA SDK ułatwiają integrację reklam multimedialnych z witrynami i aplikacjami. Pakiety IMA SDK mogą żądania reklam z Serwer reklam zgodny i zarządzanie odtwarzaniem reklam w aplikacjach. Dzięki pakietom SDK IMA DAI aplikacje żądania strumieniowego przesyłania danych reklamy i treści wideo – VOD lub treści na żywo. SDK zwraca wtedy typ połączony strumień wideo, dzięki czemu nie trzeba przełączać się między reklamą a treścią wideo. w Twojej aplikacji.
Wybierz rozwiązanie DAI, które Cię interesuje
DAI z pełną obsługą
Ten przewodnik pokazuje, jak zintegrować pakiet IMA DAI SDK w prostym filmie w aplikacji odtwarzacza. Jeśli chcesz zobaczyć gotowy fragment lub zapoznać się z nim należy pobrać BasicExample z GitHuba.
Omówienie IMA DAI
Implementacja IMA DAI obejmuje 4 główne komponenty SDK, co pokazujemy przewodnik:
IMAAdDisplayContainer
: Obiekt kontenera znajdujący się nad elementem odtwarzania filmu i zawiera elementy interfejsu reklamy.IMAAdsLoader
: Obiekt, który wysyła żądania strumieniowania i obsługuje zdarzenia uruchamiane przez obiekty odpowiedzi na żądania strumienia. Utwórz tylko jeden program wczytujący reklamy, którego można używać wielokrotnie aplikacji.IMAStreamRequest
– alboIMAVODStreamRequest
lubIMALiveStreamRequest
: Obiekt definiujący żądanie strumienia. Żądania strumienia mogą dotyczyć wideo na żądanie lub na żywo. strumienie. Żądania określają identyfikator treści, a także klucz interfejsu API lub token uwierzytelniania oraz inne dane. .IMAStreamManager
: Obiekt, który obsługuje strumienie dynamicznego wstawiania reklam i interakcje z backendem DAI. zarządza też pingami śledzącymi oraz przekazuje strumienie i zdarzenia reklamowe do wydawcy.
Wymagania wstępne
Zanim zaczniesz, musisz mieć:
- Xcode 13 lub nowsza wersja
- CocoaPods (preferowane), Menedżer pakietów Swift lub pobranej kopii pakietu IMA DAI SDK dla iOS
Utwórz nowy projekt Xcode
Utwórz w Xcode nowy projekt iOS przy użyciu Objective-C. Użyj formatu BasicExample jako nazwa projektu.
Dodaj pakiet IMA DAI SDK do projektu Xcode
Użyj jednej z tych 3 metod, by zainstalować pakiet IMA DAI SDK.
Zainstaluj pakiet SDK za pomocą CocoaPods (zalecane)
CocoaPods to menedżer zależności w projektach Xcode i jest zalecany metody instalowania pakietu IMA DAI SDK. Więcej informacji na temat instalowania i używając CocoaPods, zapoznaj się z dokumentacją CocoaPods. Po CocoaPods jest już zainstalowany, wykonaj poniższe instrukcje, aby zainstalować IMA DAI SDK:
W tym samym katalogu, w którym znajduje się plik BasicExample.xcodeproj, utwórz tekst Podfile i dodaj tę konfigurację:
source 'https://github.com/CocoaPods/Specs.git' platform :ios, '14' target "BasicExample" do pod 'GoogleAds-IMA-iOS-SDK', '~> 3.23.0' end
W katalogu zawierającym plik Podfile uruchom polecenie:
pod install --repo-update`
Sprawdź, czy instalacja się powiodła, otwierając BasicExample.xcworkspace i potwierdzenie, że zawiera on dwa projekty: BasicExample i BasicExample (zależności zainstalowane przez CocoaPods).
Zainstaluj pakiet SDK za pomocą menedżera pakietów Swift
Pakiet Interactive Media Ads SDK obsługuje pakiet Swift Menedżera od wersji 3.18.4. Postępuj zgodnie z z poniższych instrukcji, aby zaimportować pakiet Swift.
Zainstaluj w Xcode pakiet IMA DAI SDK Swift. W tym celu przejdź na stronę Plik > Dodaj pakiety.
W wyświetlonym oknie wyszukaj pakiet IMA DAI SDK Swift na GitHubie. repozytorium:
https://github.com/googleads/swift-package-manager-google-interactive-media-ads-ios
Wybierz wersję pakietu IMA DAI SDK Swift, którego chcesz użyć. Nowe zalecamy korzystanie z wersji do następnej głównej wersji.
Gdy skończysz, Xcode naprawi zależności pakietów i pobierze je w tle. Więcej informacji o dodawaniu zależności pakietu znajdziesz w artykule Artykuł Apple
Ręczne pobieranie i instalowanie pakietu SDK
Jeśli nie chcesz korzystać z Menedżera pakietów Swift ani CocoaPods, możesz pakiet IMA DAI SDK i ręcznie dodaj go do projektu.
Utwórz prosty odtwarzacz wideo
Najpierw zaimplementuj podstawowy odtwarzacz wideo. Początkowo ten gracz nie używa Pakiet IMA DAI SDK nie zawiera żadnej metody wyzwalania odtwarzania.
ViewController.m
#import "ViewController.h"
#import <AVKit/AVKit.h>
@interface ViewController ()
@property(nonatomic) AVPlayerViewController *playerViewController;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor blackColor];
// Create a stream video player.
AVPlayer *player = [[AVPlayer alloc] init];
self.playerViewController = [[AVPlayerViewController alloc] init];
self.playerViewController.player = player;
// Attach the video player to the view hierarchy.
[self addChildViewController:self.playerViewController];
self.playerViewController.view.frame = self.view.bounds;
[self.view addSubview:self.playerViewController.view];
[self.playerViewController didMoveToParentViewController:self];
}
@end
Zaimportuj pakiet SDK i dodaj niego na potrzeby interakcji IMA
Po dodaniu pakietu IMA DAI SDK do projektu zaimportuj go i dodaj namioty pośrednie. dotyczące głównych punktów interakcji z IMA.
ViewController.m
#import "ViewController.h"
#import <AVKit/AVKit.h>
#import <GoogleInteractiveMediaAds/GoogleInteractiveMediaAds.h>
@interface ViewController ()
@property(nonatomic) IMAAdsLoader *adsLoader;
@property(nonatomic) UIView *adContainerView;
@property(nonatomic) IMAStreamManager *streamManager;
@property(nonatomic) AVPlayerViewController *playerViewController;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor blackColor];
[self setupAdsLoader];
// Create a stream video player.
AVPlayer *player = [[AVPlayer alloc] init];
self.playerViewController = [[AVPlayerViewController alloc] init];
self.playerViewController.player = player;
// Attach the video player to the view hierarchy.
[self addChildViewController:self.playerViewController];
self.playerViewController.view.frame = self.view.bounds;
[self.view addSubview:self.playerViewController.view];
[self.playerViewController didMoveToParentViewController:self];
[self attachAdContainer];
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[self requestStream];
}
- (void)setupAdsLoader {}
- (void)attachAdContainer {}
- (void)requestStream {}
@end
Implementowanie pakietu IMAAdsLoader
Następnie utwórz instancję IMAAdsLoader
i dołącz widok kontenera reklamy do
hierarchię widoków.
ViewController.m
- (void)setupAdsLoader {
self.adsLoader = [[IMAAdsLoader alloc] init];
self.adsLoader.delegate = self;
}
- (void)attachAdContainer {
self.adContainerView = [[UIView alloc] init];
[self.view addSubview:self.adContainerView];
self.adContainerView.frame = self.view.bounds;
}
Prześlij prośbę o transmisję
Utwórz kilka stałych do przechowywania informacji o strumieniu, a potem wdróż kod strumieniowania, aby wysłać żądanie.
ViewController.m
#import <GoogleInteractiveMediaAds/GoogleInteractiveMediaAds.h>
static NSString *const kAssetKey = @"sN_IYUG8STe1ZzhIIE_ksA";
static NSString *const kContentSourceID = @"2548831";
static NSString *const kVideoID = @"tears-of-steel";
@interface ViewController ()
...
- (void)requestStream {
IMAAVPlayerVideoDisplay *videoDisplay =
[[IMAAVPlayerVideoDisplay alloc] initWithAVPlayer:self.playerViewController.player];
IMAAdDisplayContainer *adDisplayContainer =
[[IMAAdDisplayContainer alloc] initWithAdContainer:self.adContainerView];
IMALiveStreamRequest *request = [[IMALiveStreamRequest alloc] initWithAssetKey:kAssetKey
adDisplayContainer:adDisplayContainer
videoDisplay:videoDisplay];
// VOD request. Comment out the IMALiveStreamRequest above and uncomment this IMAVODStreamRequest
// to switch from a livestream to a VOD stream.
// IMAVODStreamRequest *request =
// [[IMAVODStreamRequest alloc] initWithContentSourceId:kContentSourceID
// videoId:kVideoID
// adDisplayContainer:adDisplayContainer
// videoDisplay:videoDisplay];
[self.adsLoader requestStreamWithRequest:request];
}
Obsługuj zdarzenia strumienia
IMAAdsLoader
i IMAStreamManager
uruchamiają zdarzenia służące do obsługi zdarzeń
zainicjowanie, błędy i zmiany stanu strumienia. Te zdarzenia są wywoływane w przypadku
protokoły IMAAdsLoaderDelegate
i IMAStreamManagerDelegate
. Posłuchaj:
zdarzenie wczytania reklam i zainicjowanie strumienia. Jeśli reklama nie zostanie wczytana, odtwórz
zapasowy strumień.
ViewController.m
static NSString *const kAssetKey = @"sN_IYUG8STe1ZzhIIE_ksA";
static NSString *const kContentSourceID = @"2548831";
static NSString *const kVideoID = @"tears-of-steel";
static NSString *const kBackupStreamURLString =
@"https://storage.googleapis.com/interactive-media-ads/media/bbb.m3u8";
@interface ViewController () <IMAAdsLoaderDelegate, IMAStreamManagerDelegate>
...
[self.adsLoader requestStreamWithRequest:request];
}
- (void)playBackupStream {
NSURL *backupStreamURL = [NSURL URLWithString:kBackupStreamURLString];
AVPlayerItem *backupStreamItem = [AVPlayerItem playerItemWithURL:backupStreamURL];
[self.playerViewController.player replaceCurrentItemWithPlayerItem:backupStreamItem];
[self.playerViewController.player play];
}
#pragma mark - IMAAdsLoaderDelegate
- (void)adsLoader:(IMAAdsLoader *)loader adsLoadedWithData:(IMAAdsLoadedData *)adsLoadedData {
// Initialize and listen to stream manager's events.
self.streamManager = adsLoadedData.streamManager;
self.streamManager.delegate = self;
[self.streamManager initializeWithAdsRenderingSettings:nil];
NSLog(@"Stream created with: %@.", self.streamManager.streamId);
}
- (void)adsLoader:(IMAAdsLoader *)loader failedWithErrorData:(IMAAdLoadingErrorData *)adErrorData {
// Fall back to playing the backup stream.
NSLog(@"Error loading ads: %@", adErrorData.adError.message);
[self playBackupStream];
}
#pragma mark - IMAStreamManagerDelegate
- (void)streamManager:(IMAStreamManager *)streamManager didReceiveAdEvent:(IMAAdEvent *)event {}
- (void)streamManager:(IMAStreamManager *)streamManager didReceiveAdError:(IMAAdError *)error {}
- (void)streamManager:(IMAStreamManager *)streamManager
adDidProgressToTime:(NSTimeInterval)time
adDuration:(NSTimeInterval)adDuration
adPosition:(NSInteger)adPosition
totalAds:(NSInteger)totalAds
adBreakDuration:(NSTimeInterval)adBreakDuration {}
@end
Obsługa zdarzeń logowania i błędów
Istnieje kilka zdarzeń, które może obsłużyć menedżer strumienia, ale do podstawowych zastosowań konieczne jest rejestrowanie zdarzeń, , by zapobiegać przewijaniu podczas odtwarzania reklam i obsługiwać błędy.
ViewController.m
#pragma mark - IMAStreamManagerDelegate
- (void)streamManager:(IMAStreamManager *)streamManager didReceiveAdEvent:(IMAAdEvent *)event {
NSLog(@"StreamManager event (%@).", event.typeString);
switch (event.type) {
case kIMAAdEvent_STARTED: {
// Log extended data.
NSString *extendedAdPodInfo = [[NSString alloc]
initWithFormat:@"Showing ad %zd/%zd, bumper: %@, title: %@, description: %@, contentType:"
@"%@, pod index: %zd, time offset: %lf, max duration: %lf.",
event.ad.adPodInfo.adPosition, event.ad.adPodInfo.totalAds,
event.ad.adPodInfo.isBumper ? @"YES" : @"NO", event.ad.adTitle,
event.ad.adDescription, event.ad.contentType, event.ad.adPodInfo.podIndex,
event.ad.adPodInfo.timeOffset, event.ad.adPodInfo.maxDuration];
NSLog(@"%@", extendedAdPodInfo);
break;
}
case kIMAAdEvent_AD_BREAK_STARTED: {
// Prevent user seek through when an ad starts and show the ad controls.
self.adContainerView.hidden = NO;
break;
}
case kIMAAdEvent_AD_BREAK_ENDED: {
// Allow user seek through after an ad ends and hide the ad controls.
self.adContainerView.hidden = YES;
break;
}
default:
break;
}
}
- (void)streamManager:(IMAStreamManager *)streamManager didReceiveAdError:(IMAAdError *)error {
// Fall back to playing the backup stream.
NSLog(@"StreamManager error: %@", error.message);
[self playBackupStream];
}
@end
Znakomicie. Zamawiasz i wyświetlasz reklamy za pomocą pakietu IMA DAI SDK. Do więcej zaawansowanych funkcji pakietu SDK znajdziesz w innych przewodnikach lub znajdziesz na GitHubie.