অ্যাপ খোলার সাথে সাথে দেখা যায় এমন বিজ্ঞাপন

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

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

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

পূর্বশর্ত

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

  • Flutter প্লাগ-ইন 0.13.6 বা তার পরবর্তী যেকোনও ভার্সন ইনস্টল করুন।
  • Google Mobile Ads Flutter Plugin সেট-আপ করুন। আপনার Flutter অ্যাপে অবশ্যই Google Mobile Ads Flutter Plugin ইমপোর্ট করা থাকতে হবে।

সবসময় টেস্ট বিজ্ঞাপন দিয়ে পরীক্ষা করুন

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

টেস্ট বিজ্ঞাপন লোড করার সবচেয়ে সহজ উপায় হল Android ও iOS পুরস্কার প্রদানকারী বিজ্ঞাপনের জন্য আমাদের নির্দিষ্ট টেস্ট বিজ্ঞাপন ইউনিট আইডি ব্যবহার করা:

Android

ca-app-pub-3940256099942544/9257395921

iOS

ca-app-pub-3940256099942544/5575463023

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

প্রয়োগ

অ্যাপ খোলার সঙ্গে সঙ্গে দেখা যায় এমন বিজ্ঞাপন ইন্টিগ্রেট করার মূল ধাপগুলি হল:

  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 = Platform.isAndroid
    ? 'ca-app-pub-3940256099942544/9257395921'
    : 'ca-app-pub-3940256099942544/5575463023';
  
  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 ক্লাসে load পদ্ধতি ব্যবহার করে বিজ্ঞাপন লোড করা হয়। load পদ্ধতিতে একটি বিজ্ঞাপন ইউনিট আইডি, একটি ওরিয়েন্টেশন মোড, একটি AdRequest অবজেক্ট এবং একটি সম্পূর্ণতা হ্যান্ডলার প্রয়োজন হয় যা বিজ্ঞাপন লোড করা সফল বা ব্যর্থ হলে কল করা হয়। সম্পূর্ণতা হ্যান্ডলারে প্যারামিটার হিসেবে লোড করা AppOpenAd অবজেক্ট প্রদান করা হয়। নিচের উদাহরণে দেখানো হয়েছে কীভাবে AppOpenAd লোড করতে হয়।

public class AppOpenAdManager {
  ...

  /// Load an AppOpenAd.
  void loadAd() {
    AppOpenAd.load(
      adUnitId: adUnitId,
      adRequest: AdRequest(),
      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.load(
      adUnitId: adUnitId,
      orientation: AppOpenAd.orientationPortrait,
      adRequest: AdRequest(),
      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 ইভেন্ট হ্যান্ডলারে আপনার লোডিং স্ক্রিন ডিসমিস করতে পারেন।

GitHub-এ সম্পূর্ণ উদাহরণ

সম্পূর্ণ উদাহরণ দেখতে, API ডেমো দেখুন।