Flutter原生移动广告集成插件google_native_mobile_ads的使用
Flutter原生移动广告集成插件google_native_mobile_ads的使用
此插件支持在Android上全屏和内联原生广告。(目前还没有访问Xcode的权限)。 请查看示例了解如何使用。
如果您喜欢我的工作?支持我
设置
在设置Google移动广告时,只需更改在此包中定义的adfactory实现。 您的MainActivity.java应如下所示:
package com.example.google_native_mobile_ads_example;
import com.example.google_native_mobile_ads.NativeAdFactoryImplementation;
import io.flutter.embedding.android.FlutterActivity;
import io.flutter.embedding.engine.FlutterEngine;
import io.flutter.plugins.googlemobileads.GoogleMobileAdsPlugin;
public class MainActivity extends FlutterActivity {
@Override
public void configureFlutterEngine(FlutterEngine flutterEngine) {
super.configureFlutterEngine(flutterEngine);
final GoogleMobileAdsPlugin.NativeAdFactory factory = new NativeAdFactoryImplementation(getLayoutInflater()); // 引用此包创建的工厂
GoogleMobileAdsPlugin.registerNativeAdFactory(flutterEngine, "google_native_mobile_ads_AdFactory", factory);
}
@Override
public void cleanUpFlutterEngine(FlutterEngine flutterEngine) {
GoogleMobileAdsPlugin.unregisterNativeAdFactory(flutterEngine, "google_native_mobile_ads_AdFactory");
}
}
在AndroidManifest.xml中添加应用程序ID:
<application>
...
<meta-data
android:name="com.google.android.gms.ads.APPLICATION_ID"
android:value="YOUR-APPLICATION-ID"/>
...
</application>
如何在Flutter侧使用
完整的示例请参阅example/main.dart
nativeAd = NativeAd(
adUnitId: widget.adUnitId,
/// 这将展示全屏广告
customOptions: NativeAdCustomOptions.defaultConfig().toMap, // 这将展示全屏广告
nativeAdOptions: NativeAdOptions(
adChoicesPlacement: AdChoicesPlacement.topLeftCorner,
mediaAspectRatio: MediaAspectRatio.any,
videoOptions: VideoOptions(
clickToExpandRequested: true,
customControlsRequested: true,
startMuted: true,
),
//shouldRequestMultipleImages: true,
),
request: const AdRequest(),
/// 这无需更改
factoryId: NativeAdConfig.adFactoryId, // 这也是必需的
...
截图
完整示例代码
以下是示例代码,您可以参考这些代码来集成和使用google_native_mobile_ads
插件。
import 'package:flutter/material.dart';
import 'package:google_mobile_ads/google_mobile_ads.dart';
import 'full_screen_ad.dart';
import 'inline_ad.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await MobileAds.instance.initialize();
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
debugShowCheckedModeBanner: false,
theme: ThemeData(
primarySwatch: Colors.indigo,
),
home: const MainScreen(),
);
}
}
class MainScreen extends StatefulWidget {
const MainScreen({Key? key}) : super(key: key);
[@override](/user/override)
State<MainScreen> createState() => _MainScreenState();
}
class _MainScreenState extends State<MainScreen> {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('主屏幕'),
),
body: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
ElevatedButton(
child: const Text('显示内联原生广告'),
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const MediumSizeNativeAdScreen(),
),
);
},
),
ElevatedButton(
child: const Text('显示全屏原生广告'),
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const FullScreenNativeAdScreen(),
),
);
},
),
],
),
),
);
}
}
更多关于Flutter原生移动广告集成插件google_native_mobile_ads的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter原生移动广告集成插件google_native_mobile_ads的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter应用中集成并使用google_native_mobile_ads
插件来显示原生移动广告的示例代码。这个示例将展示如何初始化广告、加载广告以及展示广告。
首先,确保你已经在pubspec.yaml
文件中添加了google_mobile_ads
依赖(注意:google_native_mobile_ads
可能是旧名称,当前推荐使用google_mobile_ads
):
dependencies:
flutter:
sdk: flutter
google_mobile_ads: ^latest_version # 请替换为最新版本号
然后,运行flutter pub get
来安装依赖。
接下来,按照以下步骤在你的Flutter应用中集成广告:
1. 初始化Mobile Ads SDK
在你的应用入口文件(通常是main.dart
)中初始化Mobile Ads SDK:
import 'package:flutter/material.dart';
import 'package:google_mobile_ads/google_mobile_ads.dart';
void main() {
WidgetsFlutterBinding.ensureInitialized();
MobileAds.instance.initialize();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: MyHomePage(),
);
}
}
2. 配置Ad Request和Ad Unit ID
在你的广告展示页面,配置Ad Request和Ad Unit ID(你需要从Google AdMob获取Ad Unit ID):
import 'package:flutter/material.dart';
import 'package:google_mobile_ads/google_mobile_ads.dart';
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
late BannerAd _bannerAd;
late InterstitialAd _interstitialAd;
@override
void initState() {
super.initState();
// 初始化BannerAd
_bannerAd = BannerAd(
adUnitId: 'ca-app-pub-xxxxxxxxxxxxxxxx/xxxxxxxxxx', // 替换为你的Banner Ad Unit ID
size: AdSize.banner,
request: AdRequest(
keywords: <String>['flutter', 'mobile', 'ads'],
contentUrl: 'https://www.example.com',
nonPersonalizedAdsOnly: false, // 根据需要设置为true以仅请求非个性化广告
),
listener: BannerAdListener(
onAdLoaded: () {
print('Banner Ad loaded.');
},
onAdFailedToLoad: (AdLoadError error) {
print('Banner Ad failed to load: ${error.message}');
},
onAdOpened: () {
print('Banner Ad opened.');
},
onAdClosed: () {
print('Banner Ad closed.');
},
),
);
// 初始化InterstitialAd
_interstitialAd = InterstitialAd(
adUnitId: 'ca-app-pub-xxxxxxxxxxxxxxxx/xxxxxxxxxx', // 替换为你的Interstitial Ad Unit ID
request: AdRequest(),
listener: InterstitialAdListener(
onAdLoaded: () {
_interstitialAd.show();
},
onAdFailedToLoad: (AdLoadError error) {
print('Interstitial Ad failed to load: ${error.message}');
},
onAdOpened: () {
print('Interstitial Ad opened.');
},
onAdClosed: () {
print('Interstitial Ad closed.');
// 可以在这里加载下一个广告
_interstitialAd.load();
},
),
);
// 加载广告
_bannerAd.load();
_interstitialAd.load();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Google Mobile Ads Example'),
),
body: Column(
children: <Widget>[
Container(
height: 50,
child: AdWidget(ad: _bannerAd),
),
ElevatedButton(
onPressed: () {
// 显示插屏广告
_interstitialAd.load();
},
child: Text('Show Interstitial Ad'),
),
],
),
);
}
@override
void dispose() {
_bannerAd.dispose();
_interstitialAd.dispose();
super.dispose();
}
}
3. 处理广告生命周期
在上面的代码中,我们使用了AdListener
来处理广告的生命周期事件,如加载成功、加载失败、广告打开和关闭等。这些事件对于调试和用户体验优化非常重要。
注意事项
- 确保你已经正确设置了AdMob账户,并创建了相应的Ad Unit。
- 在实际发布应用中,不要硬编码Ad Unit ID,可以考虑使用环境变量或配置文件来管理。
- 遵守Google AdMob的政策和指南,以确保广告的合规性和最大化收益。
这个示例展示了如何在Flutter应用中集成Banner广告和Interstitial广告。根据你的需求,你还可以集成Rewarded Ads、Native Ads等其他类型的广告。