پیشنیازها
- ایکسکد ۱۳ یا بالاتر
این راهنما نحوه فراخوانی PAL SDK را برای دریافت nonce و نظارت بر رویدادهای پخش شرح میدهد. برای دنبال کردن راهنمای تکمیلشده، برنامه نمونه PAL tvOS را دانلود کنید.
PAL SDK را به پروژه خود اضافه کنید
نصب PAL SDK با استفاده از Swift Package Manager
کیت توسعه نرمافزار (SDK) کتابخانه Programmatic Access از نسخه ۲.۵.۳ به بعد از Swift Package Manager پشتیبانی میکند. برای وارد کردن بسته Swift، مراحل زیر را دنبال کنید.
در Xcode، با رفتن به مسیر File > Add Packages...، بستهی IMA SDK Swift را نصب کنید.
در اعلانی که ظاهر میشود، مخزن گیتهاب IMA SDK Swift Package را جستجو کنید:
https://github.com/googleads/swift-package-manager-google-programmatic-access-library-tvosنسخهای از بسته PAL SDK Swift که میخواهید استفاده کنید را انتخاب کنید. برای پروژههای جدید، توصیه میکنیم از نسخه Up to Next Major Version استفاده کنید.
پس از اتمام کار، Xcode وابستگیهای بسته شما را حل کرده و آنها را در پسزمینه دانلود میکند. برای جزئیات بیشتر در مورد نحوه اضافه کردن وابستگیهای بسته، به مقاله اپل مراجعه کنید.
دانلود و نصب دستی PAL SDK
اگر نمیخواهید از Swift Package Manager استفاده کنید، میتوانید PAL SDK را دانلود کرده و به صورت دستی آن را به پروژه خود اضافه کنید.
- PAL SDK را برای tvOS دانلود و استخراج کنید
- برای گنجاندن این چارچوب در پروژه خود ، راهنمای توسعهدهندگان اپل را دنبال کنید.
یک نانس (nonce) ایجاد کنید
یک «نانس» یک رشته رمزگذاری شده واحد است که توسط PAL با استفاده از PALNonceLoader تولید میشود. PAL SDK نیاز دارد که هر درخواست جریان جدید با یک نانس تازه تولید شده همراه باشد. با این حال، نانسها را میتوان برای چندین درخواست تبلیغ در همان جریان دوباره استفاده کرد.
تمام قطعه کدهای زیر، اصلاحاتی بر روی ViewController.m در برنامه نمونه PAL tvOS هستند.
برای درخواست یک nonce، با وارد کردن کتابخانه PAL شروع کنید:
@import ProgrammaticAccessLibrary;
در مرحله بعد، یک نمونه از PALNonceLoader ایجاد کنید و stubهایی را برای دو متد delegate اضافه کنید:
@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 'directedForChildOrUnknownAge' is
// 'NO'. Update the value after the appropriate consent has been gathered.
// By default, PAL automatically determines whether to enable limited ads
// based on the user's TCF (Transparency and Consent Framework) consent data
// on the device. If you must manually override the default behavior,
// for example, to meet your app's requirements, use the
// `PALSettings.forceLimitedAds` property.
PALSettings *settings = [[PALSettings alloc] init];
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 integers. See reference docs for more details.
request.supportedAPIFrameworks = [NSMutableSet setWithArray:@[ @2, @7, @9 ]];
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];
}
In your implementation, sendPlaybackStart should be called on "video player start" as playback initiates for the first time, in response to either a user-initiated action (click-to-play) or an app initiated action (autoplay), sendPlaybackEnd should be called when playback ends, and sendAdClick should be called each time the viewer clicks an ad.
(اختیاری) ارسال سیگنالهای Google Ad Manager از طریق سرورهای تبلیغاتی شخص ثالث
درخواست سرور تبلیغاتی شخص ثالث را برای Ad Manager پیکربندی کنید. پس از تکمیل مراحل زیر، پارامتر nonce از PAL SDK، از طریق سرورهای واسطه شما و سپس به Google Ad Manager منتشر میشود. این امر امکان کسب درآمد بهتر از طریق Google Ad Manager را فراهم میکند.
سرور تبلیغاتی شخص ثالث خود را طوری پیکربندی کنید که nonce را در درخواست سرور به Ad Manager لحاظ کند. در اینجا مثالی از یک تگ تبلیغاتی که در داخل سرور تبلیغاتی شخص ثالث پیکربندی شده است، آورده شده است:
https://pubads.serverside.net/gampad/ads?givn=%%custom_key_for_google_nonce%%&...
برای جزئیات بیشتر، به راهنمای پیادهسازی سمت سرور Google Ad Manager مراجعه کنید.
مدیر تبلیغات برای شناسایی مقدار nonce به دنبال givn= میگردد. سرور تبلیغات شخص ثالث باید از برخی ماکروهای خاص خود، مانند %%custom_key_for_google_nonce%% ، پشتیبانی کند و آن را با پارامتر جستجوی nonce که در مرحله قبل ارائه دادید، جایگزین کند. اطلاعات بیشتر در مورد نحوه انجام این کار باید در مستندات سرور تبلیغات شخص ثالث موجود باشد.