پشتیبانی از چندین پنجره در آیپد

با شروع iOS 13، برنامه‌ها می‌توانند از چندین پنجره در آیپد پشتیبانی کنند، به این معنی که کاربران می‌توانند با چندین نسخه همزمان از رابط کاربری یک برنامه تعامل داشته باشند. هر پنجره را می‌توان در اندازه‌های مختلف ایجاد کرد و در هر زمان تغییر اندازه داد، که این امر پیامدهایی برای نحوه بارگیری و ارائه تبلیغات دارد.

این راهنما قصد دارد بهترین شیوه‌ها را برای نمایش صحیح تبلیغات در سناریوی چند پنجره‌ای آیپد به شما نشان دهد.

پیش‌نیازها صحنه را در یک درخواست تبلیغ تنظیم کنید

برای دریافت تبلیغی که متناسب با یک پنجره خاص باشد، windowScene مربوط به نما را به درخواست تبلیغ ارسال می‌کنید. Google Mobile Ads SDK تبلیغی با اندازه معتبر برای آن صحنه را برمی‌گرداند.

سویفت
func loadInterstitial() {
  let request = Request()
  request.scene = view.window?.windowScene

  InterstitialAd.load(with: "[AD_UNIT_ID]",
      request: request) { ad, error in }
}
هدف-سی
- (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: می‌تواند بیش از یک بار در طول چرخه حیات یک برنامه فراخوانی شود. توصیه می‌کنیم کد مقداردهی اولیه درخواست تبلیغ را در یک پرچم قرار دهید که نشان می‌دهد آیا قبلاً انجام شده است یا خیر.

سویفت
override func viewDidAppear(_ animated: Bool) {
  super.viewDidAppear(animated)
  if !requestInitialized {
    loadInterstitial()
    requestInitialized = true
  }
}
هدف-سی
- (void)viewDidAppear:(BOOL)animated {
  [super viewDidAppear:animated];
  if (!_requestInitialized) {
    [self loadInterstitial];
    _requestInitialized = YES;
  }
}
تغییر اندازه دسته

کاربران می‌توانند صحنه‌ها را در هر زمانی که بخواهند، بکشند و اندازه پنجره را پس از درخواست تبلیغ تغییر دهند. درخواست تبلیغ جدید هنگام تغییر اندازه به شما بستگی دارد. کد نمونه زیر از viewWillTransitionToSize:withTransitionCoordinator: برای اطلاع‌رسانی هنگام چرخش یا تغییر اندازه پنجره کنترلر نمای ریشه استفاده می‌کند، اما می‌توانید برای تغییرات خاص صحنه پنجره، به windowScene:didUpdateCoordinateSpace:interfaceOrientation:traitCollection: نیز گوش دهید.

تبلیغات بینابینی و پاداشی

Google Mobile Ads SDK متد canPresentFromViewController:error: برای تعیین معتبر بودن یا نبودن یک تبلیغ بینابینی یا تبلیغ پاداشی ارائه می‌دهد و به شما این امکان را می‌دهد که بررسی کنید آیا هر تبلیغ تمام‌صفحه‌ای نیاز به رفرش شدن در هنگام تغییر اندازه پنجره دارد یا خیر.

سویفت
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()
    }
  }
}
هدف-سی
- (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];
    }
  }];
}