开屏广告
开屏广告是一种特殊的广告格式,用于通过应用加载屏幕变现。
注意
该广告格式仅支持竖屏显示。若使用横屏模式,广告将无法正常展示。
备注
演示项目中提供了展示所有格式类型运作原理的示例。
|
实体 |
描述 |
|
|
使用:
|
开屏广告创建示例
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),
],
),
),
),
);
}
}
检查集成
创建并运行您的项目。您可以通过在 Android Studio 的 Logcat 中搜索 YandexAds 关键字来检查集成是否成功:
[Integration] Ad type App Open was integrated successfully