স্ক্রল করা ব্যানারগুলির জন্য ইনলাইন অ্যাডাপ্টিভ ব্যবহার করা

প্ল্যাটফর্ম বেছে নিন: Android iOS Flutter Android (Legacy)

অ্যাডাপটিভ ব্যানার হল রেসপন্সিভ বিজ্ঞাপনের পরবর্তী প্রজন্ম, যা প্রতিটি ডিভাইসের জন্য বিজ্ঞাপনের সাইজ অপ্টিমাইজ করে পারফর্ম্যান্স সর্বাধিক করে তোলে। নির্দিষ্ট সাইজের ব্যানারের থেকে উন্নত, যা শুধুমাত্র নির্দিষ্ট হাইট সাপোর্ট করে, অ্যাডাপ্টিভ ব্যানার ডেভেলপারদের বিজ্ঞাপনের প্রস্থ নির্দিষ্ট করতে এবং এটি ব্যবহার করে বিজ্ঞাপনের সবচেয়ে ভালো সাইজ নির্ধারণ করতে দেয়।

বিজ্ঞাপনের সেরা সাইজ বেছে নিতে, ইনলাইন অ্যাডাপ্টিভ ব্যানার নির্দিষ্ট উচ্চতার পরিবর্তে সর্বাধিক উচ্চতা ব্যবহার করে। এর ফলে পারফর্ম্যান্স আরও ভালো করার সুযোগ তৈরি হয়।

ইনলাইন অ্যাডাপ্টিভ ব্যানার কখন ব্যবহার করতে হয়

অ্যাঙ্কর করা অ্যাডাপ্টিভ ব্যানারের তুলনায় ইনলাইন অ্যাডাপ্টিভ ব্যানারগুলি বড় ও লম্বা হয়। ব্যানার। এগুলির উচ্চতা আলাদা আলাদা হয় এবং ডিভাইসের স্ক্রিনের সমান উঁচু হতে পারে।

এগুলি স্ক্রল করা যায় এমন কন্টেন্টে প্লেস করার জন্য তৈরি করা হয়েছে, যেমন:

পূর্বশর্ত

চালিয়ে যাওয়ার আগে, Google Mobile Ads Flutter Plugin সেট-আপ করুন।

শুরু করার আগে

আপনার অ্যাপে অ্যাডাপ্টিভ ব্যানার প্রয়োগ করার সময়, এইসব বিষয় মনে রাখবেন:

  • আপনি Google Mobile Ads Flutter Plugin-এর লেটেস্ট ভার্সন ব্যবহার করছেন কিনা তা নিশ্চিত করুন এবং যদি AdMob মেডিয়েশন ব্যবহার করেন, তাহলে আপনার মেডিয়েশন অ্যাডাপ্টারের লেটেস্ট ভার্সন ব্যবহার করছেন কিনা তা নিশ্চিত করুন।

  • ইনলাইন অ্যাডাপ্টিভ ব্যানারের সাইজ এমনভাবে ডিজাইন করা হয়েছে যাতে উপলভ্য সম্পূর্ণ প্রস্থ ব্যবহার করলে সেটি সবচেয়ে ভাল কাজ করে। বেশিরভাগ ক্ষেত্রে, এটি ব্যবহার করা ডিভাইসের স্ক্রিনের সম্পূর্ণ প্রস্থ হবে। প্রযোজ্য নিরাপদ এলাকা বিবেচনা করতে ভুলবেন না।

  • বিজ্ঞাপনের সাইজ পাওয়ার পদ্ধতিগুলি হল

    • AdSize.getCurrentOrientationInlineAdaptiveBannerAdSize(int width)
    • AdSize.getLandscapeInlineAdaptiveBannerAdSize(int width)
    • AdSize.getPortraitInlineAdaptiveBannerAdSize(int width)
    • AdSize.getInlineAdaptiveBannerAdSize(int width, int maxHeight)
  • ইনলাইন অ্যাডাপ্টিভ ব্যানার API ব্যবহার করার সময়, Google Mobile Ads Flutter Plugin প্রদত্ত প্রস্থ ও একটি ইনলাইন ফ্ল্যাগ সহ একটি AdSize রিটার্ন করে। আপনি কোন API ব্যবহার করছেন তার উপর নির্ভর করে উচ্চতা শূন্য বা maxHeight হয়। বিজ্ঞাপনটি রিটার্ন করা হলে, সেটির আসল উচ্চতা উপলভ্য হয়।

  • ইনলাইন অ্যাডাপ্টিভ ব্যানার স্ক্রল করা যায় এমন কন্টেন্টে প্লেস করার জন্য ডিজাইন করা হয়েছে। API-এর উপর নির্ভর করে, ডিভাইসের স্ক্রিনের সমান উঁচু বা সর্বাধিক উচ্চতা দ্বারা সীমিত হতে পারে।

প্রয়োগ

সহজ ইনলাইন অ্যাডাপ্টিভ ব্যানার প্রয়োগ করতে, নিচে দেওয়া ধাপগুলি অনুসরণ করুন।

  1. ইনলাইন অ্যাডাপ্টিভ ব্যানার বিজ্ঞাপনের সাইজ পান। আপনি যে সাইজ পাবেন সেটি অ্যাডাপ্টিভ ব্যানার অনুরোধ করার জন্য ব্যবহার করা হবে। অ্যাডাপ্টিভ বিজ্ঞাপনের সাইজ পেতে, এগুলি নিশ্চিত করুন:
    1. ডেন্সিটি ইন্ডিপেন্ডেন্ট পিক্সেলে ব্যবহৃত ডিভাইসের প্রস্থ পান অথবা স্ক্রিনের সম্পূর্ণ প্রস্থ ব্যবহার করতে না চাইলে নিজের প্রস্থ সেট করুন। স্ক্রিনের প্রস্থ পেতে আপনি MediaQuery.of(context) ব্যবহার করতে পারবেন।
    2. বর্তমান ওরিয়েন্টেশনের জন্য ইনলাইন অ্যাডাপ্টিভ AdSize অবজেক্ট পেতে, বিজ্ঞাপনের সাইজ ক্লাসে উপযুক্ত স্ট্যাটিক পদ্ধতি ব্যবহার করুন, যেমন AdSize.getCurrentOrientationInlineAdaptiveBannerAdSize(int width) ।
    3. আপনি যদি ব্যানারের উচ্চতা সীমিত করতে চান, তাহলে স্ট্যাটিক মেথড AdSize.getInlineAdaptiveBannerAdSize(int width, int maxHeight) ব্যবহার করতে পারেন।
  2. আপনার বিজ্ঞাপন ইউনিট আইডি, অ্যাডাপ্টিভ বিজ্ঞাপনের সাইজ এবং বিজ্ঞাপনের অনুরোধের অবজেক্ট সহ একটি BannerAd অবজেক্ট তৈরি করুন।
  3. বিজ্ঞাপন লোড করুন।
  4. onAdLoaded কলব্যাক-এ, আপডেট করা প্ল্যাটফর্ম বিজ্ঞাপনের সাইজ পেতে BannerAd.getPlatformAdSize() ব্যবহার করুন এবং AdWidget কন্টেনারের হাইট আপডেট করুন।

কোডের উদাহরণ

এখানে একটি উইজেটের উদাহরণ দেওয়া হল যা ইনসেটকে বিবেচনা করে স্ক্রিনের প্রস্থের সাথে মানানসই ইনলাইন অ্যাডাপ্টিভ ব্যানার লোড করে:

import 'package:flutter/material.dart';
import 'package:google_mobile_ads/google_mobile_ads.dart';

/// This example demonstrates inline adaptive banner ads.
///
/// Loads and shows an inline adaptive banner ad in a scrolling view,
/// and reloads the ad when the orientation changes.
class InlineAdaptiveExample extends StatefulWidget {
  @override
  _InlineAdaptiveExampleState createState() => _InlineAdaptiveExampleState();
}

class _InlineAdaptiveExampleState extends State<InlineAdaptiveExample> {
  static const _insets = 16.0;
  BannerAd? _inlineAdaptiveAd;
  bool _isLoaded = false;
  AdSize? _adSize;
  late Orientation _currentOrientation;

  double get _adWidth => MediaQuery.of(context).size.width - (2 * _insets);

  @override
  void didChangeDependencies() {
    super.didChangeDependencies();
    _currentOrientation = MediaQuery.of(context).orientation;
    _loadAd();
  }

  void _loadAd() async {
    await _inlineAdaptiveAd?.dispose();
    setState(() {
      _inlineAdaptiveAd = null;
      _isLoaded = false;
    });

    // Get an inline adaptive size for the current orientation.
    AdSize size = AdSize.getCurrentOrientationInlineAdaptiveBannerAdSize(
        _adWidth.truncate());

    _inlineAdaptiveAd = BannerAd(
      // TODO: replace this test ad unit with your own ad unit.
      adUnitId: 'ca-app-pub-3940256099942544/9214589741',
      size: size,
      request: AdRequest(),
      listener: BannerAdListener(
        onAdLoaded: (Ad ad) async {
          print('Inline adaptive banner loaded: ${ad.responseInfo}');

          // After the ad is loaded, get the platform ad size and use it to
          // update the height of the container. This is necessary because the
          // height can change after the ad is loaded.
          BannerAd bannerAd = (ad as BannerAd);
          final AdSize? size = await bannerAd.getPlatformAdSize();
          if (size == null) {
            print('Error: getPlatformAdSize() returned null for $bannerAd');
            return;
          }

          setState(() {
            _inlineAdaptiveAd = bannerAd;
            _isLoaded = true;
            _adSize = size;
          });
        },
        onAdFailedToLoad: (Ad ad, LoadAdError error) {
          print('Inline adaptive banner failedToLoad: $error');
          ad.dispose();
        },
      ),
    );
    await _inlineAdaptiveAd!.load();
  }

  /// Gets a widget containing the ad, if one is loaded.
  ///
  /// Returns an empty container if no ad is loaded, or the orientation
  /// has changed. Also loads a new ad if the orientation changes.
  Widget _getAdWidget() {
    return OrientationBuilder(
      builder: (context, orientation) {
        if (_currentOrientation == orientation &&
            _inlineAdaptiveAd != null &&
            _isLoaded &&
            _adSize != null) {
          return Align(
              child: Container(
            width: _adWidth,
            height: _adSize!.height.toDouble(),
            child: AdWidget(
              ad: _inlineAdaptiveAd!,
            ),
          ));
        }
        // Reload the ad if the orientation changes.
        if (_currentOrientation != orientation) {
          _currentOrientation = orientation;
          _loadAd();
        }
        return Container();
      },
    );
  }

  @override
  Widget build(BuildContext context) => Scaffold(
      appBar: AppBar(
        title: Text('Inline adaptive banner example'),
      ),
      body: Center(
        child: Padding(
          padding: const EdgeInsets.symmetric(horizontal: _insets),
          child: ListView.separated(
            itemCount: 20,
            separatorBuilder: (BuildContext context, int index) {
              return Container(
                height: 40,
              );
            },
            itemBuilder: (BuildContext context, int index) {
              if (index == 10) {
                return _getAdWidget();
              }
              return Text(
                'Placeholder text',
                style: TextStyle(fontSize: 24),
              );
            },
          ),
        ),
      ));

  @override
  void dispose() {
    super.dispose();
    _inlineAdaptiveAd?.dispose();
  }
}