iPad पर, एक से ज़्यादा Windows के साथ काम करता है

iOS 13 और इसके बाद के वर्शन में, iPad पर एक से ज़्यादा विंडो का इस्तेमाल किया जा सकता है. इसका मतलब है कि उपयोगकर्ता किसी ऐप्लिकेशन के यूज़र इंटरफ़ेस (यूआई) की एक साथ कई कॉपी इस्तेमाल कर सकते हैं. हर विंडो को अलग-अलग साइज़ में बनाया जा सकता है और इसका साइज़ किसी भी समय बदला जा सकता है. इससे विज्ञापनों को लोड करने और उन्हें दिखाने के तरीके पर असर पड़ता है.

इस गाइड का मकसद आपको iPad मल्टी-विंडो (एक से ज़्यादा ऐप, एक साथ) में विज्ञापनों को सही तरीके से रेंडर करने के सबसे सही तरीके बताए गए हैं.

ज़रूरी शर्तें

विज्ञापन अनुरोध में सीन सेट करें

किसी खास विंडो में फ़िट होने वाला विज्ञापन पाने के लिए, आपको विज्ञापन अनुरोध में व्यू का windowScene पास करना होता है. Google Mobile Ads SDK उस सीन के लिए एक मान्य साइज़ वाला विज्ञापन दिखाता है.

Swift

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

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

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

ViewDisplayIntent में विज्ञापन अनुरोध बनाएं:

मल्टी-विंडो (एक से ज़्यादा ऐप, एक साथ) के मामले में, विज्ञापन अनुरोध भेजने के लिए विंडो सीन की ज़रूरत होती है. viewDidLoad: की विंडो में अभी तक कोई व्यू नहीं जोड़ा गया है. इसलिए, आपको इसके बजाय viewDidAppear: में विज्ञापन अनुरोध बनाने चाहिए, जहां विंडो सीन को इसी पॉइंट से सेट किया जाता है.

ध्यान रखें कि किसी ऐप्लिकेशन की लाइफ़साइकल के दौरान, viewDidAppear: को एक से ज़्यादा बार कॉल आ सकता है. हमारा सुझाव है कि आप विज्ञापन अनुरोध शुरू करने वाले कोड को एक ऐसे फ़्लैग में रैप करें जो दिखाता है कि ऐसा पहले ही किया जा चुका है या नहीं.

Swift

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

Objective-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: तरीके की मदद से यह पता लगाता है कि अचानक दिखने वाला या इनाम वाला विज्ञापन मान्य है या नहीं. इससे यह पता लगाया जा सकता है कि विंडो का साइज़ बदलने पर किसी फ़ुलस्क्रीन विज्ञापन को रीफ़्रेश करने की ज़रूरत है या नहीं.

Swift

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

Objective-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];
    }
  }];
}

विंडो का साइज़ बदलने की सुविधा को ठीक उसी तरह मैनेज किया जा सकता है जिस तरह विंडो को घुमाने के लिए किया जाता है. यह पक्का करने की ज़िम्मेदारी आपके ऐप्लिकेशन की होती है कि बैनर विज्ञापन नई विंडो के साइज़ में फ़िट हो.

नीचे दिए गए उदाहरण में, विंडो की चौड़ाई के हिसाब से नया अडैप्टिव बैनर बनाया गया है:

Swift

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

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