iOS 13 से, ऐप्लिकेशन iPad पर एक से ज़्यादा विंडो के साथ काम कर सकते हैं. इसका मतलब है कि उपयोगकर्ता, ऐप्लिकेशन के यूज़र इंटरफ़ेस (यूआई) की एक से ज़्यादा कॉपी के साथ एक साथ इंटरैक्ट कर सकते हैं. हर विंडो को अलग-अलग साइज़ में बनाया जा सकता है और किसी भी समय उसका साइज़ बदला जा सकता है. इससे, विज्ञापनों को लोड और दिखाने के तरीके पर असर पड़ता है.
इस गाइड में, iPad की मल्टी-विंडो सुविधा में विज्ञापनों को सही तरीके से रेंडर करने के सबसे सही तरीके बताए गए हैं.
ज़रूरी शर्तें
- Google Mobile Ads SDK 7.53.0 या इसके बाद का वर्शन
- अपने प्रोजेक्ट में सीन की सुविधा चालू करना
- कम से कम एक विज्ञापन फ़ॉर्मैट लागू करें
विज्ञापन अनुरोध में सीन सेट करना
किसी खास विंडो में फ़िट होने वाला विज्ञापन पाने के लिए, विज्ञापन अनुरोध में व्यू का windowScene
पास करें. 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 } }
- (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(fromRootViewController: 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 = GADCurrentOrientationAnchoredAdaptiveBannerAdSizeWithWidth(bannerWidth) let request = GADRequest() 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.