Uygulama açılış reklamları, uygulama yükleme ekranlarından para kazanmak isteyen yayıncılar için tasarlanmış özel bir reklam biçimidir. Uygulama açılış reklamları, kullanıcılarınız uygulamanızı ön plana getirdiğinde gösterilecek şekilde tasarlanmıştır ve istendiği zaman kapatılabilir.
Uygulama açılış reklamları, kullanıcılara uygulamanızda olduklarını hatırlatmak için otomatik olarak küçük bir marka alanı gösterir. Uygulama açılış reklamının nasıl göründüğüne dair bir örneği aşağıda bulabilirsiniz:

Ön koşullar
Devam etmeden önce şunları yapın:
- Flutter eklentisi 0.13.6 veya sonraki bir sürümü yükleyin.
- Kurulum Google Mobile Ads Flutter Plugin. Flutter uygulamanızda Google Mobile Ads Flutter Plugin içe aktarılmış olmalıdır.
Her zaman test reklamlarıyla test edin
Uygulamalarınızı oluştururken ve test ederken yayındaki üretim reklamları yerine test reklamlarını kullandığınızdan emin olun. Bu koşula uymamanız halinde hesabınız askıya alınabilir.
Test reklamlarını yüklemenin en kolay yolu, Android ve iOS ödüllü reklamlar için özel test reklam birimi kimliklerimizi kullanmaktır:
Android
ca-app-pub-3940256099942544/9257395921
iOS
ca-app-pub-3940256099942544/5575463023
Bu kimlikler, her istek için test reklamları döndürecek şekilde özel olarak yapılandırılmıştır. Kodlama, test ve hata ayıklama sırasında bunları kendi uygulamalarınızda kullanabilirsiniz. Uygulamanızı yayınlamadan önce bunları kendi reklam birimi kimliğinizle değiştirmeyi unutmayın.
Uygulama
Uygulama açılış reklamlarını entegre etmenin ana adımları şunlardır:
- Reklamı göstermeniz gerekmeden önce reklamı yükleyen bir yardımcı program sınıfı oluşturun.
- Reklam yükleyin.
- Geri çağırmalar için kaydolun ve reklamı gösterin.
- Ön plana alma etkinlikleri sırasında reklamı göstermek için
AppStateEventNotifier.appStateStreamöğesine abone olun.
Yardımcı sınıf oluşturma
Reklamı yüklemek için AppOpenAdManager adlı yeni bir sınıf oluşturun. Bu sınıf, yüklenen bir reklamı ve her platformun reklam birimi kimliğini takip etmek için bir örnek değişkenini yönetir.
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;
}
}
Reklam yükleme
Uygulama açılış reklamınızın, kullanıcılar uygulamanıza girmeden önce hazır olması gerekir. Reklamı göstermeniz gereken zamandan önce reklam istekleri göndermek için bir yardımcı sınıf uygulayın.
Reklam yükleme işlemi, AppOpenAd sınıfındaki load yöntemi kullanılarak gerçekleştirilir. Yükleme yöntemi için bir reklam birimi kimliği, bir yön modu, bir AdRequest nesnesi ve reklam yükleme başarılı veya başarısız olduğunda çağrılan bir tamamlama işleyicisi gerekir. Yüklenen AppOpenAd nesnesi, tamamlanma işleyicide parametre olarak sağlanır. Aşağıdaki örnekte, AppOpenAd öğesinin nasıl yükleneceği gösterilmektedir.
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.
},
),
);
}
}
Reklamı gösterme ve tam ekran geri çağırmaları işleme
Reklamı göstermeden önce, dinlemek istediğiniz her reklam etkinliği için bir FullScreenContentCallback kaydedin.
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();
},
);
}
}
Bir kullanıcı, uygulama açılış reklamını tıklayarak uygulamanızdan ayrıldıktan sonra geri dönerse başka bir uygulama açılış reklamı gösterilmediğinden emin olun.
Uygulamayı ön plana alma etkinliklerini dinleme
Uygulamanın ön plana alınmasıyla ilgili etkinliklerden haberdar olmak için AppStateEventNotifier.appStateStream etkinliğine abone olmanız ve foreground etkinliklerini dinlemeniz gerekir.
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();
}
}
}
Artık AppLifecycleReactor uygulamanızı ilk kullanıma hazırlayabilir ve uygulama yaşam döngüsü değişikliklerini dinlemeye başlayabilirsiniz. Örneğin, ana sayfanızdan:
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);
}
Reklam geçerlilik süresini göz önünde bulundurma
Süresi dolmuş bir reklam göstermediğinizden emin olmak için AppOpenAdManager nesnesine bir zaman damgası ekleyin. Böylece reklamınız yüklendikten sonra ne kadar süre geçtiğini kontrol edebilirsiniz.
Ardından, reklamın hâlâ geçerli olup olmadığını kontrol etmek için bu zaman damgasını kullanın.
/// 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();
}
}
Baştan başlatmalar ve yükleme ekranları
Şimdiye kadarki belgelerde, uygulama açılış reklamlarını yalnızca kullanıcılar uygulamanızı bellekte askıya alındığında ön plana getirdiğinde gösterdiğiniz varsayılmıştır. "Baştan başlatma", uygulamanız başlatıldığında ancak daha önce bellekte askıya alınmadığında gerçekleşir.
Kullanıcının uygulamanızı ilk kez açması, baştan başlatmaya örnek olarak verilebilir. Baştan başlatmalarda, hemen gösterilmeye hazır, önceden yüklenmiş bir uygulama açılış reklamınız olmaz. Reklam isteğinde bulunmanız ile reklamın size geri gönderilmesi arasında geçen süre, kullanıcıların uygulamanızı kısa bir süre kullanmasına ve ardından bağlam dışı bir reklamla karşılaşmasına neden olabilir. Kötü bir kullanıcı deneyimi olduğu için bundan kaçınılmalıdır.
Uygulama açılış reklamlarını baştan başlatmalarda kullanmanın tercih edilen yolu, oyun veya uygulama öğelerinizi yüklemek için bir yükleme ekranı kullanmak ve reklamı yalnızca yükleme ekranından göstermektir. Uygulamanız yüklemeyi tamamladıysa ve kullanıcıyı uygulamanızın ana içeriğine yönlendirdiyse reklamı göstermeyin.
En iyi uygulamalar
Uygulama açılış reklamları, uygulamanızın yükleme ekranından, uygulama ilk başlatıldığında ve uygulama geçişleri sırasında para kazanmanıza yardımcı olur. Ancak kullanıcılarınızın uygulamanızı kullanmaktan keyif alması için en iyi uygulamaları göz önünde bulundurmanız önemlidir. En iyi yöntemler şunlardır:
- Kullanıcılarınız uygulamanızı birkaç defa kullandıktan sonra ilk uygulama açılış reklamınızı gösterin.
- Uygulama açılış reklamlarını, kullanıcılarınızın uygulamanızın yüklenmesini beklediği zamanlarda gösterin.
- Uygulama açılış reklamının altında yükleme ekranınız varsa ve reklam kapatılmadan önce yükleme ekranınızın yüklenmesi tamamlanırsa yükleme ekranınızı
onAdDismissedFullScreenContentetkinlik işleyicisinde kapatmayı deneyebilirsiniz.
GitHub'daki eksiksiz örnek
Örneğin tamamını görmek için API demosuna bakın.