iOS 13 থেকে শুরু করে, অ্যাপ্লিকেশনগুলি iPad-এ একাধিক উইন্ডো সমর্থন করতে পারে, যার অর্থ ব্যবহারকারীরা একটি অ্যাপের UI-এর একাধিক সমকালীন কপির সাথে ইন্টারঅ্যাক্ট করতে পারে। প্রতিটি উইন্ডো বিভিন্ন আকারে তৈরি করা যেতে পারে এবং যেকোনো সময় আকার পরিবর্তন করা যেতে পারে, যা বিজ্ঞাপনগুলি কীভাবে লোড এবং উপস্থাপন করা হয় তার উপর প্রভাব ফেলে।
এই নির্দেশিকাটি আপনাকে iPad মাল্টি-উইন্ডো পরিস্থিতিতে সঠিকভাবে বিজ্ঞাপন রেন্ডার করার সর্বোত্তম অনুশীলনগুলি দেখানোর উদ্দেশ্যে তৈরি করা হয়েছে।
পূর্বশর্ত
- গুগল মোবাইল বিজ্ঞাপন SDK ৭.৫৩.০ বা তার বেশি
- আপনার প্রকল্পে দৃশ্য সমর্থন সক্ষম করুন
- কমপক্ষে একটি বিজ্ঞাপন ফর্ম্যাট প্রয়োগ করুন
একটি বিজ্ঞাপন অনুরোধে দৃশ্যটি সেট করুন
একটি নির্দিষ্ট উইন্ডোর সাথে মানানসই বিজ্ঞাপন পেতে, আপনাকে ভিউয়ের windowScene বিজ্ঞাপনের অনুরোধে পাঠাতে হবে। Google মোবাইল বিজ্ঞাপন 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.