激励广告
激励广告是一种全屏广告格式,用户观看广告可获得奖金或其他奖励(例如游戏币、重试次数、高级功能使用权等)。
备注
用户可决定是否观看广告或跳过广告,只有观看完广告才能获得奖励。
备注
演示项目中提供了展示所有格式类型运作原理的示例。
|
实体 |
描述 |
|
|
使用:
|
激励广告创建示例
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)),
],
],
),
),
);
}
}
检查集成
创建并运行您的项目。您可以通过在 Android Studio 的 Logcat 中搜索 YandexAds 关键字来检查集成是否成功:
[Integration] Ad type rewarded was integrated successfully