حزمة تطوير البرامج (SDK) لإعلانات الوسائط التفاعلية (IMA) على نظام التشغيل iOS
هذا الدليل مخصّص للناشرين الذين يستخدمون "الإعلانات التفاعلية" (IMA) ويريدون إضافة ميزة "نافذة ضمن النافذة" إلى إعدادات "الإعلانات التفاعلية" الحالية.
المتطلبات الأساسية
- أكمِل دليل البدء.
إضافة ميزة "نافذة ضمن النافذة" إلى تطبيقك
بدءًا من الإصدار 3.1.0 من حزمة تطوير البرامج (SDK)، تتوافق "الإعلانات التفاعلية" مع وضع "نافذة ضمن النافذة" من Apple على أجهزة iPad. لإتاحة ميزة "نافذة ضمن النافذة" في تطبيقك، عليك تعديل بعض الإعدادات وتنفيذ بعض فئات IMA الجديدة، كما هو موضّح أدناه.
تعديل الإعدادات للسماح بالتشغيل في الخلفية
يتطلّب وضع "نافذة ضمن النافذة" السماح بتشغيل الوسائط في الخلفية في تطبيقك.
اضبط أوضاع التشغيل في الخلفية على مفعَّل لكل من الصوت وAirPlay و"نافذة ضمن النافذة" كما هو موضّح أدناه:

اضبط سمات
AVAudioSessionلتفعيل تشغيل المحتوى في الخلفية، بالإضافة إلى تفعيل هذه الميزة فيIMASettings:... – (void)viewDidLoad { [super viewDidLoad]; self.playButton.layer.zPosition = MAXFLOAT; [[AVAudioSession sharedInstance] setActive:YES error:nil]; [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil]; [self setupAdsLoader]; [self setUpContentPlayer]; } – (void)setupAdsLoader { IMASettings *settings = [[IMASettings alloc] init]; settings.enableBackgroundPlayback = YES; self.adsLoader = [[IMAAdsLoader alloc] initWithSettings:settings]; self.adsLoader.delegate = self; }
إنشاء عناصر جديدة لنظام التشغيل iOS وIMA من أجل ميزة "نافذة ضمن النافذة"
لإتاحة ميزة "نافذة ضمن النافذة"، أضافت Apple الفئتين AVPictureInPictureController وAVPictureinPictureControllerDelegate. من جهتها، أضافت IMA
IMAPictureInPictureProxy. لدمج هذه الفئات في مشروعك، أضِف العبارات التالية إلى الرمز:
... @interface VideoViewController () <AVPictureInPictureControllerDelegate, IMAAdsLoaderDelegate, IMAAdsManagerDelegate, UIAlertViewDelegate> ... // PiP objects. @property(nonatomic, strong) IMAPictureInPictureProxy *pictureInPictureProxy; @property(nonatomic, strong) AVPictureInPictureController *pictureInPictureController; ... @end - (void)setUpContentPlayer { ... self.pictureInPictureProxy = [[IMAPictureInPictureProxy alloc] initWithAVPictureInPictureControllerDelegate:self]; self.pictureInPictureController = [[AVPictureInPictureController alloc] initWithPlayerLayer:self.contentPlayerLayer]; self.pictureInPictureController.delegate = self.pictureInPictureProxy; }
تعديل طلب الإعلانات
يجب إنشاء عنصر جديد آخر: IMAAVPlayerVideoDisplay. يتم تمرير هذا المعرّف إلى الدالة الإنشائية IMAAdsRequest، ما يسمح لحزمة SDK بإدراج الإعلانات في نافذة "نافذة ضمن النافذة" عند تشغيل الفيديو في وضع "نافذة ضمن النافذة":
... - (void)requestAdsWithTag:(NSString *)adTagUrl { [self logMessage:@"Requesting ads"]; // Create an ad request with our ad tag, display container, and optional user context. IMAAdsRequest *request = [[IMAAdsRequest alloc] initWithAdTagUrl:adTagUrl adDisplayContainer:[self createAdDisplayContainer] avPlayerVideoDisplay:[[IMAAVPlayerVideoDisplay alloc] initWithAVPlayer:self.contentPlayer] pictureInPictureProxy:self.pictureInPictureProxy userContext:nil]; [self.adsLoader requestAdsWithRequest:request]; }
بدء عرض الإعلانات
لا يمكن بدء إعلانات حزمة تطوير البرامج لإعلانات الوسائط التفاعلية (IMA SDK) أثناء وضع "نافذة ضمن النافذة". نتيجةً لذلك، عليك التأكّد من أنّك تستخدم [adsManager start] فقط عندما يكون الفيديو في وضع التشغيل العادي:
... - (void)adsManager:(IMAAdsManager *)adsManager didReceiveAdEvent:(IMAAdEvent *)event { [self logMessage:@"AdsManager event (%s).", AdEventNames[event.type]]; // When the SDK notified you that ads have been loaded, play them. switch (event.type) { case kIMAAdEvent_LOADED: if (![self.pictureInPictureController isPictureInPictureActive]) { [adsManager start]; } break; ... default: break; } }
الدخول في وضع "نافذة ضمن النافذة"
إذا كنت تستخدم AVPlayer بدون AVPlayerViewController، عليك إضافة زر "نافذة ضمن النافذة" الخاص بك. لقد نفّذنا أحدها في العينة المتقدّمة على النحو التالي:
- (IBAction)onPipButtonClicked:(id)sender {
if ([self.pictureInPictureController isPictureInPictureActive]) {
[self.pictureInPictureController stopPictureInPicture];
} else {
[self.pictureInPictureController startPictureInPicture];
}
}
الأسئلة الشائعة
- كيف يمكنني بدء عرض الإعلانات عندما يكون الفيديو في وضع "نافذة ضمن النافذة"؟
- لا يمكن بدء عرض الإعلانات أثناء تشغيل الفيديو في وضع "نافذة ضمن النافذة"، بل يمكن بدء عرضها فقط في وضع التشغيل العادي.
- يجب أن يضبط الدمج الحالي لميزة "نافذة ضمن النافذة"
self.pictureInPictureController.delegateعلى فئتي الخاصة. كيف يمكنني تنفيذ إعلانات IMA في وضع "نافذة ضمن النافذة" مع البقاء المفوّض؟ - يجب أن تتلقّى حزمة تطوير البرامج لإعلانات الوسائط التفاعلية أيضًا رسائل
AVPictureinPictureControllerDelegateلإتاحة تشغيل الإعلانات في وضع "نافذة ضمن النافذة". لهذا السبب، نطلب منك ضبط عنصر التحكّمAVPictureinPictureControllerعلى مثيلIMAPictureInPicturyProxy. يعيد عنصر الوكيل هذا توجيه جميع رسائلAVPictureinPictureControllerDelegateإلى تطبيقك، كما يعيد توجيه طلبات البيانات إلى IMA لتفعيل ميزة "نافذة ضمن النافذة". يُرجى العِلم أنّه يجب أيضًا الاحتفاظ بمعرّف محلي لـ AVPlayerLayer.