React Native集成Admob遇RNGoogleMobileAdsModule找不到错误求助
React Native Admob集成:RNGoogleMobileAdsModule找不到问题排查与解决
核心问题分析
你遇到的Invariant Violation: TurboModuleRegistry.getEnforcing(...): 'RNGoogleMobileAdsModule' could not be found错误,本质是原生模块未正确适配项目环境——用npx create-react-native-app创建的是Expo Managed项目,无法直接使用原生依赖的react-native-google-mobile-ads库,必须切换为Expo官方适配的Admob解决方案。
分步解决方案
1. 替换为Expo兼容的Admob库
卸载原有的原生Admob库,安装Expo官方提供的expo-ads-admob:
# 若之前安装过react-native-google-mobile-ads,先卸载 npm uninstall react-native-google-mobile-ads # 安装expo适配库 npx expo install expo-ads-admob
2. 修正app.json配置
在app.json的expo字段下添加Admob相关配置,替换原有无效配置:
"expo": { // 其他原有配置 "android": { "config": { "googleMobileAdsAppId": "ca-app-pub-xxxxxxxxxxxxxxxx~yyyyyyyyyy" } }, "ios": { "config": { "googleMobileAdsAppId": "ca-app-pub-xxxxxxxxxxxxxxxx~yyyyyyyyyy" }, "infoPlist": { "NSUserTrackingUsageDescription": "此应用使用广告标识符为您提供个性化广告内容" } }, "plugins": [ [ "expo-ads-admob", { "userTrackingPermission": "此应用使用广告标识符为您提供个性化广告内容" } ] ] }
注意:替换googleMobileAdsAppId为你的Admob后台应用ID,iOS必须添加用户跟踪权限描述
3. 重写测试广告组件代码
将你的Copybase.js替换为Expo适配的广告组件实现,以横幅广告为例:
import React from 'react'; import { View } from 'react-native'; import { BannerAd, BannerAdSize, TestIds } from 'expo-ads-admob'; export default function Copybase() { return ( <View style={{ flex: 1, justifyContent: 'flex-end', width: '100%' }}> <BannerAd unitId={TestIds.BANNER} size={BannerAdSize.BANNER} onAdLoaded={() => console.log('广告加载成功')} onAdFailedToLoad={(error) => console.error('广告加载失败:', error)} /> </View> ); }
发布时需将TestIds.BANNER替换为真实广告单元ID
4. 清除缓存并重启项目
执行以下命令重置项目环境,避免缓存导致的配置不生效:
npx expo r -c
重启Expo开发服务器后,重新加载项目。
5. 预构建项目的额外检查
如果你的项目已执行过npx expo prebuild转为Bare Workflow,需验证原生配置:
- Android:检查
android/app/src/main/AndroidManifest.xml是否包含Admob应用ID的meta-data标签 - iOS:检查
ios/[项目名]/Info.plist是否存在GADApplicationIdentifier字段和ATT权限描述
内容的提问来源于stack exchange,提问作者Priyanshu kuntal
相关产品推荐
相关产品推荐

