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

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

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

پیش‌نیازها

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

برای دریافت تبلیغی که متناسب با یک پنجره خاص باشد، windowScene مربوط به نما را به درخواست تبلیغ ارسال می‌کنید. 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];
    }
  }];
}

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

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

سویفت

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

هدف-سی

- (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.