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

使用google_mobile_ads插件显示原生广告遇NativeAdFactory找不到错误求助

解决google_mobile_ads中"Can't find NativeAdFactory with id: listTile"异常

这个异常的核心原因是:你加载原生广告时指定的listTile Factory ID,没有被正确注册到google_mobile_ads插件中。原生广告需要先注册自定义的NativeAdFactory实例,才能通过对应的ID调用生成广告视图。以下是具体解决步骤:

1. 实现自定义NativeAdFactory类

创建一个继承自NativeAdFactory的类,负责构建你的原生广告布局:

class ListTileNativeAdFactory extends NativeAdFactory {
  @override
  Widget createNativeAd(
    NativeAd nativeAd,
    Map<String, dynamic> customOptions,
    NativeAdViewController nativeAdViewController,
  ) {
    // 这里返回你需要的广告布局,示例用ListTile展示核心广告元素
    return ListTile(
      leading: AdImageView(ad: nativeAd),
      title: AdTextStyleView(
        ad: nativeAd,
        styleType: NativeAdTextStyle.title,
        text: nativeAd.headline,
      ),
      subtitle: AdTextStyleView(
        ad: nativeAd,
        styleType: NativeAdTextStyle.body,
        text: nativeAd.body,
      ),
      trailing: AdTextStyleView(
        ad: nativeAd,
        styleType: NativeAdTextStyle.callToAction,
        text: nativeAd.callToAction,
      ),
    );
  }
}

2. 注册NativeAdFactory

在页面初始化(比如initState)或全局初始化阶段,注册这个Factory,确保ID和异常中的listTile完全一致:

@override
void initState() {
  super.initState();
  // 注册Factory,ID必须和加载广告时的factoryId匹配
  MobileAds.instance.registerNativeAdFactory(
    'listTile',
    ListTileNativeAdFactory(),
  );
}

@override
void dispose() {
  // 组件销毁时注销Factory,避免内存泄漏
  MobileAds.instance.unregisterNativeAdFactory('listTile');
  super.dispose();
}

3. 加载广告时使用正确的Factory ID

创建NativeAd实例时,指定factoryId为listTile:

final nativeAd = NativeAd(
  adUnitId: '你的广告单元ID',
  factoryId: 'listTile', // 与注册的ID完全匹配
  request: const AdRequest(),
  listener: NativeAdListener(
    onAdLoaded: (ad) {
      // 广告加载成功,更新状态展示
    },
    onAdFailedToLoad: (ad, error) {
      ad.dispose();
      print('广告加载失败: $error');
    },
  ),
);

注意事项

  • Factory ID区分大小写,注册和使用时必须完全一致
  • 全局复用的Factory可以在main函数中注册,应用退出时统一注销
  • 自定义布局时,确保使用AdMob提供的AdImageView、AdTextStyleView等组件,避免广告合规问题

内容的提问来源于stack exchange,提问作者Jasmin Sojitra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 08:32:41