Реклама при открытии приложения
Реклама при открытии приложения (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),
],
),
),
),
);
}
}
Проверка интеграции
Соберите и запустите проект. Успешную интеграцию можно проверить в Logcat Android Studio по ключевому слову YandexAds:
[Integration] Ad type App Open was integrated successfully
Была ли статья полезна?
Предыдущая
Следующая