Başla

Ön koşullar

  • Xcode 13 veya sonraki sürümleri

Bu kılavuzda, tek seferlik rastgele bir sayı almak ve oynatma etkinliklerini izlemek için PAL SDK'nın nasıl çağrılacağı açıklanmaktadır. Tamamlanan rehberi takip etmek için PAL tvOS örnek uygulamasını indirin.

PAL SDK'yı projenize ekleyin

Swift Package Manager'ı kullanarak PAL SDK'sını yükleme

Programatik Erişim Kitaplığı SDK'sı, 2.5.3 sürümünden itibaren Swift Package Manager'ı destekler. Swift paketini içe aktarmak için aşağıdaki adımları uygulayın.

  1. Xcode'da Dosya > Paket Ekle... seçeneğine giderek IMA SDK Swift Paketini yükleyin.

  2. Görüntülenen istemde IMA SDK Swift Paketi GitHub deposunu arayın:

    https://github.com/googleads/swift-package-manager-google-programmatic-access-library-tvos
    
  3. Kullanmak istediğiniz PAL SDK Swift Paketi sürümünü seçin. Yeni projeler için En Yeni Ana Sürüm'ü kullanmanızı öneririz.

İşiniz bittiğinde Xcode paket bağımlılıklarınızı çözer ve bunları arka planda indirir. Paket bağımlılıklarını ekleme hakkında daha fazla bilgi için Apple makalesini inceleyin.

PAL SDK'sını manuel olarak indirip yükleyin

Swift Package Manager'ı kullanmak istemiyorsanız PAL SDK'yı indirip projenize manuel olarak ekleyebilirsiniz.

  1. iOS için PAL SDK'yı indirin ve çıkarın
  2. Çerçeveyi projenize dahil etmek için Apple Geliştirici Kılavuzu'ndaki talimatları uygulayın.

Tek seferlik rastgele sayı oluştur

"Tek seferlik", PAL tarafından PALNonceLoader kullanılarak oluşturulan tek bir şifrelenmiş dizedir. PAL SDK, her yeni akış isteğine yeni oluşturulan bir tek seferlik rastgele sayı eklenmesini gerektirir. Bununla birlikte, nonce'lar aynı akış içinde birden fazla reklam isteği için yeniden kullanılabilir.

Aşağıdaki kod snippet'lerinin tümü, PAL tvOS örnek uygulamasındaki ViewController.m üzerinde yapılan değişikliklerdir.

Tek seferlik rastgele sayı istemek için önce PAL kitaplığını içe aktarın:

@import ProgrammaticAccessLibrary;

Daha sonra, PALNonceLoader örneği oluşturun ve iki yetki verme yöntemi için saplamalar ekleyin:

@interface ViewController () <PALNonceLoaderDelegate>
// The nonce loader to use for nonce requests.
@property(nonatomic) PALNonceLoader *nonceLoader;
// The view in which a video would play.
// In this sample, it is mocked for simplification.
@property(nonatomic, weak) IBOutlet UIView *videoView;
@end
...
- (void) viewDidLoad {
  [super viewDidLoad];
  // The default value for 'allowStorage' and
  // 'directedForChildOrUnknownAge' is 'NO', but should be updated once the
  // appropriate consent has been gathered. Publishers should either
  // integrate with a CMP or use a different method to handle storage consent.
  PALSettings *settings = [[PALSettings alloc] init];
  settings.allowStorage = YES;
  settings.directedForChildOrUnknownAge = NO;

  self.nonceLoader = [[PALNonceLoader alloc] initWithSettings:settings];
  self.nonceLoader.delegate = self;
}

#pragma mark - PALNonceLoaderDelegate methods

- (void)nonceLoader:(PALNonceLoader *)nonceLoader
            withRequest:(PALNonceRequest *)request
    didLoadNonceManager:(PALNonceManager *)nonceManager {
}

- (void)nonceLoader:(PALNonceLoader *)nonceLoader
         withRequest:(PALNonceRequest *)request
    didFailWithError:(NSError *)error {
}

Ardından bir tek seferlik istek başlatın, özelliklerini doldurun ve bir tek seferlik rastgele yönetici başlatmak için kullanın:

@interface ViewController () <PALNonceLoaderDelegate>
// The nonce loader to use for nonce requests.
@property(nonatomic) PALNonceLoader *nonceLoader;
// The nonce manager result from the last successful nonce request.
@property(nonatomic) PALNonceManager *nonceManager;
// The view in which a video would play. In this sample, it is mocked for
// simplification.
@property(nonatomic, weak) IBOutlet UIView *videoView;
@end

...

- (void)viewDidLoad {
  ...
  self.nonceLoader.delegate = self;
  [self requestNonceManager];
}

...

#pragma mark - UI Callback methods

/**
 * Requests a new nonce manager with a request containing arbitrary test values
 * like a (sane) user might supply. Displays the nonce or error on success. This
 * should be called once per stream.
 */
- (void)requestNonceManager {
  PALNonceRequest *request = [[PALNonceRequest alloc] init];
  request.continuousPlayback = PALFlagOff;
  request.descriptionURL = [NSURL URLWithString:@"https://example.com/desc?key=val"];
  request.iconsSupported = YES;
  request.playerType = @"AwesomePlayer";
  request.playerVersion = @"4.2.1";
  request.PPID = @"123987456";
  request.sessionID = @"Sample SID";
  // Sample API framework integer. See reference docs for more details.
  NSInteger SampleAPIFramework = 501;
  request.supportedApiFrameworks = [NSMutableSet setWithArray:@[ SampleAPIFramework ]];
  request.videoPlayerHeight = 480;
  request.videoPlayerWidth = 640;
  request.willAdAutoPlay = PALFlagOn;
  request.willAdPlayMuted = PALFlagOff;

  if (self.nonceManager) {
    // Detach the old nonce manager's gesture recognizer before destroying it.
    [self.videoView removeGestureRecognizer:self.nonceManager.gestureRecognizer];
    self.nonceManager = nil;
  }
  [self.nonceLoader loadNonceManagerWithRequest:request];
}

Son olarak, oluşturulan tek seferlik rastgele öğeleri günlüğe kaydetmek için nonce yükleyici yetkilerini doldurun:

#pragma mark - PALNonceLoaderDelegate methods

- (void)nonceLoader:(PALNonceLoader *)nonceLoader
            withRequest:(PALNonceRequest *)request
    didLoadNonceManager:(PALNonceManager *)nonceManager {
  NSLog(@"Programmatic access nonce: %@", nonceManager.nonce);
  // Capture the created nonce manager and attach its gesture recognizer to the video view.
  self.nonceManager = nonceManager;
  [self.videoView addGestureRecognizer:self.nonceManager.gestureRecognizer];
}

- (void)nonceLoader:(PALNonceLoader *)nonceLoader
         withRequest:(PALNonceRequest *)request
    didFailWithError:(NSError *)error {
  NSLog(@"Error generating programmatic access nonce: %@", error);
}

Doğrudan VAST çağrınızı (DVC) yaparken tek seferlik rastgele sayınızı givn parametresindeki değer olarak ayarlayın. Tek seferlik rastgele bir URL güvenlidir; URL olarak kodlamanız gerekmez.

Son olarak, içerik oynatma oturumu bilgilerini ve tıklamaları SDK'ya göndermeyle ilgili yöntemler eklemeniz gerekir. sendPlaybackStart, sendPlaybackEnd ve sendAdClick yöntemlerini uygulayan aşağıdaki örneği inceleyin:

...

// Reports the start of playback for the current content session.
- (void)sendPlaybackStart {
  [self.nonceManager sendPlaybackStart];
}

// Reports the end of playback for the current content session.
- (void)sendPlaybackEnd {
  [self.nonceManager sendPlaybackEnd];
}

// Reports an ad click for the current nonce manager, if not nil.
- (void)sendAdClick {
  [self.nonceManager sendAdClick];
}

Uygulamanızda, kullanıcı tarafından başlatılan bir işleme (tıkla oynat) veya uygulama tarafından başlatılan bir işleme (otomatik oynatma) yanıt olarak, oynatma ilk kez başlatıldığında sendPlaybackStart "video oynatıcı başlatıldığında", oynatma sona erdiğinde de sendPlaybackEnd ve izleyici bir reklamı her tıkladığında sendAdClick çağrılmalıdır.

(İsteğe bağlı) Üçüncü taraf reklam sunucuları üzerinden Google Ad Manager sinyalleri gönderme

Üçüncü taraf reklam sunucusunun Ad Manager isteğini yapılandırın. Aşağıdaki adımları tamamladıktan sonra, nonce parametresi PAL SDK'dan aracı sunucularınız üzerinden ve ardından Google Ad Manager'a yayılır. Bu, Google Ad Manager aracılığıyla daha iyi para kazanmanızı sağlar.

Üçüncü taraf reklam sunucunuzu, tek seferlik rastgele sayıyı sunucunun Ad Manager'a isteğine dahil edecek şekilde yapılandırın. Üçüncü taraf reklam sunucusunun içinde yapılandırılmış bir reklam etiketi örneğini burada görebilirsiniz:

https://pubads.serverside.net/gampad/ads?givn=%%custom_key_for_google_nonce%%&...

Daha fazla bilgi için Google Ad Manager Sunucu tarafı uygulama kılavuzuna bakın.

Ad Manager, tek seferlik değeri tanımlamak için givn= değerini arar. Üçüncü taraf reklam sunucusunun %%custom_key_for_google_nonce%% gibi kendi makrolarını desteklemesi ve bunu önceki adımda sağladığınız nonce sorgu parametresiyle değiştirmesi gerekir. Bunun nasıl yapılacağı hakkında daha fazla bilgi, üçüncü taraf reklam sunucusunun belgelerinde bulunabilir.