App open ads
App open ads are a special ad format for monetizing your app load screens.
Alert
This ad format only supports vertical orientation. When horizontal orientation is used, these ads aren't served.
Note
Examples showing how all the format types work are available in the demo project.
|
Entity |
Description |
|
|
Use:
|
Example of creating an app open ad
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:yandex_mobileads/mobile_ads.dart';
class AppOpenPage extends StatefulWidget {
const AppOpenPage({super.key});
@override
State<AppOpenPage> createState() => _AppOpenPageState();
}
class _AppOpenPageState extends State<AppOpenPage> with WidgetsBindingObserver {
static const _tag = 'AppOpen';
static const _adUnitId = 'demo-appopenad-yandex';
AppOpenAdLoader? _loader;
AppOpenAd? _ad;
String _status = 'Initializing...';
bool _wasInBackground = false;
static bool _isShowing = false;
@override
void initState() {
super.initState();
WidgetsBinding.instance.addObserver(this);
_init();
}
@override
void dispose() {
WidgetsBinding.instance.removeObserver(this);
_ad?.destroy();
super.dispose();
}
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
debugPrint('[$_tag] Lifecycle: $state');
if (state == AppLifecycleState.paused) {
_wasInBackground = true;
} else if (state == AppLifecycleState.resumed && _wasInBackground && _ad != null && !_isShowing) {
_wasInBackground = false;
_show();
}
}
Future<void> _init() async {
setState(() => _status = 'Creating loader...');
_loader = await AppOpenAdLoader.create(
onAdLoaded: (ad) {
debugPrint('[$_tag] onAdLoaded');
if (!mounted) { ad.destroy(); return; }
_ad = ad;
setState(() => _status = 'Ready!\n\nMinimize app and return to show ad');
},
onAdFailedToLoad: (error) {
debugPrint('[$_tag] onAdFailedToLoad: ${error.description}');
if (mounted) setState(() => _status = 'Error: ${error.description}');
},
);
setState(() => _status = 'Loading ad...');
await _loader!.loadAd(
adRequestConfiguration: AdRequestConfiguration(adUnitId: _adUnitId),
);
}
Future<void> _show() async {
final ad = _ad;
if (ad == null || _isShowing) return;
_isShowing = true;
ad.setAdEventListener(
eventListener: AppOpenAdEventListener(
onAdShown: () {
debugPrint('[$_tag] onAdShown');
if (mounted) setState(() => _status = 'Showing...');
},
onAdDismissed: () {
debugPrint('[$_tag] onAdDismissed');
_isShowing = false;
_ad?.destroy();
_ad = null;
if (mounted) setState(() => _status = 'Closed');
},
onAdClicked: () => debugPrint('[$_tag] onAdClicked'),
onAdFailedToShow: (error) {
debugPrint('[$_tag] onAdFailedToShow: ${error.description}');
_isShowing = false;
if (mounted) setState(() => _status = 'Show error: ${error.description}');
},
onAdImpression: (ImpressionData impressionData) => debugPrint('[$_tag] onAdImpression: $impressionData'),
),
);
await ad.show();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('AppOpen')),
body: Center(
child: Padding(
padding: const EdgeInsets.all(24),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
if (_status.contains('Loading') || _status.contains('Creating'))
const CircularProgressIndicator(),
const SizedBox(height: 16),
Text(_status, textAlign: TextAlign.center),
],
),
),
),
);
}
}
Checking integration
Build and run your project. You can check if the integration is successful by searching the YandexAds keyword in Logcat in Android Studio:
[Integration] Ad type App Open was integrated successfully
Was the article helpful?
Previous
Next