অ্যাপ খোলা বিজ্ঞাপন হল একটি বিশেষ বিজ্ঞাপন বিন্যাস যা প্রকাশকদের জন্য তাদের অ্যাপ লোড স্ক্রীন নগদীকরণ করতে ইচ্ছুক। অ্যাপ খোলা বিজ্ঞাপনগুলি যে কোনও সময় বন্ধ করা যেতে পারে এবং আপনার ব্যবহারকারীরা যখন আপনার অ্যাপটিকে অগ্রভাগে নিয়ে আসে তখন দেখানোর জন্য ডিজাইন করা হয়েছে৷
অ্যাপ খোলা বিজ্ঞাপনগুলি স্বয়ংক্রিয়ভাবে একটি ছোট ব্র্যান্ডিং এলাকা দেখায় যাতে ব্যবহারকারীরা জানতে পারে যে তারা আপনার অ্যাপে রয়েছে। একটি অ্যাপ খোলা বিজ্ঞাপন দেখতে কেমন তার একটি উদাহরণ এখানে দেওয়া হল:
পূর্বশর্ত
- ফ্লটার প্লাগইন 0.13.6 বা উচ্চতর।
- শুরু করুন সম্পূর্ণ করুন। আপনার Flutter অ্যাপে ইতিমধ্যেই Google Mobile Ads Flutter প্লাগইন আমদানি করা উচিত।
সর্বদা পরীক্ষার বিজ্ঞাপন দিয়ে পরীক্ষা করুন
আপনার অ্যাপ তৈরি এবং পরীক্ষা করার সময়, নিশ্চিত করুন যে আপনি লাইভ, প্রোডাকশন বিজ্ঞাপনের পরিবর্তে পরীক্ষামূলক বিজ্ঞাপন ব্যবহার করছেন। এটি করতে ব্যর্থ হলে আপনার অ্যাকাউন্ট স্থগিত হতে পারে।
টেস্ট বিজ্ঞাপন লোড করার সবচেয়ে সহজ উপায় হল Android এবং iOS পুরস্কৃত বিজ্ঞাপনের জন্য আমাদের ডেডিকেটেড টেস্ট বিজ্ঞাপন ইউনিট আইডি ব্যবহার করা:
-
/21775744923/example/app-open
প্রতিটি অনুরোধের জন্য পরীক্ষার বিজ্ঞাপনগুলি ফেরত দেওয়ার জন্য এগুলি বিশেষভাবে কনফিগার করা হয়েছে এবং কোডিং, পরীক্ষা এবং ডিবাগ করার সময় আপনি সেগুলিকে আপনার নিজস্ব অ্যাপগুলিতে ব্যবহার করতে পারবেন৷ আপনার অ্যাপ প্রকাশ করার আগে শুধু নিশ্চিত করুন যে আপনি সেগুলিকে আপনার নিজস্ব বিজ্ঞাপন ইউনিট আইডি দিয়ে প্রতিস্থাপন করেছেন।
বাস্তবায়ন
অ্যাপ খোলা বিজ্ঞাপনগুলিকে সংহত করার প্রধান পদক্ষেপগুলি হল:
- একটি ইউটিলিটি ক্লাস তৈরি করুন যা আপনাকে এটি প্রদর্শন করার আগে একটি বিজ্ঞাপন লোড করে।
- একটি বিজ্ঞাপন লোড করুন.
- কলব্যাকের জন্য নিবন্ধন করুন এবং বিজ্ঞাপনটি দেখান।
- ফোরগ্রাউন্ডিং ইভেন্টের সময় বিজ্ঞাপন দেখানোর জন্য
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
পদ্ধতি ব্যবহার করে একটি বিজ্ঞাপন লোড করা হয়। লোড পদ্ধতির জন্য একটি বিজ্ঞাপন ইউনিট আইডি, একটি অভিযোজন মোড, একটি 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
ইভেন্ট হ্যান্ডলারে আপনার লোডিং স্ক্রীনটি খারিজ করতে চাইতে পারেন।