আইপ্যাডে একাধিক উইন্ডোজ সাপোর্ট করে

iOS 13 থেকে শুরু করে, অ্যাপ্লিকেশনগুলো আইপ্যাডে একাধিক উইন্ডো সমর্থন করতে পারে, যার অর্থ হলো ব্যবহারকারীরা একটি অ্যাপের UI-এর একাধিক যুগপৎ কপির সাথে ইন্টারঅ্যাক্ট করতে পারবেন। প্রতিটি উইন্ডো বিভিন্ন আকারে তৈরি করা যায় এবং যেকোনো সময় এর আকার পরিবর্তন করা যায়, যা বিজ্ঞাপন কীভাবে লোড এবং প্রদর্শিত হবে তার উপর প্রভাব ফেলে।

এই নির্দেশিকাটির উদ্দেশ্য হলো আইপ্যাডের একাধিক উইন্ডো ব্যবহার করে বিজ্ঞাপন সঠিকভাবে প্রদর্শনের সর্বোত্তম পদ্ধতিগুলো আপনাকে দেখানো।

পূর্বশর্ত

বিজ্ঞাপনের অনুরোধে প্রেক্ষাপট তৈরি করুন

একটি নির্দিষ্ট উইন্ডোর জন্য উপযুক্ত বিজ্ঞাপন পেতে, আপনাকে বিজ্ঞাপনের অনুরোধে ভিউটির 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];
    }
  }];
}

আপনি উইন্ডো ঘোরানোর মতোই উইন্ডোর আকার পরিবর্তন করতে পারেন। ব্যানার বিজ্ঞাপনটি যেন নতুন উইন্ডোর আকারে ঠিকভাবে বসে, তা নিশ্চিত করার দায়িত্ব আপনার অ্যাপের।

নিচের উদাহরণটি নতুন উইন্ডো প্রস্থ সহ একটি নতুন অভিযোজিত ব্যানার তৈরি করে:

সুইফট

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.