求助:如何在Flutter中用PlatformView显示AppLovin_Max的MREC与Banner广告
不少开发者已经实践过用PlatformView在Flutter里展示AppLovin Max的MREC和Banner广告,下面是具体的实现步骤:
Android原生端实现
- 首先在Android项目的
app/build.gradle中添加AppLovin Max依赖:
implementation 'com.applovin:applovin-sdk:12.+' implementation 'com.applovin:applovin-max:12.+'
- 创建继承自
PlatformView的MREC广告视图类,以及对应的工厂类:
class MrecAdView(context: Context, id: Int, creationParams: Map<String?, Any?>?) : PlatformView { private val adView: MaxAdView init { // 接收Dart端传入的广告单元ID val adUnitId = creationParams?.get("adUnitId") as String adView = MaxAdView(adUnitId, context) // 设置布局参数,适配MREC广告的300x250尺寸 adView.layoutParams = FrameLayout.LayoutParams( FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.WRAP_CONTENT ) // 设置广告监听,处理加载状态 adView.setListener(object : MaxAdViewAdListener { override fun onAdLoaded(ad: MaxAd?) { // 广告加载成功,可做UI调整 } override fun onAdLoadFailed(adUnitId: String?, error: MaxError?) { // 广告加载失败,可显示占位或重试 } // 按需实现其他回调 override fun onAdClicked(ad: MaxAd?) {} override fun onAdExpanded(ad: MaxAd?) {} override fun onAdCollapsed(ad: MaxAd?) {} }) // 启动广告加载 adView.loadAd() } override fun getView(): View = adView override fun dispose() { // 销毁广告视图,避免内存泄漏 adView.destroy() } } class MrecAdViewFactory(private val messenger: BinaryMessenger) : PlatformViewFactory(StandardMessageCodec.INSTANCE) { override fun create(context: Context, id: Int, creationParams: Map<String?, Any?>?): PlatformView { return MrecAdView(context, id, creationParams) } }
- 在
MainActivity中注册这个PlatformView,让Dart端能调用到:
class MainActivity : FlutterActivity() { override fun configureFlutterEngine(flutterEngine: FlutterEngine) { super.configureFlutterEngine(flutterEngine) // 注册视图,标识字符串要和Dart端保持一致 flutterEngine.platformViewsController.registry.registerViewFactory( "com.yourpackage/mrec_ad", MrecAdViewFactory(flutterEngine.dartExecutor.binaryMessenger) ) } }
Dart端实现
- 创建封装好的
MRECWidget,通过AndroidView调用原生视图:
class MRECWidget extends StatelessWidget { final String adUnitId; const MRECWidget({super.key, required this.adUnitId}); @override Widget build(BuildContext context) { return AndroidView( // 与原生注册的标识完全匹配 viewType: "com.yourpackage/mrec_ad", // 向原生传递广告单元ID creationParams: {"adUnitId": adUnitId}, // 参数编解码方式与原生统一 creationParamsCodec: const StandardMessageCodec(), ); } }
- 在页面中直接使用这个Widget:
// 示例:在页面底部展示MREC广告 Scaffold( body: Column( children: [ const Expanded(child: Center(child: Text("页面主体内容"))), MRECWidget(adUnitId: "你的MREC广告单元ID"), ], ), )
额外说明
- Banner广告的实现逻辑和MREC基本一致,只需调整广告视图尺寸,比如调用
adView.setFormat(MaxAdFormat.BANNER)或修改布局参数。 - 必须在Android的Application类中初始化AppLovin SDK:
class MyApplication : Application() { override fun onCreate() { super.onCreate() AppLovinSdk.getInstance(this).initializeSdk { // SDK初始化完成后再加载广告更稳妥 } } }
- 记得在
AndroidManifest.xml中配置Application类,并添加INTERNET等必要权限。
内容的提问来源于stack exchange,提问作者saraaahhh
相关产品推荐
相关产品推荐

