بدءًا من نظام التشغيل iOS 13، يمكن للتطبيقات توفير نوافذ متعددة على أجهزة iPad، ما يعني أنّه يمكن للمستخدمين التفاعل مع نُسخ متزامنة متعددة من واجهة مستخدم التطبيق. يمكن إنشاء كل نافذة بأحجام مختلفة ويمكن تغيير حجمها في أي وقت، ما يؤثر في طريقة تحميل الإعلانات وعرضها.
يهدف هذا الدليل إلى عرض أفضل الممارسات لعرض الإعلانات بشكل صحيح في سيناريو النوافذ المتعددة على جهاز iPad.
المتطلبات الأساسية
- الإصدار 7.53.0 أو إصدار أحدث من حزمة "SDK لإعلانات Google على الأجهزة الجوّالة"
- تفعيل إمكانية استخدام المشاهد في مشروعك
- استخدام شكل إعلان واحد على الأقل
ضبط المشهد في طلب إعلان
لتلقّي إعلان يتناسب مع نافذة معيّنة، عليك تمرير windowScene
الخاصة بالعرض إلى طلب الإعلان. تعرض حزمة تطوير البرامج (SDK) لإعلانات Google على الأجهزة الجوّالة إعلانًا بحجم صالح لهذا المشهد.
Swift
func loadInterstitial() { let request = Request() request.scene = view.window?.windowScene InterstitialAd.load(with: "[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.
إنشاء طلب الإعلان في viewDidAppear:
في حالة النوافذ المتعددة، يجب توفُّر مشهد نافذة لإرسال طلبات الإعلانات. بما أنّه لم تتم إضافة أي عرض إلى نافذة في 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(from: 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 = currentOrientationAnchoredAdaptiveBanner(width: bannerWidth) let request = Request() 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.