অ্যাপ খোলা বিজ্ঞাপন

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

অ্যাপ খোলার বিজ্ঞাপনগুলিতে স্বয়ংক্রিয়ভাবে একটি ছোট ব্র্যান্ডিং এলাকা দেখানো হয়, যাতে ব্যবহারকারীরা বুঝতে পারে যে তারা আপনার অ্যাপে প্রবেশ করেছে। একটি অ্যাপ খোলার বিজ্ঞাপন দেখতে কেমন হয়, তার একটি উদাহরণ নিচে দেওয়া হলো:

পূর্বশর্ত

চালিয়ে যাওয়ার আগে, নিম্নলিখিতগুলি করুন:

  • ফ্লাটার প্লাগইন ০.১৩.৬ বা তার উচ্চতর সংস্করণ ইনস্টল করুন।
  • Google Mobile Ads Flutter Plugin সেট আপ করুন । আপনার ফ্লাটার অ্যাপে অবশ্যই Google Mobile Ads Flutter Plugin ইম্পোর্ট করা থাকতে হবে।

সর্বদা টেস্ট অ্যাড দিয়ে পরীক্ষা করুন

আপনার অ্যাপ তৈরি ও পরীক্ষা করার সময়, লাইভ বা প্রোডাকশন অ্যাডের পরিবর্তে টেস্ট অ্যাড ব্যবহার করুন। এটি করতে ব্যর্থ হলে আপনার অ্যাকাউন্ট সাসপেন্ড হতে পারে।

টেস্ট অ্যাড লোড করার সবচেয়ে সহজ উপায় হলো অ্যান্ড্রয়েড এবং আইওএস রিওয়ার্ডেড অ্যাডের জন্য আমাদের নির্দিষ্ট টেস্ট অ্যাড ইউনিট আইডিগুলো ব্যবহার করা:

  • /21775744923/example/app-open

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

বাস্তবায়ন

অ্যাপ খোলার বিজ্ঞাপন যুক্ত করার প্রধান ধাপগুলো হলো:

  1. এমন একটি ইউটিলিটি ক্লাস তৈরি করুন যা বিজ্ঞাপন প্রদর্শনের আগে তা লোড করে।
  2. একটি বিজ্ঞাপন লোড করুন।
  3. কলব্যাকের জন্য নিবন্ধন করুন এবং বিজ্ঞাপনটি দেখান।
  4. ফোরগ্রাউন্ডিং ইভেন্ট চলাকালীন বিজ্ঞাপনটি দেখানোর জন্য AppStateEventNotifier.appStateStream এ সাবস্ক্রাইব করুন।

একটি ইউটিলিটি ক্লাস তৈরি করুন

বিজ্ঞাপন লোড করার জন্য AppOpenAdManager নামে একটি নতুন ক্লাস তৈরি করুন। এই ক্লাসটি একটি ইনস্ট্যান্স ভেরিয়েবল পরিচালনা করে, যা লোড হওয়া বিজ্ঞাপন এবং প্রতিটি প্ল্যাটফর্মের জন্য বিজ্ঞাপন ইউনিট আইডি-র হিসাব রাখে।

import 'package:google_mobile_ads/google_mobile_ads.dart';
import 'dart:io' show Platform;

class AppOpenAdManager {
  
  String adUnitId = '/21775744923/example/app-open';
  
  AppOpenAd? _appOpenAd;
  bool _isShowingAd = false;

  /// Load an AppOpenAd.
  void loadAd() {
    // We will implement this below.
  }

  /// Whether an ad is available to be shown.
  bool get isAdAvailable {
    return _appOpenAd != null;
  }
}

একটি বিজ্ঞাপন লোড করুন

ব্যবহারকারীরা আপনার অ্যাপে প্রবেশ করার আগেই অ্যাপ খোলার বিজ্ঞাপনটি প্রস্তুত থাকা প্রয়োজন। বিজ্ঞাপন দেখানোর নির্ধারিত সময়ের আগেই বিজ্ঞাপনের অনুরোধ পাঠানোর জন্য একটি ইউটিলিটি ক্লাস তৈরি করুন।

AppOpenAd ক্লাসের ` loadWithAdManagerAdRequest মেথড ব্যবহার করে একটি বিজ্ঞাপন লোড করা হয়। `load` মেথডটির জন্য একটি অ্যাড ইউনিট আইডি, একটি ওরিয়েন্টেশন মোড, একটি AdManagerAdRequest অবজেক্ট এবং একটি কমপ্লিশন হ্যান্ডলার প্রয়োজন হয়, যা বিজ্ঞাপন লোড সফল বা ব্যর্থ হলে কল করা হয়। লোড করা AppOpenAd অবজেক্টটি কমপ্লিশন হ্যান্ডলারে একটি প্যারামিটার হিসেবে প্রদান করা হয়। নিচের উদাহরণটিতে একটি AppOpenAd লোড করার পদ্ধতি দেখানো হয়েছে।

public class AppOpenAdManager {
  ...

  /// Load an AppOpenAd.
  void loadAd() {
    AppOpenAd.loadWithAdManagerAdRequest(
      adUnitId: adUnitId,
      adManagerAdRequest: AdManagerAdRequest(),
      adLoadCallback: AppOpenAdLoadCallback(
        onAdLoaded: (ad) {
          _appOpenAd = ad;
        },
        onAdFailedToLoad: (error) {
          print('AppOpenAd failed to load: $error');
          // Handle the error.
        },
      ),
    );
  }
}

বিজ্ঞাপনটি দেখান এবং ফুলস্ক্রিন কলব্যাকগুলি পরিচালনা করুন

বিজ্ঞাপন দেখানোর আগে, আপনি যে প্রতিটি বিজ্ঞাপন ইভেন্ট শুনতে চান তার জন্য একটি FullScreenContentCallback রেজিস্টার করুন।

public class AppOpenAdManager {
  ...

  public void showAdIfAvailable() {
    if (!isAdAvailable) {
      print('Tried to show ad before available.');
      loadAd();
      return;
    }
    if (_isShowingAd) {
      print('Tried to show ad while already showing an ad.');
      return;
    }
    // Set the fullScreenContentCallback and show the ad.
    _appOpenAd!.fullScreenContentCallback = FullScreenContentCallback(
      onAdShowedFullScreenContent: (ad) {
        _isShowingAd = true;
        print('$ad onAdShowedFullScreenContent');
      },
      onAdFailedToShowFullScreenContent: (ad, error) {
        print('$ad onAdFailedToShowFullScreenContent: $error');
        _isShowingAd = false;
        ad.dispose();
        _appOpenAd = null;
      },
      onAdDismissedFullScreenContent: (ad) {
        print('$ad onAdDismissedFullScreenContent');
        _isShowingAd = false;
        ad.dispose();
        _appOpenAd = null;
        loadAd();
      },
    );
  }
}

যদি কোনো ব্যবহারকারী অ্যাপ খোলার বিজ্ঞাপনে ক্লিক করে আপনার অ্যাপ ছেড়ে যাওয়ার পর আবার ফিরে আসেন, তাহলে নিশ্চিত করুন যেন তাকে আরেকটি অ্যাপ খোলার বিজ্ঞাপন দেখানো না হয়।

অ্যাপ ফোরগ্রাউন্ডিং ইভেন্টগুলির জন্য শুনুন

অ্যাপ ফোরগ্রাউন্ডিং ইভেন্টের বিজ্ঞপ্তি পেতে হলে, আপনাকে AppStateEventNotifier.appStateStream এ সাবস্ক্রাইব করতে হবে এবং foreground ইভেন্টগুলোর জন্য লিসেন করতে হবে।

import 'package:app_open_example/app_open_ad_manager.dart';
import 'package:google_mobile_ads/google_mobile_ads.dart';

/// Listens for app foreground events and shows app open ads.
class AppLifecycleReactor {
  final AppOpenAdManager appOpenAdManager;

  AppLifecycleReactor({required this.appOpenAdManager});

  void listenToAppStateChanges() {
    AppStateEventNotifier.startListening();
    AppStateEventNotifier.appStateStream
        .forEach((state) => _onAppStateChanged(state));
  }

  void _onAppStateChanged(AppState appState) {
    // Try to show an app open ad if the app is being resumed and
    // we're not already showing an app open ad.
    if (appState == AppState.foreground) {
      appOpenAdManager.showAdIfAvailable();
    }
  }
}

এখন আপনি আপনার AppLifecycleReactor ইনিশিয়ালাইজ করতে পারেন এবং অ্যাপ লাইফসাইকেলের পরিবর্তনগুলো শোনা শুরু করতে পারেন। উদাহরণস্বরূপ, আপনার হোমপেজ থেকে:

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

import 'app_lifecycle_reactor.dart';

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  MobileAds.instance.initialize();
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'App Open Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'App Open Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key? key, required this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

/// Example home page for an app open ad.
class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;
  late AppLifecycleReactor _appLifecycleReactor;

  @override
  void initState() {
    super.initState();
    
    AppOpenAdManager appOpenAdManager = AppOpenAdManager()..loadAd();
    _appLifecycleReactor = AppLifecycleReactor(
      appOpenAdManager: appOpenAdManager);
  }

বিজ্ঞাপনের মেয়াদ শেষ হওয়ার বিষয়টি বিবেচনা করুন

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

/// Utility class that manages loading and showing app open ads.
class AppOpenAdManager {
  ...
  
  /// Maximum duration allowed between loading and showing the ad.
  final Duration maxCacheDuration = Duration(hours: 4);

  /// Keep track of load time so we don't show an expired ad.
  DateTime? _appOpenLoadTime;
  
  ...

  /// Load an AppOpenAd.
  void loadAd() {
    AppOpenAd.loadWithAdManagerAdRequest(
      adUnitId: adUnitId,
      orientation: AppOpenAd.orientationPortrait,
      adManagerAdRequest: AdManagerAdRequest(),
      adLoadCallback: AppOpenAdLoadCallback(
        onAdLoaded: (ad) {
          print('$ad loaded');
          _appOpenLoadTime = DateTime.now();
          _appOpenAd = ad;
        },
        onAdFailedToLoad: (error) {
          print('AppOpenAd failed to load: $error');
        },
      ),
    );
  }

  /// Shows the ad, if one exists and is not already being shown.
  ///
  /// If the previously cached ad has expired, this just loads and caches a
  /// new ad.
  void showAdIfAvailable() {
    if (!isAdAvailable) {
      print('Tried to show ad before available.');
      loadAd();
      return;
    }
    if (_isShowingAd) {
      print('Tried to show ad while already showing an ad.');
      return;
    }
    if (DateTime.now().subtract(maxCacheDuration).isAfter(_appOpenLoadTime!)) {
      print('Maximum cache duration exceeded. Loading another ad.');
      _appOpenAd!.dispose();
      _appOpenAd = null;
      loadAd();
      return;
    }
    // Set the fullScreenContentCallback and show the ad.
    _appOpenAd!.fullScreenContentCallback = FullScreenContentCallback(...);
    _appOpenAd!.show();
  }
}

কোল্ড স্টার্ট এবং লোডিং স্ক্রিন

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

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

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

সর্বোত্তম অনুশীলন

অ্যাপ খোলার বিজ্ঞাপনগুলো আপনার অ্যাপের লোডিং স্ক্রিন, অ্যাপটি প্রথম চালু হওয়ার সময় এবং অ্যাপ পরিবর্তনের সময় অর্থ উপার্জনে সাহায্য করে, কিন্তু কিছু সেরা অনুশীলন মনে রাখা জরুরি, যাতে আপনার ব্যবহারকারীরা অ্যাপটি ব্যবহার করে আনন্দ পান। এক্ষেত্রে যা করা সবচেয়ে ভালো:

  • আপনার ব্যবহারকারীরা কয়েকবার অ্যাপটি ব্যবহার করার পর প্রথম অ্যাপ খোলার বিজ্ঞাপনটি দেখান।
  • এমন সময়ে অ্যাপ খোলার বিজ্ঞাপন দেখান, যখন আপনার ব্যবহারকারীরা সাধারণত অ্যাপটি লোড হওয়ার জন্য অপেক্ষা করে থাকেন।
  • অ্যাপ খোলার বিজ্ঞাপনের নিচে যদি কোনো লোডিং স্ক্রিন থাকে এবং বিজ্ঞাপনটি বন্ধ হওয়ার আগেই সেটির লোডিং সম্পন্ন হয়ে যায়, তাহলে আপনি onAdDismissedFullScreenContent ইভেন্ট হ্যান্ডলারে লোডিং স্ক্রিনটি বন্ধ করে দিতে পারেন।