Реклама с вознаграждением
Реклама с вознаграждением (Rewarded) — это полноэкранный рекламный формат, за просмотр которого пользователь получает бонус или награду (например: внутриигровые монеты, доступ к премиум-функциям, повтор попытки и т. д.).
Примечание
Пользователь принимает решение самостоятельно — не смотреть рекламу или дождаться получения награды.
Примечание
Пример работы всех типов форматов есть в демопроекте.
|
Сущность |
Описание |
|
|
Используйте:
|
Пример создания рекламы с вознаграждением
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:yandex_mobileads/mobile_ads.dart';
class RewardedPage extends StatefulWidget {
const RewardedPage({super.key});
@override
State<RewardedPage> createState() => _RewardedPageState();
}
class _RewardedPageState extends State<RewardedPage> {
static const _tag = 'Rewarded';
static const _adUnitId = 'demo-rewarded-yandex';
RewardedAdLoader? _loader;
RewardedAd? _ad;
String _status = 'Initializing...';
String _reward = '';
@override
void initState() {
super.initState();
_init();
}
@override
void dispose() {
_ad?.destroy();
super.dispose();
}
Future<void> _init() async {
setState(() => _status = 'Creating loader...');
_loader = await RewardedAdLoader.create(
onAdLoaded: (ad) {
debugPrint('[$_tag] onAdLoaded');
if (!mounted) { ad.destroy(); return; }
_ad = ad;
setState(() => _status = 'Showing...');
_show();
},
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) return;
ad.setAdEventListener(
eventListener: RewardedAdEventListener(
onAdShown: () => debugPrint('[$_tag] onAdShown'),
onAdDismissed: () {
debugPrint('[$_tag] onAdDismissed');
if (mounted) setState(() => _status = _reward.isEmpty ? 'Closed' : 'Reward received!');
},
onAdClicked: () => debugPrint('[$_tag] onAdClicked'),
onAdFailedToShow: (error) {
debugPrint('[$_tag] onAdFailedToShow: ${error.description}');
if (mounted) setState(() => _status = 'Show error: ${error.description}');
},
onAdImpression: (ImpressionData impressionData) =>
debugPrint('[$_tag] onAdImpression: $impressionData'),
onRewarded: (reward) {
debugPrint('[$_tag] onRewarded: ${reward.amount} ${reward.type}');
if (mounted) setState(() => _reward = '+${reward.amount} ${reward.type}');
},
),
);
await ad.show();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Rewarded')),
body: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
if (_reward.isEmpty && !_status.contains('Error') && !_status.contains('Closed'))
const CircularProgressIndicator(),
const SizedBox(height: 16),
Text(_status),
if (_reward.isNotEmpty) ...[
const SizedBox(height: 16),
Text(_reward, style: const TextStyle(color: Colors.green, fontSize: 24, fontWeight: FontWeight.bold)),
],
],
),
),
);
}
}
Проверка интеграции
Соберите и запустите проект. Успешную интеграцию можно проверить в Logcat Android Studio по ключевому слову YandexAds:
[Integration] Ad type rewarded was integrated successfully