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

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

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

পূর্বশর্ত

  • ফ্লাটার প্লাগইন ০.১৩.৬ বা তার বেশি।
  • শুরু করুন সম্পূর্ণ করুন। আপনার Flutter অ্যাপে ইতিমধ্যেই Google Mobile Ads Flutter প্লাগইন আমদানি করা উচিত।

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

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

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

অ্যান্ড্রয়েড

ca-app-pub-3940256099942544/9257395921

আইওএস

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 পদ্ধতি ব্যবহার করে একটি বিজ্ঞাপন লোড করা হয়। লোড পদ্ধতিতে একটি বিজ্ঞাপন ইউনিট আইডি, একটি ওরিয়েন্টেশন মোড, একটি 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 initialize যোগ করতে পারেন এবং অ্যাপের জীবনচক্রের পরিবর্তনগুলি শুনতে শুরু করতে পারেন। উদাহরণস্বরূপ, আপনার হোমপেজ থেকে:

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-এ সম্পূর্ণ উদাহরণ

অ্যাপ খোলা