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

React Native Expo集成Google AdMob报错:Invariant Violation原生组件异常

解决Expo环境下集成AdMob出现Invariant Violation的问题

早上好!我看你在Expo SDK环境里尝试用react-native-admob集成广告时碰到了「Invariant Violation: native component not found」的错误,这其实是Expo环境的特性导致的,我来给你讲清楚原因和解决办法:

问题根源

Expo Go(也就是你平时用的Expo默认客户端)是一个预打包的应用,只支持Expo官方维护的、不需要原生代码配置的库。而react-native-admob是一个依赖iOS/Android原生代码的第三方库,直接在Expo Go里运行的话,客户端找不到对应的原生组件实现,所以会抛出这个错误。

解决方案

方案一:使用Expo官方的AdMob库(推荐)

Expo有自己适配好的广告库expo-ads-admob,完全兼容Expo的托管工作流,不需要折腾原生配置,步骤如下:

  • 先卸载你之前装的react-native-admob:
    npm uninstall react-native-admob
    
  • 安装Expo官方的AdMob库:
    npx expo install expo-ads-admob
    
  • 修改你的代码,替换成Expo的组件(用法和你之前的代码几乎一致):
    import { AdMobBanner } from 'expo-ads-admob';
    
    // ...
    
    render() {
      return (
        <AdMobBanner
          adSize="fullBanner"
          adUnitID="ca-app-pub-123456789/12321312"
          testDevices={[AdMobBanner.simulatorId]}
          onAdFailedToLoad={error => console.error(error)}
        />
      );
    }
    
  • 重新启动项目:npx expo start,用Expo Go打开就能正常加载广告了。

方案二:转为裸工作流使用react-native-admob

如果你一定要用react-native-admob这个库,那需要把Expo项目转为裸工作流(也就是生成原生项目文件),步骤如下:

  • 执行预构建命令生成iOS/Android原生项目:
    npx expo prebuild
    
  • 按照react-native-admob的官方文档,分别配置iOS和Android的原生环境(比如在Info.plist里添加AdMob的App ID,在AndroidManifest.xml里配置权限等)
  • 最后用原生方式启动项目:
    # iOS
    npx expo run:ios
    # Android
    npx expo run:android
    

额外注意

  • 测试阶段记得使用AdMob的测试广告ID,避免触发真实广告的限制;
  • 如果用方案一,确保你的Expo SDK版本和expo-ads-admob版本兼容,可以查看Expo官方文档确认版本匹配情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:58:05