Предварительные условия
- Xcode 13 или выше
В этом руководстве описывается, как вызвать PAL SDK для получения nonce и отслеживания событий воспроизведения. Чтобы следовать завершенному руководству, загрузите образец приложения PAL tvOS .
Добавьте PAL SDK в свой проект
Установите PAL SDK с помощью диспетчера пакетов Swift.
SDK библиотеки программного доступа поддерживает Swift Package Manager, начиная с версии 2.5.3. Выполните следующие действия, чтобы импортировать пакет Swift.
В Xcode установите пакет IMA SDK Swift, выбрав «Файл» > «Добавить пакеты...» .
В появившемся окне найдите репозиторий IMA SDK Swift Package GitHub:
https://github.com/googleads/swift-package-manager-google-programmatic-access-library-tvos
Выберите версию пакета PAL SDK Swift, которую вы хотите использовать. Для новых проектов мы рекомендуем использовать Up to Next Major Version .
Когда вы закончите, Xcode разрешит зависимости вашего пакета и загрузит их в фоновом режиме. Более подробную информацию о том, как добавить зависимости пакета, можно найти в статье Apple .
Загрузите и установите PAL SDK вручную.
Если вы не хотите использовать Swift Package Manager, вы можете загрузить PAL SDK и вручную добавить его в свой проект.
- Загрузите и извлеките PAL SDK для iOS.
- Следуйте Руководству разработчика Apple , чтобы включить эту платформу в свой проект.
Создать одноразовый номер
«Nonce» — это одна зашифрованная строка, созданная PAL с использованием PALNonceLoader
. PAL SDK требует, чтобы каждый новый запрос потока сопровождался вновь созданным одноразовым номером. Однако одноразовые номера можно использовать повторно для нескольких запросов объявлений в одном потоке.
Все приведенные ниже фрагменты кода являются модификациями ViewController.m
в примере приложения PAL tvOS .
Чтобы запросить одноразовый номер, начните с импорта библиотеки PAL:
@import ProgrammaticAccessLibrary;
Затем создайте экземпляр PALNonceLoader
и добавьте заглушки для двух методов делегата:
@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 {
}
Затем инициируйте запрос nonce, заполните его свойства и используйте его для инициализации менеджера nonce:
@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.
*
* The PALNonceRequest parameters set here are example parameters.
* You should set your parameters based on your own app characteristics.
*/
- (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];
}
Наконец, заполните делегаты загрузчика nonce для регистрации сгенерированных nonce:
#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);
}
При выполнении прямого вызова VAST (DVC) установите свой nonce в качестве значения параметра givn
. Nonce безопасен для URL — вам не нужно его URL-кодировать.
Наконец, вам необходимо добавить в SDK методы для обработки отправки информации о сеансе воспроизведения контента и кликов. См. следующий пример реализации методов sendPlaybackStart
, sendPlaybackEnd
и sendAdClick
:
...
// 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];
}
В вашей реализации sendPlaybackStart
должен вызываться при «запуске видеопроигрывателя», когда воспроизведение инициируется в первый раз, в ответ либо на действие, инициированное пользователем (воспроизведение по щелчку), либо на действие, инициированное приложением (автозапуск), sendPlaybackEnd
должен быть вызывается, когда воспроизведение заканчивается, а sendAdClick
должен вызываться каждый раз, когда зритель нажимает на рекламу.
(Необязательно) Отправляйте сигналы Google Ad Manager через сторонние рекламные серверы.
Настройте запрос стороннего рекламного сервера к Менеджеру рекламы. После выполнения следующих шагов параметр nonce передается из PAL SDK через промежуточные серверы, а затем в Google Ad Manager. Это обеспечивает лучшую монетизацию через Google Ad Manager.
Настройте свой сторонний рекламный сервер так, чтобы он включал nonce в запрос сервера к Менеджеру рекламы. Вот пример рекламного тега, настроенного на стороннем рекламном сервере:
https://pubads.serverside.net/gampad/ads?givn=%%custom_key_for_google_nonce%%&...
Дополнительную информацию см. в руководстве по внедрению на стороне сервера Google Ad Manager .
Менеджер рекламы ищет givn=
чтобы определить значение nonce. Стороннему серверу объявлений необходимо поддерживать какой-либо собственный макрос, например %%custom_key_for_google_nonce%%
, и заменять его параметром запроса nonce, который вы указали на предыдущем шаге. Дополнительную информацию о том, как это сделать, можно найти в документации стороннего рекламного сервера.