You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:如何在Flutter中用PlatformView显示AppLovin_Max的MREC与Banner广告

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 11:05:11