IMA SDK'ları, multimedya reklamlarını web sitelerinize ve uygulamalarınıza entegre etmenizi kolaylaştırır. IMA SDK'ları herhangi birinden reklam iste VAST uyumlu reklam sunucusu oluşturup uygulamalarınızda reklam oynatmayı yönetin. IMA DAI SDK'larıyla, uygulamalar reklam ve içerik videosu (VOD veya canlı içerik) için akış isteği. SDK, daha sonra Böylece, reklam ve içerik videosu arasında geçiş yönetmek zorunda kalmazsınız. bir kontrol listesidir.
İlgilendiğiniz DAI çözümünü seçme
Tam hizmet DAI
Bu kılavuzda, IMA DAI SDK'sının basit bir videoya nasıl entegre edileceği gösterilmektedir oynatıcı uygulaması. Tamamlanmış bir örneği görüntülemek veya takip etmek isterseniz entegrasyon için BasicExample (GitHub'dan).
IMA DAI'ya genel bakış
Bu kılavuzda gösterildiği gibi, IMA DAI uygulamak için dört ana SDK bileşeni gerekir kılavuz:
IMAAdDisplayContainer
: Video oynatma öğesinin üzerinde yer alan ve reklam kullanıcı arayüzü öğelerini barındıran bir kapsayıcı nesne.IMAAdsLoader
: Akış isteğinde bulunan ve akış isteği yanıt nesneleri tarafından tetiklenen etkinlikleri işleyen nesne. Yalnızca bir tane reklam yükleyici örneklendirmelisiniz. Bu reklam yükleyici, yükleme süresi boyunca yeniden kullanılabilir. bir uygulamadır.IMAStreamRequest
– ya birIMAVODStreamRequest
veya aIMALiveStreamRequest
: Akış isteğini tanımlayan bir nesne. Yayın istekleri, seç-izle video veya canlı yayın için olabilir. akışlar. İstekler bir Content ID'nin yanı sıra API anahtarı veya kimlik doğrulama jetonu ve diğer parametreleridir.IMAStreamManager
: Dinamik reklam ekleme akışlarını ve DAI arka ucuyla etkileşimleri işleyen bir nesne. İlgili içeriği oluşturmak için kullanılan Akış yöneticisi ayrıca, izleme ping'lerini yönetir ve akış ile reklam etkinliklerini yayıncısına ait.
Ön koşullar
Başlamadan önce aşağıdakilere ihtiyacınız vardır:
- Xcode 13 veya sonraki sürümler
- CocoaPods (tercih edilir), Swift Package Manager veya bir IMA DAI SDK'sının indirilmiş kopyasını iOS
Yeni bir Xcode projesi oluşturma
Xcode'da Objective-C'yi kullanarak yeni bir iOS projesi oluşturun. BasicExample'i şu şekilde kullanın: yani projenin adı.
IMA DAI SDK'sını Xcode projesine ekleme
IMA DAI SDK'sını yüklemek için aşağıdaki üç yöntemden birini kullanın.
SDK'yı CocoaPods kullanarak yükleyin (tercih edilir)
CocoaPods, Xcode projeleri için bir bağımlılık yöneticisidir ve yöntemini kullanabilirsiniz. Uygulama yükleme veya CocoaPods belgelerini inceleyin. Şu tarihten sonra: CocoaPods'u yüklediyseniz, aşağıdaki talimatları uygulayarak CocoaPods'u IMA DAI SDK'sı:
BasicExample.xcodeproj dosyanızla aynı dizinde bir metin oluşturun. Podfile adlı dosyayı açın ve aşağıdaki yapılandırmayı ekleyin:
source 'https://github.com/CocoaPods/Specs.git' platform :ios, '14' target "BasicExample" do pod 'GoogleAds-IMA-iOS-SDK', '~> 3.23.0' end
Podfile dosyasını içeren dizinde şu komutu çalıştırın:
pod install --repo-update`
Yükleme işleminin başarılı olduğunu doğrulamak için BasicExample.xcworkspace dosyası olarak ayarlayın ve iki dosya içerdiğini onaylayın projects: BasicExample ve Pods ( CocoaPods) için de geçerlidir.
Swift Package Manager'ı kullanarak SDK'yı yükleme
Interactive Media Ads SDK'sı Swift Package'ı destekler. Yönetici Konsolu'nda oturum açın. Şunu izleyin: Swift paketini içe aktarmak için aşağıdaki adımları uygulayın.
Xcode'da şuraya giderek IMA DAI SDK'sı Swift Paketini yükleyin: Dosya > Paket Ekle'yi tıklayın.
Görüntülenen istemde, IMA DAI SDK Swift Paketi GitHub'ını arayın depo:
https://github.com/googleads/swift-package-manager-google-interactive-media-ads-ios
Kullanmak istediğiniz IMA DAI SDK'sı Swift Paketi sürümünü seçin. Yeni Bir Sonraki Ana Sürüm'ü kullanmanızı öneririz.
İşiniz bittiğinde Xcode, paket bağımlılıklarınızı çözer ve bunları görebilirsiniz. Paket bağımlılıkları ekleme hakkında daha fazla bilgi için Apple'ın makalesi
SDK'yı manuel olarak indirme ve yükleme
Swift Package Manager veya CocoaPods'u kullanmak istemiyorsanız indirebilirsiniz. manuel olarak projenize ekleyin.
Basit bir video oynatıcı oluşturma
İlk olarak, temel bir video oynatıcı uygulayın. Bu oynatıcı başlangıçta IMA DAI SDK'sı veya oynatmayı tetikleyecek herhangi bir yöntem içermez.
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
SDK'yı içe aktarın ve IMA etkileşimi için saplamalar ekleyin
IMA DAI SDK'sını projenize ekledikten sonra SDK'yı içe aktarın ve saplama ekleyin bu adımları izleyin.
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
IMAAdsLoader'ı uygulama
Ardından, IMAAdsLoader
öğesini örneklendirin ve reklam kapsayıcısı görünümünü
görebilirsiniz.
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;
}
Akış isteğinde bulunma
Akış bilgilerini tutmak için birkaç sabit değer oluşturun ve ardından akış isteği işlevini kullanın.
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];
}
Akış etkinliklerini işleme
IMAAdsLoader
ve IMAStreamManager
, etkinlikleri işlemek için kullanılan etkinlikleri tetikler.
başlatma, hatalar ve akış durumundaki değişiklikler. Bu etkinlikler şu kadar süreyle tetiklenir:
IMAAdsLoaderDelegate
ve IMAStreamManagerDelegate
protokollerini uygulayın. Şunu dinle:
ve akışı başlatır. Bir reklam yüklenemezse,
yedek akış olarak ayarlayabilirsiniz.
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
Günlük kaydını ve hata etkinliklerini işleme
Akış yöneticisi yetki verilmiş olan kullanıcının gerçekleştirebileceği birkaç etkinlik vardır ancak temel uygulamalar için en önemli kullanımlar, olay günlüğü kaydı, Böylece reklamlar oynatılırken gösterilen arama işlemlerini önlemek ve hataları işlemek için kullanabilirsiniz.
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
İşte bu kadar. Artık IMA DAI SDK ile reklam istiyor ve görüntülüyorsunuz. Alıcı: Daha gelişmiş SDK özellikleri hakkında bilgi edinmek, diğer kılavuzları görmek veya GitHub'daki örnekler.