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

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

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

পূর্বশর্ত

একটি বিজ্ঞাপন অনুরোধে দৃশ্য সেট করুন

একটি নির্দিষ্ট উইন্ডোর সাথে মানানসই একটি বিজ্ঞাপন পাওয়ার জন্য, আপনি বিজ্ঞাপনের অনুরোধে ভিউয়ের windowScene পাস করুন৷ Google মোবাইল বিজ্ঞাপন 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: যখন রুট ভিউ কন্ট্রোলারের উইন্ডোটি ঘোরে বা পুনরায় আকার দেয় তখন বিজ্ঞপ্তি পেতে, তবে আপনি উইন্ডো দৃশ্যের নির্দিষ্ট পরিবর্তনের জন্য 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.