پشتیبانی از چندین ویندوز در iPad

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

این راهنما در نظر گرفته شده است تا بهترین روش‌ها را برای ارائه درست تبلیغات در یک سناریوی چند پنجره‌ای iPad به شما نشان دهد.

پیش نیازها

صحنه را در یک درخواست آگهی تنظیم کنید

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

سریع

func loadInterstitial() {
  let request = GADRequest()
  request.scene = view.window?.windowScene

  GADInterstitialAd.load(withAdUnitID: "[AD_UNIT_ID]",
      request: request) { ad, error in }
}

هدف-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: می تواند بیش از یک بار در طول چرخه عمر برنامه تماس گرفته شود. توصیه می کنیم کد اولیه درخواست تبلیغ را در پرچمی بپیچید که نشان می دهد آیا قبلاً انجام شده است یا خیر.

سریع

override func viewDidAppear(_ animated: Bool) {
  super.viewDidAppear(animated)
  if !requestInitialized {
    loadInterstitial()
    requestInitialized = true
  }
}

هدف-C

- (void)viewDidAppear:(BOOL)animated {
  [super viewDidAppear:animated];
  if (!_requestInitialized) {
    [self loadInterstitial];
    _requestInitialized = YES;
  }
}

تغییر اندازه دسته

کاربران می توانند هر زمان که بخواهند صحنه ها را به اطراف بکشند و پس از درخواست تبلیغات، اندازه پنجره را تغییر دهند. این به شما بستگی دارد که در صورت تغییر اندازه، یک آگهی جدید درخواست کنید. کد نمونه زیر از viewWillTransitionToSize:withTransitionCoordinator: استفاده می‌کند تا هنگام چرخش یا تغییر اندازه پنجره کنترل‌کننده view root مطلع شوید، اما می‌توانید به 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(fromRootViewController: self)
    } catch {
      loadInterstitial()
    }
  }
}

هدف-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];
    }
  }];
}

شما می توانید تغییر اندازه پنجره را به همان روشی که برای چرخش پنجره انجام می دهید مدیریت کنید. برنامه شما مسئول اطمینان از متناسب بودن بنر تبلیغاتی با اندازه پنجره جدید است.

مثال زیر یک بنر تطبیقی ​​جدید با عرض پنجره جدید ایجاد می کند:

سریع

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)
}

هدف-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.