Flutter集成Unity Ads广告插件google_applovin_unity_ads的使用
Flutter集成Unity Ads广告插件google_applovin_unity_ads的使用
添加依赖到pubspec.yaml
dependencies:
google_applovin_unity_ads: ^2.3.42
get:
flutter_screenutil:
visibility_detector: ^0.3.3
在AndroidManifest.xml中添加权限和配置
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="com.google.android.gms.permission.AD_ID"/>
<application
...
<meta-data
android:name="com.google.android.gms.ads.AD_MANAGER_APP"
android:value="true" />
<meta-data
android:name="com.google.android.gms.ads.APPLICATION_ID"
android:value="YOUR_ADMOB_APPLICATION_ID" />
<!-- 对于Android启动屏 -->
<meta-data
android:name="io.flutter.embedding.android.SplashScreenDrawable"
android:resource="@drawable/launch_background" />
...
</application>
在build.gradle中添加配置
android {
...
defaultConfig {
...
minSdkVersion 20
targetSdkVersion 33
multiDexEnabled true
}
...
}
初始化Flutter应用
import 'package:flutter/material.dart';
import 'package:get/route_manager.dart';
import 'package:google_applovin_unity_ads/google_applovin_unity_ads.dart';
import 'package:google_applovin_unity_ads_example/main_screen.dart';
void main() {
WidgetsFlutterBinding.ensureInitialized();
MobileAds.instance.initialize();
FacebookAds.instance.initialize();
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({Key? key}) : super(key: key);
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
final String placeholderText = 'Lorem ipsum dolor sit amet';
Widget _nativeAd = Container(height: 0);
Widget _bannerAd = Container(height: 0);
@override
void initState() {
super.initState();
Future.delayed(
const Duration(seconds: 1),
() => {
fetchAdsSettings(
appVersionCode: 1,
settingsUrl: "YOUR_SETTINGS_URL",
keyName: "YOUR_KEY_NAME",
).then((value) => {
getAdsSettings()?.adsSequence?.clear(),
getAdsSettings()?.intraAdsSequence?.clear(),
getAdsSettings()?.bannerAdsSequence?.clear(),
getAdsSettings()?.openAdsSequence?.clear(),
getAdsSettings()?.rewardsAdsSequence?.clear(),
getAdsSettings()?.adsSequence?.add("app_lovin"),
getAdsSettings()?.intraAdsSequence?.add("app_lovin"),
getAdsSettings()?.rewardsAdsSequence?.add("app_lovin"),
getAdsSettings()?.openAdsSequence?.add("app_lovin"),
if ((getAdsSettings()?.appLovin?.sdkKey ?? "").isNotEmpty) {
AppLovinAds.instance
.initialize(
getAdsSettings()?.appLovin?.sdkKey ?? "",
getAdsSettings()?.adSetting?.isGeoedgeSdkFlag == true
? (getAdsSettings()?.adSetting?.geoedgeSdkKey ?? "")
: "",
getAdsSettings()?.adSetting?.isGeoedgeSdkFlag == true
? (getAdsSettings()?.adSetting?.geoedgeSdkKeyTimeoutInSeconds ?? 0)
: 0,
)
.then((value) => {
loadIntraAds(),
loadRewardAds(),
showMediumNativeAds(
customOptions: {
"btn_colors": ["#00F0F0"],
"btn_corner_radius": 18.5,
"btn_text_color": "#8bc34ae0",
"btn_gradient_orientation": GradientOrientation.TOP_BOTTOM.index,
"text_heading_colors": "#8bc34ae0",
"text_body_colors": "#8bc34ae0",
"text_store_colors": "#8bc34ae0",
"text_fonts": "mooli_regular.ttf",
},
onAdLoadedCallback: (p0) {
setState(() {
_nativeAd = p0;
});
},
),
showBannerAds(
margin: const EdgeInsets.symmetric(vertical: 24),
onAdLoadedCallback: (p0) {
setState(() {
_bannerAd = p0;
});
},
),
})
},
initOpenAds(
context: Get.context!,
onOpenAdLoaded: () {
showOpenAds(Get.context!);
}
)
})
}
);
}
@override
void dispose() {
super.dispose();
destroyAd();
}
@override
Widget build(BuildContext context) {
return GetMaterialApp(
home: Builder(builder: (BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Ads example app'),
actions: <Widget>[
PopupMenuButton<String>(
onSelected: (String result) {
switch (result) {
case 'InterstitialAd':
showIntraAds(
context: context,
callback: () => {print("showIntraAds Is Completed")},
);
break;
case 'RewardedAd':
showRewardAds(
context: context,
callback: () => {print("Show Completed true")},
onSkippedCallback: () => {print("Skipped Ad true")},
onFailedCallback: () => {
showIntraAds(
context: context,
isCompulsory: true,
callback: () => {print("Show Completed onFailedCallback")},
)
},
);
break;
case 'MainScreen':
Navigator.push(context, MaterialPageRoute(
builder: (context) {
return const MainScreen();
},
));
break;
default:
throw AssertionError('unexpected button: $result');
}
},
itemBuilder: (BuildContext context) => <PopupMenuEntry<String>>[
const PopupMenuItem<String>(
value: 'InterstitialAd',
child: Text('InterstitialAd'),
),
const PopupMenuItem<String>(
value: 'RewardedAd',
child: Text('RewardedAd'),
),
const PopupMenuItem<String>(
value: 'MainScreen',
child: Text('MainScreen'),
)
],
),
],
),
body: SafeArea(
child: SingleChildScrollView(
child: Column(children: [
_nativeAd,
const SizedBox(height: 20),
Text(placeholderText),
const SizedBox(height: 20),
TextButton(
style: ButtonStyle(
overlayColor: MaterialStateProperty.resolveWith<Color?>(
(Set<MaterialState> states) {
if (states.contains(MaterialState.focused))
return Colors.red;
return null; // Defer to the widget's default.
}),
),
onPressed: () {
showIntraAds(context: context, callback: () {});
},
child: const Text('INTRA ADS'),
),
const SizedBox(height: 20),
TextButton(
style: ButtonStyle(
overlayColor: MaterialStateProperty.resolveWith<Color?>(
(Set<MaterialState> states) {
if (states.contains(MaterialState.focused)) {
return Colors.red;
}
return null; // Defer to the widget's default.
}),
),
onPressed: () {
initOpenAds(
context: Get.context!,
onOpenAdLoaded: () {
showOpenAds(Get.context!);
},
);
},
child: const Text('REWARD ADS'),
)
]),
),
),
bottomNavigationBar: _bannerAd,
);
}),
);
}
}
在MainActivity.kt中添加自定义原生广告工厂
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import com.btcpiyush.ads.google_applovin_unity_ads.CustomNativeAd
import com.btcpiyush.ads.google_applovin_unity_ads.GoogleApplovinUnityAdsPlugin
class MainActivity: FlutterActivity() {
override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
super.configureFlutterEngine(flutterEngine)
val factory: CustomNativeAd = CustomNativeAd(getLayoutInflater())
GoogleApplovinUnityAdsPlugin.registerNativeAdFactory(flutterEngine, "nativeFactoryId", factory)
}
override fun cleanUpFlutterEngine(flutterEngine: FlutterEngine) {
GoogleApplovinUnityAdsPlugin.unregisterNativeAdFactory(flutterEngine, "nativeFactoryId")
}
}
小型原生广告示例
Widget smallNativeShow = Container(height: 0);
// 加载原生广告
showMediumNativeAds(
onAdLoadedCallback: (a) => {
setState(() {
smallNativeShow = a;
})
},
);
// 显示原生广告
smallNativeShow,
大型原生广告示例
Widget bigNativeShow = Container(height: 0);
// 加载原生广告
showNativeAds(
onAdLoadedCallback: (a) => {
setState(() {
bigNativeShow = a;
})
},
);
// 显示原生广告
bigNativeShow,
更多关于Flutter集成Unity Ads广告插件google_applovin_unity_ads的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter集成Unity Ads广告插件google_applovin_unity_ads的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter项目中集成Unity Ads广告插件 google_applovin_unity_ads
可以让你在应用中展示Unity Ads广告。以下是如何在Flutter项目中集成和使用该插件的步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 google_applovin_unity_ads
插件的依赖。
dependencies:
flutter:
sdk: flutter
google_applovin_unity_ads: ^latest_version
替换 latest_version
为最新的插件版本号。你可以访问 pub.dev 获取最新版本。
2. 配置Unity Ads
在你的Unity Ads开发者控制台中创建一个应用,并获取 Game ID
。你需要在代码中配置这个 Game ID
。
3. 初始化插件
在你的Flutter应用启动时,初始化Unity Ads插件。通常可以在 main.dart
文件的 main
函数中进行初始化。
import 'package:flutter/material.dart';
import 'package:google_applovin_unity_ads/google_applovin_unity_ads.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 初始化Unity Ads
await UnityAds.initialize(
gameId: 'YOUR_GAME_ID', // 替换为你的Unity Ads Game ID
testMode: true, // 测试模式,发布时设置为false
);
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Unity Ads Example',
home: HomeScreen(),
);
}
}
4. 展示广告
你可以使用 UnityAds.showInterstitialAd
或 UnityAds.showRewardedAd
方法来展示插页广告或激励广告。
展示插页广告
class HomeScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter Unity Ads Example'),
),
body: Center(
child: ElevatedButton(
onPressed: () async {
// 展示插页广告
await UnityAds.showInterstitialAd(
placementId: 'YOUR_INTERSTITIAL_PLACEMENT_ID', // 替换为你的插页广告位ID
);
},
child: Text('Show Interstitial Ad'),
),
),
);
}
}
展示激励广告
class HomeScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter Unity Ads Example'),
),
body: Center(
child: ElevatedButton(
onPressed: () async {
// 展示激励广告
await UnityAds.showRewardedAd(
placementId: 'YOUR_REWARDED_PLACEMENT_ID', // 替换为你的激励广告位ID
onRewarded: (reward) {
// 用户观看完广告后的回调
print('User earned reward: ${reward.amount} ${reward.type}');
},
);
},
child: Text('Show Rewarded Ad'),
),
),
);
}
}
5. 处理广告事件
你可以监听Unity Ads的各种事件,比如广告加载成功、广告展示成功、广告关闭等。
UnityAds.setListener(UnityAdsListener(
onReady: (placementId) {
print('Ad is ready to show for placement: $placementId');
},
onStart: (placementId) {
print('Ad started for placement: $placementId');
},
onClick: (placementId) {
print('Ad clicked for placement: $placementId');
},
onFailed: (placementId, error, message) {
print('Ad failed to show for placement: $placementId with error: $message');
},
onCompleted: (placementId) {
print('Ad completed for placement: $placementId');
},
onSkipped: (placementId) {
print('Ad skipped for placement: $placementId');
},
));