258 lines
7.9 KiB
Dart
258 lines
7.9 KiB
Dart
import 'dart:async';
|
||
import 'package:flutter/material.dart';
|
||
import 'package:union_ad_ssgf/flutter_union_ad.dart';
|
||
import 'package:union_ad_ssgf_example/ads_config.dart';
|
||
import 'package:union_ad_ssgf_example/splash_page.dart';
|
||
|
||
class HomePage extends StatefulWidget {
|
||
final bool initAD;
|
||
const HomePage({super.key, required this.initAD});
|
||
|
||
@override
|
||
State<HomePage> createState() => _HomePageState();
|
||
}
|
||
|
||
class _HomePageState extends State<HomePage> {
|
||
String adVersion = '';
|
||
StreamSubscription? _adViewStream;
|
||
|
||
@override
|
||
void dispose() {
|
||
_adViewStream?.cancel();
|
||
super.dispose();
|
||
}
|
||
|
||
@override
|
||
void initState() {
|
||
super.initState();
|
||
version();
|
||
_adViewStream = FlutterUnionAdStream.initAdStream(
|
||
//激励广告
|
||
flutterTencentadRewardCallBack: FlutterUnionAdRewardCallBack(
|
||
onShow: () {
|
||
print("激励广告显示");
|
||
},
|
||
onClick: () {
|
||
print("激励广告点击");
|
||
},
|
||
onFail: (code, message) {
|
||
print("激励广告失败 $code $message");
|
||
},
|
||
onClose: () {
|
||
print("激励广告关闭");
|
||
},
|
||
onReady: () async {
|
||
print("激励广告预加载准备就绪");
|
||
await FlutterUnionAd.showRewardVideoAd();
|
||
},
|
||
onUnReady: () {
|
||
print("激励广告预加载未准备就绪");
|
||
},
|
||
onVerify: (transId, rewardName, rewardAmount) {
|
||
print("激励广告奖励 $transId $rewardName $rewardAmount");
|
||
},
|
||
onExpose: () {
|
||
print("激励广告曝光");
|
||
},
|
||
onFinish: () {
|
||
print("激励广告完成");
|
||
},
|
||
onECPM: (ecpmLevel, ecpm) async {
|
||
print("激励广告竞价 ecpmLevel=$ecpmLevel ecpm=$ecpm");
|
||
//规则 自己根据业务处理
|
||
if (ecpm > 0) {
|
||
//竞胜出价,类型为Integer
|
||
//最大竞败方出价,类型为Integer
|
||
await FlutterUnionAd.showRewardVideoAd(
|
||
result: FlutterUnioAdBiddingResult().success(ecpm, 0));
|
||
} else {
|
||
//竞胜方出价(单位:分),类型为Integer
|
||
//优量汇广告竞败原因 FlutterTencentAdBiddingLossReason
|
||
//竞胜方渠道ID FlutterTencentAdADNID
|
||
await FlutterUnionAd.showRewardVideoAd(
|
||
result: FlutterUnioAdBiddingResult().fail(
|
||
1000,
|
||
FlutterTencentAdBiddingLossReason.LOW_PRICE,
|
||
FlutterTencentAdADNID.othoerADN));
|
||
}
|
||
},
|
||
),
|
||
flutterTencentadInteractionCallBack: FlutterUnionAdInteractionCallBack(
|
||
onShow: () {
|
||
print("插屏广告显示");
|
||
},
|
||
onClick: () {
|
||
print("插屏广告点击");
|
||
},
|
||
onFail: (code, message) {
|
||
print("插屏广告失败 $code $message");
|
||
},
|
||
onClose: () {
|
||
print("插屏广告关闭");
|
||
},
|
||
onExpose: () {
|
||
print("插屏广告曝光");
|
||
},
|
||
onReady: () async {
|
||
print("插屏广告预加载准备就绪");
|
||
await FlutterUnionAd.showUnifiedInterstitialAD();
|
||
},
|
||
onUnReady: () {
|
||
print("插屏广告预加载未准备就绪");
|
||
},
|
||
onVerify: (transId, rewardName, rewardAmount) {
|
||
print("插屏广告奖励凭证id $transId");
|
||
},
|
||
onECPM: (ecpmLevel, ecpm) async {
|
||
print("插屏广告竞价 ecpmLevel=$ecpmLevel ecpm=$ecpm");
|
||
//规则 自己根据业务处理
|
||
if (ecpm > 0) {
|
||
//竞胜出价,类型为Integer
|
||
//最大竞败方出价,类型为Integer
|
||
await FlutterUnionAd.showUnifiedInterstitialAD(
|
||
result: FlutterUnioAdBiddingResult().success(ecpm, 0));
|
||
} else {
|
||
//竞胜方出价(单位:分),类型为Integer
|
||
//优量汇广告竞败原因 FlutterTencentAdBiddingLossReason
|
||
//竞胜方渠道ID FlutterTencentAdADNID
|
||
await FlutterUnionAd.showUnifiedInterstitialAD(
|
||
result: FlutterUnioAdBiddingResult().fail(
|
||
1000,
|
||
FlutterTencentAdBiddingLossReason.LOW_PRICE,
|
||
FlutterTencentAdADNID.othoerADN));
|
||
}
|
||
},
|
||
),
|
||
);
|
||
}
|
||
|
||
@override
|
||
Widget build(BuildContext context) {
|
||
return Scaffold(
|
||
appBar: AppBar(
|
||
title: const Text('Union AD plugin'),
|
||
),
|
||
body: Center(
|
||
child: SingleChildScrollView(
|
||
padding: const EdgeInsets.all(10),
|
||
child: Column(
|
||
children: [
|
||
Text('初始化: ${widget.initAD}'),
|
||
Text('当前版本: $adVersion'),
|
||
const SizedBox(height: 20),
|
||
Row(
|
||
mainAxisAlignment: MainAxisAlignment.center,
|
||
children: [
|
||
const SizedBox(height: 20),
|
||
ElevatedButton(
|
||
child: const Text('开屏(全屏)'),
|
||
onPressed: () {
|
||
showSplashAd(context);
|
||
setState(() {});
|
||
},
|
||
),
|
||
],
|
||
),
|
||
Row(
|
||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||
children: [
|
||
ElevatedButton(
|
||
child: const Text('插屏广告'),
|
||
onPressed: () {
|
||
showInterstitialAd();
|
||
},
|
||
),
|
||
const SizedBox(height: 20),
|
||
ElevatedButton(
|
||
child: const Text('插全屏广告'),
|
||
onPressed: () {
|
||
showInterstitialAd();
|
||
},
|
||
),
|
||
],
|
||
),
|
||
Row(
|
||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||
children: [
|
||
ElevatedButton(
|
||
child: const Text('插屏激励'),
|
||
onPressed: () {
|
||
showInterstitialAd();
|
||
},
|
||
),
|
||
const SizedBox(height: 20),
|
||
ElevatedButton(
|
||
child: const Text('激励视频'),
|
||
onPressed: () {
|
||
showRewardVideoAd();
|
||
},
|
||
),
|
||
],
|
||
),
|
||
const SizedBox(height: 20),
|
||
ElevatedButton(
|
||
child: const Text('信息流'),
|
||
onPressed: () {},
|
||
),
|
||
const SizedBox(height: 20),
|
||
const Center(child: Text('👇🏻 Banner 广告 👇🏻')),
|
||
const SizedBox(height: 10),
|
||
const SizedBox(height: 10),
|
||
],
|
||
),
|
||
),
|
||
),
|
||
);
|
||
}
|
||
|
||
/// 展示插屏广告
|
||
Future<void> showInterstitialAd() async {}
|
||
|
||
/// 当前版本
|
||
Future<void> version() async {
|
||
String result = await FlutterUnionAd.getSDKVersion();
|
||
debugPrint("广告SDK 版本 $result");
|
||
setState(() {
|
||
adVersion = result;
|
||
});
|
||
}
|
||
}
|
||
|
||
/// 展示开屏广告
|
||
Future<void> showSplashAd(context) async {
|
||
Navigator.push(
|
||
context,
|
||
MaterialPageRoute(
|
||
builder: (_) {
|
||
return SplashPage(
|
||
isBidding: true,
|
||
androidId: AdsConfig.androidSplashId,
|
||
iosId: AdsConfig.iosSplashId,
|
||
);
|
||
},
|
||
),
|
||
);
|
||
}
|
||
|
||
/// 展示激励视频广告
|
||
Future<void> showRewardVideoAd() async {
|
||
await FlutterUnionAd.loadRewardVideoAd(
|
||
//android广告id
|
||
androidId: AdsConfig.androidRewardVideoId,
|
||
//ios广告id
|
||
iosId: AdsConfig.iosRewardVideoId,
|
||
//用户id
|
||
userID: "123",
|
||
//奖励
|
||
rewardName: "100金币",
|
||
//奖励数
|
||
rewardAmount: 100,
|
||
//扩展参数 服务器回调使用
|
||
customData: "",
|
||
//下载二次确认弹窗 默认false
|
||
downloadConfirm: true,
|
||
//开启竞价
|
||
isBidding: true,
|
||
);
|
||
}
|