دعم عدة نوافذ على iPad

بدءًا من الإصدار 13 من نظام التشغيل iOS، يمكن للتطبيقات إتاحة تعدُّد النوافذ على أجهزة iPad، ما يعني أنّه يمكن للمستخدمين التفاعل مع نُسخ متعدّدة متزامنة من واجهة مستخدم التطبيق. يمكن إنشاء كل نافذة بأحجام مختلفة ويمكن تغيير حجمها في أي وقت، ما يؤثر في كيفية تحميل الإعلانات وعرضها.

يهدف هذا الدليل إلى توضيح أفضل الممارسات لعرض الإعلانات بشكل صحيح في سيناريو استخدام نوافذ متعددة على جهاز iPad.

المتطلبات الأساسية

ضبط المشهد في طلب إعلان

لتلقّي إعلان يناسب نافذة معيّنة، عليك تمرير 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.

أنشئ طلب الإعلان في 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(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.