وبدايةً من نظام التشغيل iOS 13، يمكن للتطبيقات أن تتوافق مع نوافذ متعددة على iPad، ما يعني أنّه بإمكان المستخدمين التفاعل مع عدة نُسخ متزامنة من واجهة مستخدم التطبيق. يمكن إنشاء كل نافذة بأحجام مختلفة ويمكن تغيير حجمها في أي وقت، ما يكون له آثار على كيفية تحميل الإعلانات وعرضها.
يهدف هذا الدليل إلى توضيح أفضل الممارسات لعرض الإعلانات بشكل صحيح في حالات النوافذ المتعددة على iPad.
المتطلبات الأساسية
- الإصدار 7.53.0 أو إصدار أحدث من حزمة "SDK لإعلانات Google على الأجهزة الجوّالة"
- تفعيل ميزة دعم المشهد في مشروعك
- نفِّذ شكل إعلان واحدًا على الأقل.
ضبط المشهد في طلب إعلان
لتلقّي إعلان يناسب نافذة معيّنة، يجب تمرير
windowScene
للعرض إلى طلب الإعلان. تعرض حزمة SDK لإعلانات Google على الأجهزة الجوّالة إعلانًا
بحجم صالح لهذا المشهد.
Swift
func loadInterstitial() { let request = GADRequest() request.scene = view.window?.windowScene GADInterstitialAd.load(withAdUnitID: "[AD_UNIT_ID]", request: request) { ad, error in } }
Objective-C
- (void)loadInterstitial { GADRequest *request = [GADRequest request]; request.scene = self.view.window.windowScene; [GADInterstitialAd loadWithAdUnitID:@"[AD_UNIT_ID]" request:request completionHandler:^(GADInterstitialAd *ad, NSError *error) {}]; }
في وضع الاختبار، ستتعذّر طلبات الإعلان مع ظهور الخطأ التالي إذا كان تطبيقك المتعدّد المشاهد يطلب إعلانًا بدون تمرير مشهد:
<Google> Invalid Request. The GADRequest scene property should be set for
applications that support multi-scene. Treating the unset property as an error
while in test mode.
في وضع الإنتاج، تتم تعبئة طلب الإعلان، ولكن لن يتم عرض الإعلان إذا تم عرضه في نافذة ليست بملء الشاشة. رسالة الخطأ في هذه الحالة هي:
<Google> Ad cannot be presented. The full screen ad content size exceeds the current window size.
إنشاء طلب الإعلان في viewPolicydoes:
تؤدي حالة النوافذ المتعددة إلى توفير مشهد نافذة لإرسال طلبات الإعلان. بما أنّه لم تتم إضافة طريقة عرض إلى نافذة في
viewDidLoad:
، عليك إنشاء طلبات إعلان في "viewDidAppear:
" بدلاً من ذلك،
حيث يتم ضبط مشهد النافذة عند هذه النقطة.
تجدر الإشارة إلى أنّه يمكن طلب البيانات من viewDidAppear:
أكثر من مرة خلال دورة حياة التطبيق. ننصحك بإدراج رمز تهيئة طلب الإعلان في علامة تشير إلى ما إذا كان قد تم إجراؤه من قبل.
Swift
override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) if !requestInitialized { loadInterstitial() requestInitialized = true } }
Objective-C
- (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; if (!_requestInitialized) { [self loadInterstitial]; _requestInitialized = YES; } }
تغيير الحجم المقبض
يمكن للمستخدمين سحب المشاهد في أي وقت، وتغيير أحجام النوافذ بعد تقديم طلب الإعلان. الأمر متروك لك لطلب إعلان جديد عند حدوث تغيير الحجم.
يستخدم الرمز النموذجي أدناه viewWillTransitionToSize:withTransitionCoordinator:
لتلقّي إشعار عند تدوير أو تغيير حجم نافذة وحدة التحكّم في العرض الجذر، ولكن يمكنك أيضًا الاستماع إلى windowScene:didUpdateCoordinateSpace:interfaceOrientation:traitCollection:
لمعرفة التغييرات الخاصة بمشهد النافذة.
إعلان بيني وإعلانات تضم مكافأة
توفِّر "حزمة تطوير البرامج (SDK) لإعلانات Google على الأجهزة الجوّالة" الطريقة
canPresentFromViewController:error:
لتحديد ما إذا كان الإعلان البيني
أو الإعلان بمكافأة صالحًا أم لا، ما يمنحك إمكانية التحقّق ممّا إذا كان هناك إعلان بملء الشاشة يحتاج إلى إعادة التحميل كلما تغيّر حجم النافذة.
Swift
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) { super.viewWillTransition(to: size, with: coordinator) coordinator.animate(alongsideTransition: nil) { [self] context in do { try interstitial?.canPresent(fromRootViewController: self) } catch { loadInterstitial() } } }
Objective-C
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id)coordinator { [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator]; [coordinator animateAlongsideTransition:nil completion:^(id _Nonnull context) { if (![self.interstitial canPresentFromRootViewController:self error:nil]) { [self loadInterstitial]; } }]; }
بانر
يمكنك التعامل مع تغيير حجم النوافذ بالطريقة نفسها التي تتعامل بها مع تدوير النوافذ. فتطبيقك مسؤول عن ضمان ملاءمة إعلان البانر لحجم النافذة الجديد.
ينشئ المثال التالي إعلان بانر تكيُّفي جديدًا بعرض النافذة الجديدة:
Swift
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) { super.viewWillTransition(to: size, with: coordinator) coordinator.animate(alongsideTransition: nil) { [self] context in loadBanner() } } func loadBanner() { let bannerWidth = view.frame.size.width bannerView.adSize = GADCurrentOrientationAnchoredAdaptiveBannerAdSizeWithWidth(bannerWidth) let request = GADRequest() request.scene = view.window?.windowScene bannerView.load(request) }
Objective-C
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id)coordinator { [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator]; [coordinator animateAlongsideTransition:nil completion:^(id _Nonnull context) { [self loadBannerAd]; }]; } - (void)loadBannerAd { CGFloat bannerWidth = self.view.frame.size.width; self.bannerView.adSize = GADCurrentOrientationAnchoredAdaptiveBannerAdSizeWithWidth(bannerWidth); GADRequest *request = [GADRequest request]; request.scene = self.view.window.windowScene; [self.bannerView loadRequest:request]; }
إعلان مدمج مع المحتوى
أنت من يتحكّم في عرض الإعلانات المدمجة مع المحتوى وتتحمّل مسؤولية ضمان عرض الإعلان المدمج مع المحتوى في عرض تم تغيير حجمه، على غرار بقية محتوى تطبيقك.
المشاكل المعروفة
في الوقت الحالي، لا يُسمح بالإعلانات المتعددة النوافذ التي تعمل في وضع تقسيم الشاشة إلّا في الوضع العمودي. ستتلقّى رسالة السجلّ التالية عند طلب إعلان في الوضع الأفقي.
<Google> Ad cannot be presented. The full screen ad content size exceeds the
current window size.