union_ad_ssgf/example/lib/home_page.dart
2024-11-26 11:37:48 +08:00

244 lines
7.2 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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: () {
showRewardVideoAd();
},
),
],
),
],
),
),
),
);
}
/// 展示插屏广告
Future<void> showInterstitialAd() async {
await FlutterUnionAd.loadUnifiedInterstitialAD(
//android广告id
androidId: AdsConfig.androidInterstitialRewardVideoId,
//ios广告id
iosId: AdsConfig.iosRewardVideoId,
//下载二次确认弹窗 默认false
downloadConfirm: false,
//开启竞价
isBidding: false,
isFullScreen: false,
);
}
/// 当前版本
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: false,
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: false,
//开启竞价
isBidding: false,
);
}