একটি Flutter অ্যাপে AdMob বিজ্ঞাপন যোগ করা

১. ভূমিকা

আপনি যা তৈরি করবেন

এই কোডল্যাবটি আপনাকে 'Awesome Drawing Quiz' নামক একটি অ্যাপে ব্যানার, ইন্টারস্টিশিয়াল এবং রিওয়ার্ডেড অ্যাড যোগ করার পদ্ধতি দেখাবে। এই গেমটিতে খেলোয়াড়দেরকে আঁকা ছবিটির নাম অনুমান করতে হয়।

এই কোডল্যাবটি করার সময় যদি আপনি কোনো সমস্যার (কোড বাগ, ব্যাকরণগত ভুল, অস্পষ্ট শব্দচয়ন) সম্মুখীন হন, তাহলে অনুগ্রহ করে কোডল্যাবের নিচের বাম কোণে থাকা 'Report a mistake ' লিঙ্কে ক্লিক করে সমস্যাটি জানান।

আপনি যা শিখবেন

  • গুগল মোবাইল অ্যাডস অ্যাডমব প্লাগইনটি কীভাবে কনফিগার করবেন
  • ফ্লাটার অ্যাপে ব্যানার, ইন্টারস্টিশিয়াল এবং রিওয়ার্ডেড বিজ্ঞাপন কীভাবে প্রয়োগ করবেন

আপনার যা যা লাগবে

  • অ্যান্ড্রয়েড স্টুডিও ৪.১ বা তার পরবর্তী সংস্করণ
  • Xcode 12 বা তার পরবর্তী সংস্করণ (iOS ডেভেলপমেন্টের জন্য)

AdMob নিয়ে আপনার অভিজ্ঞতার স্তরকে আপনি কীভাবে মূল্যায়ন করবেন?

শিক্ষানবিশ মধ্যবর্তী দক্ষ

ফ্লাটার নিয়ে আপনার অভিজ্ঞতার স্তরকে আপনি কীভাবে মূল্যায়ন করবেন?

শিক্ষানবিশ মধ্যবর্তী দক্ষ

২. আপনার ফ্লাটার ডেভেলপমেন্ট পরিবেশ সেট আপ করুন।

এই ল্যাবটি সম্পন্ন করার জন্য আপনার দুটি সফটওয়্যার প্রয়োজন— ফ্লাটার এসডিকে এবং একটি এডিটর

আপনি এই ডিভাইসগুলোর যেকোনো একটি ব্যবহার করে কোডল্যাবটি চালাতে পারেন:

  • আপনার কম্পিউটারের সাথে সংযুক্ত এবং ডেভেলপার মোডে সেট করা একটি ফিজিক্যাল অ্যান্ড্রয়েড বা আইওএস ডিভাইস।
  • iOS সিমুলেটর (এর জন্য Xcode টুলস ইনস্টল করা প্রয়োজন)।
  • অ্যান্ড্রয়েড এমুলেটর (অ্যান্ড্রয়েড স্টুডিওতে সেটআপ করা প্রয়োজন)।
  • একটি ব্রাউজার (ডিবাগিংয়ের জন্য ক্রোম আবশ্যক)।
  • একটি Windows , Linux , বা macOS ডেস্কটপ অ্যাপ্লিকেশন হিসেবে, আপনাকে অবশ্যই সেই প্ল্যাটফর্মে ডেভেলপ করতে হবে যেখানে আপনি এটি ডেপ্লয় করার পরিকল্পনা করছেন। সুতরাং, আপনি যদি একটি Windows ডেস্কটপ অ্যাপ ডেভেলপ করতে চান, তবে উপযুক্ত বিল্ড চেইন অ্যাক্সেস করার জন্য আপনাকে অবশ্যই Windows-এই ডেভেলপ করতে হবে। অপারেটিং সিস্টেম-ভিত্তিক কিছু নির্দিষ্ট আবশ্যকতা রয়েছে, যা docs.flutter.dev/desktop- এ বিস্তারিতভাবে আলোচনা করা হয়েছে।

কোডটি ডাউনলোড করুন

জিপ ফাইলটি ডাউনলোড করার পর, এর ভেতরের ফাইলগুলো এক্সট্র্যাক্ট করুন। আপনি admob-ads-in-flutter-master নামের একটি ফোল্ডার পাবেন।

বিকল্পভাবে, আপনি কমান্ড লাইন থেকে গিটহাব রিপোজিটরিটি ক্লোন করতে পারেন:

$ git clone https://github.com/googlecodelabs/admob-ads-in-flutter

রিপোজিটরিটিতে দুটি ফোল্ডার রয়েছে:

  • android_studio_folder.png স্টার্টার — এই কোডল্যাবে আপনি যে প্রাথমিক কোডটি তৈরি করবেন।
  • android_studio_folder.png সম্পূর্ণ — এই কোডল্যাবের কোড লেখা শেষ হয়েছে।

৩. AdMob অ্যাপ এবং বিজ্ঞাপন ইউনিটগুলো সেট আপ করুন।

ফ্লাটার একটি মাল্টি-প্ল্যাটফর্ম SDK হওয়ায়, AdMob-এ আপনাকে Android এবং iOS উভয়ের জন্যই একটি অ্যাপ ও অ্যাড ইউনিট যোগ করতে হবে।

অ্যান্ড্রয়েডের জন্য সেট আপ করুন

অ্যান্ড্রয়েডের জন্য সেট আপ করতে, আপনাকে একটি অ্যান্ড্রয়েড অ্যাপ যোগ করতে হবে এবং বিজ্ঞাপন ইউনিট তৈরি করতে হবে।

একটি অ্যান্ড্রয়েড অ্যাপ যোগ করুন

  1. AdMob কনসোলে , অ্যাপস মেনু থেকে অ্যাড অ্যাপ (ADD APP)- এ ক্লিক করুন।
  2. যখন আপনাকে জিজ্ঞাসা করা হবে , ‘আপনি কি আপনার অ্যাপটি গুগল প্লে বা অ্যাপ স্টোরে প্রকাশ করেছেন?’ , তখন ‘না’ ক্লিক করুন।
  3. অ্যাপের নামের ফিল্ডে Awesome Drawing Quiz লিখুন এবং প্ল্যাটফর্ম হিসেবে Android নির্বাচন করুন।

ddafee37a6f92229.png

  1. এই কোডল্যাবটি সম্পন্ন করার জন্য ইউজার মেট্রিক্স চালু করা আবশ্যক নয়। তবে, আমরা আপনাকে এটি করার পরামর্শ দিই, কারণ এটি আপনাকে ব্যবহারকারীর আচরণ আরও বিস্তারিতভাবে বুঝতে সাহায্য করবে। প্রক্রিয়াটি সম্পন্ন করতে 'ADD'-এ ক্লিক করুন।

b918bf44362813a9.png

বিজ্ঞাপন ইউনিট তৈরি করুন

AdMob-এ বিজ্ঞাপন ইউনিট যোগ করা শুরু করতে:

  1. AdMob কনসোলের অ্যাপস মেনু থেকে Awesome Drawing Quiz নির্বাচন করুন।
  2. বিজ্ঞাপন ইউনিট মেনুতে ক্লিক করুন।

ব্যানার

  1. অ্যাড ইউনিট (ADD AD UNIT) বাটনটিতে ক্লিক করুন।
  2. ফরম্যাট হিসেবে ব্যানার নির্বাচন করুন।
  3. Ad unit name ফিল্ডে android-adq-banner লিখুন।
  4. প্রক্রিয়াটি সম্পন্ন করতে CREATE AD UNIT-এ ক্লিক করুন।

ইন্টারস্টিশিয়াল

  1. অ্যাড ইউনিট (ADD AD UNIT) বাটনটিতে ক্লিক করুন।
  2. ফরম্যাট হিসেবে ইন্টারস্টিশিয়াল নির্বাচন করুন।
  3. Ad unit name ফিল্ডে android-adq-interstitial লিখুন।
  4. প্রক্রিয়াটি সম্পন্ন করতে CREATE AD UNIT-এ ক্লিক করুন।

পুরস্কৃত

  1. অ্যাড ইউনিট (ADD AD UNIT) বাটনটিতে ক্লিক করুন।
  2. ফরম্যাট হিসেবে ‘পুরস্কৃত’ নির্বাচন করুন।
  3. Ad unit name ফিল্ডে android-adq-rewarded লিখুন।
  4. পুরস্কার সেটিংসের জন্য ডিফল্ট অপরিবর্তিত রাখুন।
  5. প্রক্রিয়াটি সম্পন্ন করতে CREATE AD UNIT-এ ক্লিক করুন।

একটি নতুন বিজ্ঞাপন ইউনিটের বিজ্ঞাপন দেখানো শুরু করতে সাধারণত কয়েক ঘণ্টা সময় লাগে।

আপনি যদি বিজ্ঞাপনটির আচরণ তাৎক্ষণিকভাবে পরীক্ষা করতে চান, তাহলে Android অ্যাপ আইডি/অ্যাড ইউনিট আইডি এবং iOS অ্যাপ আইডি/অ্যাড ইউনিট আইডি টেবিলে তালিকাভুক্ত টেস্ট অ্যাপ আইডি এবং অ্যাড ইউনিট আইডিগুলো ব্যবহার করুন।

iOS এর জন্য সেট আপ করুন

iOS-এর জন্য সেট আপ করতে, আপনাকে একটি iOS অ্যাপ যোগ করতে হবে এবং বিজ্ঞাপন ইউনিট তৈরি করতে হবে।

একটি iOS অ্যাপ যোগ করুন

  1. AdMob কনসোলে , অ্যাপস মেনু থেকে অ্যাড অ্যাপ (ADD APP)- এ ক্লিক করুন।
  2. যখন আপনাকে জিজ্ঞাসা করা হবে , ‘আপনি কি আপনার অ্যাপটি গুগল প্লে বা অ্যাপ স্টোরে প্রকাশ করেছেন?’ , তখন ‘না’ ক্লিক করুন।
  3. অ্যাপের নামের ফিল্ডে Awesome Drawing Quiz লিখুন এবং প্ল্যাটফর্ম হিসেবে iOS নির্বাচন করুন।

93e7f9f114232402.png

  1. এই কোডল্যাবটি সম্পন্ন করার জন্য ইউজার মেট্রিক্স চালু করা আবশ্যক নয়। তবে, আমরা আপনাকে এটি করার পরামর্শ দিই, কারণ এটি আপনাকে ব্যবহারকারীর আচরণ আরও বিস্তারিতভাবে বুঝতে সাহায্য করবে। প্রক্রিয়াটি সম্পন্ন করতে 'ADD'-এ ক্লিক করুন।

b918bf44362813a9.png

বিজ্ঞাপন ইউনিট তৈরি করুন

বিজ্ঞাপন ইউনিট যোগ করতে:

  1. AdMob কনসোলের অ্যাপস মেনু থেকে Awesome Drawing Quiz অ্যাপটি নির্বাচন করুন।
  2. বিজ্ঞাপন ইউনিট মেনুতে ক্লিক করুন।

ব্যানার

  1. অ্যাড ইউনিট (ADD AD UNIT) বাটনটিতে ক্লিক করুন।
  2. ফরম্যাট হিসেবে ব্যানার নির্বাচন করুন।
  3. Ad unit name ফিল্ডে ios-adq-banner লিখুন।
  4. প্রক্রিয়াটি সম্পন্ন করতে CREATE AD UNIT-এ ক্লিক করুন।

ইন্টারস্টিশিয়াল

  1. অ্যাড ইউনিট (ADD AD UNIT) বাটনটিতে ক্লিক করুন।
  2. ফরম্যাট হিসেবে ইন্টারস্টিশিয়াল নির্বাচন করুন।
  3. Ad unit name ফিল্ডে ios-adq-interstitial লিখুন।
  4. প্রক্রিয়াটি সম্পন্ন করতে CREATE AD UNIT-এ ক্লিক করুন।

পুরস্কৃত

  1. অ্যাড ইউনিট (ADD AD UNIT) বাটনটিতে ক্লিক করুন।
  2. ফরম্যাট হিসেবে ‘পুরস্কৃত’ নির্বাচন করুন।
  3. Ad unit name ফিল্ডে ios-adq-rewarded লিখুন।
  4. পুরস্কার সেটিংসের জন্য ডিফল্ট অপরিবর্তিত রাখুন।
  5. প্রক্রিয়াটি সম্পন্ন করতে CREATE AD UNIT-এ ক্লিক করুন।

একটি নতুন বিজ্ঞাপন ইউনিটের বিজ্ঞাপন দেখানো শুরু করতে সাধারণত কয়েক ঘণ্টা সময় লাগে।

আপনি যদি বিজ্ঞাপনটির আচরণ তাৎক্ষণিকভাবে পরীক্ষা করতে চান, তাহলে নিচের সারণিতে তালিকাভুক্ত টেস্ট অ্যাপ আইডি এবং অ্যাড ইউনিট আইডিগুলো ব্যবহার করুন।

ঐচ্ছিক: পরীক্ষামূলক AdMob অ্যাপ এবং বিজ্ঞাপন ইউনিটগুলো ব্যবহার করুন।

যদি আপনি নিজে থেকে নতুন অ্যাপ্লিকেশন এবং অ্যাড ইউনিট তৈরি করার পরিবর্তে কোডল্যাবটি অনুসরণ করতে চান, তাহলে আপনি নিম্নলিখিত সারণিগুলিতে তালিকাভুক্ত টেস্ট অ্যাডমব অ্যাপ আইডি এবং অ্যাড ইউনিট আইডিগুলি ব্যবহার করতে পারেন।

অ্যান্ড্রয়েড অ্যাপ আইডি/বিজ্ঞাপন ইউনিট আইডি

আইটেম

অ্যাপ আইডি/বিজ্ঞাপন ইউনিট আইডি

AdMob অ্যাপ আইডি

ca-app-pub-3940256099942544~3347511713

ব্যানার

ca-app-pub-3940256099942544/6300978111

ইন্টারস্টিশিয়াল

ca-app-pub-3940256099942544/1033173712

পুরস্কৃত

ca-app-pub-3940256099942544/5224354917

iOS অ্যাপ আইডি/বিজ্ঞাপন ইউনিট আইডি

আইটেম

অ্যাপ আইডি/বিজ্ঞাপন ইউনিট আইডি

AdMob অ্যাপ আইডি

ca-app-pub-3940256099942544~1458002511

ব্যানার

ca-app-pub-3940256099942544/2934735716

ইন্টারস্টিশিয়াল

ca-app-pub-3940256099942544/4411468910

পুরস্কৃত

ca-app-pub-3940256099942544/1712485313

টেস্ট অ্যাড সম্পর্কে আরও তথ্যের জন্য, অ্যান্ড্রয়েড টেস্ট অ্যাড এবং আইওএস টেস্ট অ্যাড ডেভেলপার ডকুমেন্টেশন দেখুন।

৪. গুগল মোবাইল অ্যাডস ফ্লাটার প্লাগইনটি যোগ করুন

ফ্লাটার বিভিন্ন প্ল্যাটফর্ম-নির্দিষ্ট পরিষেবা ব্যবহারের সুযোগ দিতে প্লাগইন ব্যবহার করে। প্লাগইনগুলো আপনাকে প্রতিটি প্ল্যাটফর্মের পরিষেবা এবং এপিআই (API) অ্যাক্সেস করতে সক্ষম করে।

google_mobile_ads প্লাগইনটি AdMob API ব্যবহার করে ব্যানার, ইন্টারস্টিশিয়াল, রিওয়ার্ডেড এবং নেটিভ বিজ্ঞাপন লোড ও প্রদর্শন করা সমর্থন করে।

যেহেতু ফ্লাটার একটি মাল্টি-প্ল্যাটফর্ম SDK, তাই google_mobile_ads প্লাগইনটি iOS এবং Android উভয়ের জন্যই প্রযোজ্য। সুতরাং, আপনি যদি আপনার ফ্লাটার অ্যাপে প্লাগইনটি যোগ করেন, তবে এটি AdMob ইনলাইন অ্যাডস অ্যাপের Android এবং iOS উভয় সংস্করণেই ব্যবহৃত হবে।

Google Mobile Ads প্লাগইনটিকে একটি ডিপেন্ডেন্সি হিসেবে যোগ করুন।

AdMob ইনলাইন অ্যাডস প্রজেক্ট থেকে AdMob API-গুলো অ্যাক্সেস করতে, প্রজেক্টের রুটে অবস্থিত pubspec.yaml ফাইলে google_mobile_ads একটি ডিপেন্ডেন্সি হিসেবে যোগ করুন।

pubspec.yaml

...
environment:
  # TODO: Update the minimum sdk version to 2.12.0 to support null safety.
  sdk: ">=2.17.0 <3.0.0"

dependencies:
  flutter:
    sdk: flutter
  google_fonts: ^3.0.1

  # TODO: Add google_mobile_ads as a dependency
  google_mobile_ads: ^1.2.0

...

Awesome Drawing Quiz প্রোজেক্টে প্লাগইনটি ইনস্টল করতে Pub get- এ ক্লিক করুন।

9ce73858eedbd8fc.png

AndroidManifest.xml (অ্যান্ড্রয়েড) আপডেট করুন

  1. অ্যান্ড্রয়েড স্টুডিওতে android/app/src/main/AndroidManifest.xml ফাইলটি খুলুন।
  2. com.google.android.gms.ads.APPLICATION_ID নামটি দিয়ে একটি <meta-data> ট্যাগ যোগ করে আপনার AdMob অ্যাপ আইডি যুক্ত করুন। উদাহরণস্বরূপ, যদি আপনার AdMob অ্যাপ আইডি ca-app-pub-3940256099942544~3347511713 হয়, তাহলে আপনাকে AndroidManifest.xml ফাইলে নিম্নলিখিত লাইনগুলো যোগ করতে হবে।

AndroidManifest.xml

<manifest>
    ...
    <application>
       ...
        <meta-data
            android:name="com.google.android.gms.ads.APPLICATION_ID"
            android:value="ca-app-pub-3940256099942544~3347511713"/>
    </application>

</manifest>

Info.plist (iOS) আপডেট করুন

  1. অ্যান্ড্রয়েড স্টুডিওতে ios/Runner/Info.plist ফাইলটি খুলুন।
  2. আপনার AdMob অ্যাপ আইডির স্ট্রিং ভ্যালু দিয়ে একটি GADApplicationIdentifier কী যোগ করুন। উদাহরণস্বরূপ, যদি আপনার AdMob অ্যাপ আইডি ca-app-pub-3940256099942544~1458002511 হয়, তাহলে আপনাকে Info.plist ফাইলে নিম্নলিখিত লাইনগুলো যোগ করতে হবে।

ios/Runner/Info.plist

...
<key>GADApplicationIdentifier</key>
<string>ca-app-pub-3940256099942544~1458002511</string>
...

৫. বিজ্ঞাপনের জন্য একটি হেল্পার ক্লাস যোগ করুন

lib ডিরেক্টরির অধীনে ad_helper.dart নামে একটি নতুন ফাইল তৈরি করুন। এরপর, AdHelper ক্লাসটি ইমপ্লিমেন্ট করুন, যা অ্যান্ড্রয়েড এবং আইওএস-এর জন্য একটি AdMob অ্যাপ আইডি এবং অ্যাড ইউনিট আইডি প্রদান করে।

নিশ্চিত করুন যে আপনি AdMob অ্যাপ আইডি ( ca-app-pub-xxxxxx~yyyyy ) এবং অ্যাড ইউনিট আইডি ( ca-app-pub-xxxxxxx/yyyyyyyy ) কে পূর্ববর্তী ধাপে তৈরি করা আইডিগুলো দিয়ে প্রতিস্থাপন করেছেন।

lib/ad_helper.dart

import 'dart:io';

class AdHelper {

  static String get bannerAdUnitId {
    if (Platform.isAndroid) {
      return '<YOUR_ANDROID_BANNER_AD_UNIT_ID>';
    } else if (Platform.isIOS) {
      return '<YOUR_IOS_BANNER_AD_UNIT_ID>';
    } else {
      throw UnsupportedError('Unsupported platform');
    }
  }

  static String get interstitialAdUnitId {
    if (Platform.isAndroid) {
      return '<YOUR_ANDROID_INTERSTITIAL_AD_UNIT_ID>';
    } else if (Platform.isIOS) {
      return '<YOUR_IOS_INTERSTITIAL_AD_UNIT_ID>';
    } else {
      throw UnsupportedError('Unsupported platform');
    }
  }

  static String get rewardedAdUnitId {
    if (Platform.isAndroid) {
      return '<YOUR_ANDROID_REWARDED_AD_UNIT_ID>';
    } else if (Platform.isIOS) {
      return '<YOUR_IOS_REWARDED_AD_UNIT_ID>';
    } else {
      throw UnsupportedError('Unsupported platform');
    }
  }
}

আপনি যদি টেস্ট AdMob অ্যাপ আইডি এবং টেস্ট অ্যাড ইউনিট আইডিগুলো ব্যবহার করতে চান, তাহলে নিম্নলিখিত কোড স্নিপেটটি ব্যবহার করুন।

lib/ad_helper.dart

import 'dart:io';

class AdHelper {

  static String get bannerAdUnitId {
    if (Platform.isAndroid) {
      return 'ca-app-pub-3940256099942544/6300978111';
    } else if (Platform.isIOS) {
      return 'ca-app-pub-3940256099942544/2934735716';
    } else {
      throw new UnsupportedError('Unsupported platform');
    }
  }

  static String get interstitialAdUnitId {
    if (Platform.isAndroid) {
      return "ca-app-pub-3940256099942544/1033173712";
    } else if (Platform.isIOS) {
      return "ca-app-pub-3940256099942544/4411468910";
    } else {
      throw new UnsupportedError("Unsupported platform");
    }
  }

  static String get rewardedAdUnitId {
    if (Platform.isAndroid) {
      return "ca-app-pub-3940256099942544/5224354917";
    } else if (Platform.isIOS) {
      return "ca-app-pub-3940256099942544/1712485313";
    } else {
      throw new UnsupportedError("Unsupported platform");
    }
  }
}

৬. গুগল মোবাইল অ্যাডস এসডিকে চালু করুন

বিজ্ঞাপন লোড করার আগে, আপনাকে গুগল মোবাইল অ্যাডস এসডিকে (SDK) ইনিশিয়ালাইজ করতে হবে। lib/home_route.dart ফাইলটি খুলুন এবং হোম পেজ লোড হওয়ার আগে এসডিকে ইনিশিয়ালাইজ করার জন্য _initGoogleMobileAds() ফাংশনটি পরিবর্তন করুন।

মনে রাখবেন, SDK ইনিশিয়ালাইজেশন সম্পন্ন হওয়ার পর তার ফলাফল পেতে হলে আপনাকে _initGoogleMobileAds() মেথডের রিটার্ন টাইপ Future<dynamic> থেকে Future<InitializationStatus> এ পরিবর্তন করতে হবে।

হোম_রুট.ডার্ট

// TODO: Import google_mobile_ads.dart
import 'package:google_mobile_ads/google_mobile_ads.dart';

import 'package:flutter/material.dart';

...

class HomeRoute extends StatelessWidget {

  ...

  Future<InitializationStatus> _initGoogleMobileAds() {
    // TODO: Initialize Google Mobile Ads SDK
    return MobileAds.instance.initialize();
  }
}

৭. একটি ব্যানার বিজ্ঞাপন যোগ করুন

এই অংশে, আপনি গেম স্ক্রিনের উপরে একটি ব্যানার বিজ্ঞাপন প্রদর্শন করেন, যেমনটি নিচের স্ক্রিনশটে দেখানো হয়েছে।

276b4cfa283ea6c7.png

  1. lib/game_route.dart ফাইলটি খুলুন এবং ad_manager.dart ইম্পোর্ট করুন।
  2. নিচের লাইনগুলো যোগ করে ad_helper.dart এবং google_mobile_ads.dart ফাইল দুটি ইম্পোর্ট করুন:

lib/game_route.dart

...

// TODO: Import ad_helper.dart
import 'package:awesome_drawing_quiz/ad_helper.dart';

// TODO: Import google_mobile_ads.dart
import 'package:google_mobile_ads/google_mobile_ads.dart';

class GameRoute extends StatefulWidget {
  ...
}
  1. _GameRouteState ক্লাসে একটি ব্যানার বিজ্ঞাপনের জন্য নিম্নলিখিত মেম্বারগুলো যোগ করুন।

lib/game_route.dart

class _GameRouteState extends State<GameRoute> implements QuizEventListener {

  ...

  // TODO: Add _bannerAd
  BannerAd? _bannerAd;

  ...
}
  1. initState() মেথডে, 320x50 ব্যানারের ( AdSize.banner ) জন্য একটি BannerAd তৈরি ও লোড করুন। উল্লেখ্য যে, অ্যাড লোড হলে UI ( setState() ) আপডেট করার জন্য একটি অ্যাড ইভেন্ট লিসেনার কনফিগার করা আছে।

lib/game_route.dart

@override
void initState() {
  ...

  // TODO: Load a banner ad
  BannerAd(
    adUnitId: AdHelper.bannerAdUnitId,
    request: AdRequest(),
    size: AdSize.banner,
    listener: BannerAdListener(
      onAdLoaded: (ad) {
        setState(() {
          _bannerAd = ad as BannerAd;
        });
      },
      onAdFailedToLoad: (ad, err) {
        print('Failed to load a banner ad: ${err.message}');
        ad.dispose();
      },
    ),
  ).load();
}
  1. build() মেথডটি পরিবর্তন করুন, যাতে উপলব্ধ থাকলে একটি ব্যানার বিজ্ঞাপন প্রদর্শিত হয়।

lib/game_route.dart

@override
Widget build(BuildContext context) {
  return Scaffold(
    ...
    body: SafeArea(
      child: Stack(
        children: [
          Center(
            ...
          ),
          // TODO: Display a banner when ready
          if (_bannerAd != null)
            Align(
              alignment: Alignment.topCenter,
              child: Container(
                width: _bannerAd!.size.width.toDouble(),
                height: _bannerAd!.size.height.toDouble(),
                child: AdWidget(ad: _bannerAd!),
              ),
            ),
        ],
      ),
    ),
    ...
  );
}
  1. dispose() কলব্যাক মেথডের মধ্যে BannerAd.dispose() মেথডটি কল করে BannerAd অবজেক্টের সাথে যুক্ত রিসোর্সটি মুক্ত করুন।

lib/game_route.dart

@override
void dispose() {
  // TODO: Dispose a BannerAd object
  _bannerAd?.dispose();

  ...

  super.dispose();
}

ব্যাস! প্রজেক্টটি রান করুন এবং একটি নতুন গেম শুরু করুন। একটি বিজ্ঞাপন লোড হওয়ার পর, আপনি স্ক্রিনের উপরে একটি ব্যানার বিজ্ঞাপন দেখতে পাবেন।

276b4cfa283ea6c7.png

৮. একটি মধ্যবর্তী বিজ্ঞাপন যোগ করুন

এই অংশে, গেমটি (মোট ৫টি লেভেল) শেষ হওয়ার পর একটি অন্তর্বর্তীকালীন বিজ্ঞাপন দেখানো হয়।

  1. lib/game_route.dart ফাইলটি খুলুন
  2. _GameRouteState ক্লাসে একটি ইন্টারস্টিশিয়াল বিজ্ঞাপনের জন্য নিম্নলিখিত মেম্বার এবং মেথডগুলো যোগ করুন।

উল্লেখ্য যে, বিজ্ঞাপনটি প্রস্তুত কিনা তা পরীক্ষা করতে ( onAdLoaded() এবং onAdFailedToLoad() ) এবং বিজ্ঞাপনটি বন্ধ হলে অ্যাপের হোম স্ক্রিন প্রদর্শন করতে ( onAdDismissedFullScreenContent() ) একটি বিজ্ঞাপন ইভেন্ট লিসেনার কনফিগার করা আছে।

lib/game_route.dart

class _GameRouteState extends State<GameRoute> implements QuizEventListener {

  ...

  // TODO: Add _interstitialAd
 InterstitialAd? _interstitialAd;

  // TODO: Implement _loadInterstitialAd()
  void _loadInterstitialAd() {
    InterstitialAd.load(
      adUnitId: AdHelper.interstitialAdUnitId,
      request: AdRequest(),
      adLoadCallback: InterstitialAdLoadCallback(
        onAdLoaded: (ad) {
          ad.fullScreenContentCallback = FullScreenContentCallback(
            onAdDismissedFullScreenContent: (ad) {
              _moveToHome();
            },
          );

          setState(() {
            _interstitialAd = ad;
          });
        },
        onAdFailedToLoad: (err) {
          print('Failed to load an interstitial ad: ${err.message}');
        },
      ),
    );
  }

  ...
}
  1. এই কোডল্যাবে, একজন ব্যবহারকারী ৫টি লেভেল সম্পন্ন করার পর একটি ইন্টারস্টিশিয়াল বিজ্ঞাপন দেখানো হয়। অপ্রয়োজনীয় বিজ্ঞাপনের অনুরোধ কমানোর জন্য, ব্যবহারকারী যখন লেভেল ৩-এ পৌঁছাবে তখন বিজ্ঞাপনের অনুরোধ করুন।

onNewLevel() মেথডে নিম্নলিখিত লাইনগুলো যোগ করুন।

lib/game_route.dart

@override
void onNewLevel(int level, Drawing drawing, String clue) {
  ...

  // TODO: Load an Interstitial Ad
  if (level >= 3 && _interstitialAd == null) {
    _loadInterstitialAd();
  }
}
  1. খেলা শেষ হলে, খেলার স্কোরের ডায়ালগ বক্সটি প্রদর্শিত হয়। ব্যবহারকারী যখন ডায়ালগ বক্সটি বন্ধ করেন, তখন তাকে Awesome Drawing Quiz- এর হোম স্ক্রিনে নিয়ে যাওয়া হয়।

যেহেতু স্ক্রিন পরিবর্তনের মাঝে ইন্টারস্টিশিয়াল বিজ্ঞাপন দেখানো উচিত, তাই ব্যবহারকারী যখন ক্লোজ বাটনে ক্লিক করেন, তখন আমরা ইন্টারস্টিশিয়াল বিজ্ঞাপনটি দেখাই।

onGameOver() মেথডটি নিম্নরূপভাবে পরিবর্তন করুন।

lib/game_route.dart

@override
void onGameOver(int correctAnswers) {
  showDialog(
    context: _scaffoldKey.currentContext,
    builder: (context) {
      return AlertDialog(
        title: Text('Game over!'),
        content: Text('Score: $correctAnswers/5'),
        actions: [
          FlatButton(
            child: Text('close'.toUpperCase()),
            onPressed: () {

              // TODO: Display an Interstitial Ad
              if (_interstitialAd != null) {
                _interstitialAd?.show();
              } else {
                _moveToHome();
              }
            },
          ),
        ],
      );
    },
  );
}
  1. dispose() কলব্যাক মেথডের মধ্যে InterstitialAd.dispose() মেথডটি কল করার মাধ্যমে InterstitialAd অবজেক্টের সাথে যুক্ত রিসোর্সটি মুক্ত করুন।

lib/game_route.dart

@override
void dispose() {
  ...

  // TODO: Dispose an InterstitialAd object
  _interstitialAd?.dispose();

  ...

  super.dispose();
}

ব্যাস! প্রজেক্টটি চালান এবং গেমটি সম্পূর্ণ করুন। যদি কোনো ইন্টারস্টিশিয়াল বিজ্ঞাপন লোড হয়, তাহলে স্কোর ডায়ালগ থেকে ক্লোজ (CLOSE) বোতামে ক্লিক করলে আপনি একটি ইন্টারস্টিশিয়াল বিজ্ঞাপন দেখতে পাবেন।

c546e438c405e941.gif

৯. একটি পুরস্কারযুক্ত বিজ্ঞাপন যোগ করুন

এই বিভাগে, আপনি একটি পুরস্কারযুক্ত বিজ্ঞাপন যোগ করেন যা ব্যবহারকারীকে পুরস্কার হিসেবে একটি অতিরিক্ত ইঙ্গিত দেয়।

  1. lib/game_route.dart ফাইলটি খুলুন
  2. _GameRouteState ক্লাসে, একটি রিওয়ার্ডেড অ্যাডের জন্য মেম্বার যোগ করুন এবং _loadRewardedAd() মেথডটি ইমপ্লিমেন্ট করুন। মনে রাখবেন, অ্যাডটি বন্ধ হয়ে গেলে ( onAdDismissedFullScreenContent ) এটি আরেকটি রিওয়ার্ডেড অ্যাড লোড করে, যাতে অ্যাডটি যত তাড়াতাড়ি সম্ভব ক্যাশ করা যায়।

lib/game_route.dart

class _GameRouteState extends State<GameRoute> implements QuizEventListener {

  ...

  // TODO: Add _rewardedAd
  RewardedAd? _rewardedAd;

  // TODO: Implement _loadRewardedAd()
  void _loadRewardedAd() {
    RewardedAd.load(
      adUnitId: AdHelper.rewardedAdUnitId,
      request: AdRequest(),
      rewardedAdLoadCallback: RewardedAdLoadCallback(
        onAdLoaded: (ad) {
          ad.fullScreenContentCallback = FullScreenContentCallback(
            onAdDismissedFullScreenContent: (ad) {
              setState(() {
                ad.dispose();
                _rewardedAd = null;
              });
              _loadRewardedAd();
            },
          );

          setState(() {
            _rewardedAd = ad;
          });
        },
        onAdFailedToLoad: (err) {
          print('Failed to load a rewarded ad: ${err.message}');
        },
      ),
    );
  }

  ...
}
  1. গেম শুরু হওয়ার সময় রিওয়ার্ডেড অ্যাডের অনুরোধ করতে initState() মেথড থেকে _loadRewardedAd() কল করুন।

lib/game_route.dart

class _GameRouteState extends State<GameRoute> implements QuizEventListener {

  ...

  @override
  void initState() {
    ...

    // COMPLETE: Load a Rewarded Ad
    _loadRewardedAd();
  }


  ...
}
  1. ভাসমান অ্যাকশন বোতামে ক্লিক করে ব্যবহারকারীদের একটি পুরস্কারযুক্ত বিজ্ঞাপন দেখার অনুমতি দিন। বোতামটি কেবল তখনই দেখা যাবে, যখন ব্যবহারকারী বর্তমান লেভেলে কোনো ইঙ্গিত ব্যবহার করেননি এবং একটি পুরস্কারযুক্ত বিজ্ঞাপন লোড হয়েছে।

ফ্লোটিং অ্যাকশন বাটনটি প্রদর্শন করার জন্য _buildFloatingActionButton() মেথডটি নিম্নরূপভাবে পরিবর্তন করুন। মনে রাখবেন যে null রিটার্ন করলে বাটনটি স্ক্রিন থেকে অদৃশ্য হয়ে যাবে।

মনে রাখবেন যে, একটি রিওয়ার্ডেড অ্যাডের ক্ষেত্রে onUserEarnedReward হলো সবচেয়ে গুরুত্বপূর্ণ অ্যাড ইভেন্ট। যখন কোনো ব্যবহারকারী পুরস্কার পাওয়ার যোগ্য হন (উদাহরণস্বরূপ, একটি ভিডিও দেখা শেষ করলে), তখন এটি ট্রিগার হয়।

এই কোডল্যাবে, কলব্যাক থেকে QuizManager.instance.useHint() মেথডটি কল করা হয়, যা হিন্ট স্ট্রিং-এর আরও একটি অক্ষর প্রকাশ করে। অ্যাপটি onAdClosed কলব্যাকে একটি রিওয়ার্ডেড বিজ্ঞাপন রিলোড করে, যাতে বিজ্ঞাপনটি যত তাড়াতাড়ি সম্ভব প্রস্তুত থাকে।

lib/game_route.dart

Widget? _buildFloatingActionButton() {
  // TODO: Return a FloatingActionButton if a rewarded ad is available
  return (!QuizManager.instance.isHintUsed && _rewardedAd != null)
      ? FloatingActionButton.extended(
          onPressed: () {
            showDialog(
              context: context,
              builder: (context) {
                return AlertDialog(
                  title: Text('Need a hint?'),
                  content: Text('Watch an Ad to get a hint!'),
                  actions: [
                    TextButton(
                      child: Text('cancel'.toUpperCase()),
                      onPressed: () {
                        Navigator.pop(context);
                      },
                    ),
                    TextButton(
                      child: Text('ok'.toUpperCase()),
                      onPressed: () {
                        Navigator.pop(context);
                        _rewardedAd?.show(
                          onUserEarnedReward: (_, reward) {
                            QuizManager.instance.useHint();
                          },
                        );
                      },
                    ),
                  ],
                );
              },
            );
          },
          label: Text('Hint'),
          icon: Icon(Icons.card_giftcard),
        )
      : null;
}
  1. dispose() কলব্যাক মেথডের মধ্যে RewardedAd.dispose() মেথডটি কল করে RewardedAd অবজেক্টের সাথে যুক্ত রিসোর্সটি মুক্ত করুন।

lib/game_route.dart

@override
void dispose() {
  ...

  // TODO: Dispose a RewardedAd object
  _rewardedAd?.dispose();

  ...

  super.dispose();
}

ব্যাস! প্রজেক্টটি রান করুন এবং গেমটি খেলুন। একটি পুরস্কারযুক্ত বিজ্ঞাপন লোড হলে, আপনি স্ক্রিনের নীচে একটি ইঙ্গিত বোতাম দেখতে পাবেন। অতিরিক্ত ইঙ্গিত পেতে ইঙ্গিত বোতামটিতে ক্লিক করুন।

4a114d243ae3e71d.gif

১০. সব হয়ে গেছে!

আপনি কোডল্যাবটি সম্পন্ন করেছেন। এই কোডল্যাবের সম্পূর্ণ কোডটি আপনি এখানে খুঁজে পাবেন। android_studio_folder.png সম্পূর্ণ ফোল্ডার।

কিভাবে ব্যানার এবং নেটিভ ইনলাইন বিজ্ঞাপন প্রয়োগ করতে হয় তা শিখতে, "Adding an AdMob banner and native inline ads to a Flutter app" কোডল্যাবটি দেখুন।

আরও জানতে, অন্যান্য ফ্লাটার কোডল্যাবগুলো দেখুন।