集成Google AdMob到Expo项目遇app.json警告及广告显示问题求助
解决Expo中react-native-google-mobile-ads的警告及实体机测试广告不显示问题
一、解决"react-native-google-mobile-ads"配置警告
- 问题原因:Expo配置规范要求第三方插件的配置项必须嵌套在
app.json的expo对象内部,而非根层级。你当前将react-native-google-mobile-ads放在根层级,导致expo-doctor判定为无效配置并抛出警告。 - 修复步骤:
- 打开
app.json,将根层级的react-native-google-mobile-ads配置移动到expo.plugins数组中 - 正确配置示例:
{ "expo": { // 其他Expo核心配置(如name、slug等) "plugins": [ [ "react-native-google-mobile-ads", { "android_app_id": "ca-app-pub-XXXXXXXXXXXXXXXX~XXXXXXXXXX" } ] ] } } - 重新运行
npx expo-doctor,警告即可消除
- 打开
- 警告影响:该警告会导致AdMob的配置无法被正确读取,是实体机广告不显示的潜在诱因之一,但不会直接导致应用崩溃。
二、解决实体Android手机无法显示测试广告的问题
结合模拟器正常、实体机异常的表现,按以下步骤排查:
- 确认实体机网络状态:测试广告需要稳定的网络连接,建议切换至Wi-Fi或信号良好的移动数据重试
- 验证测试广告ID:确保使用AdMob官方提供的测试横幅ID(
ca-app-pub-3940256099942544/6300978111),不要使用自己的正式广告ID - 添加实体机为测试设备:
- 安装打包后的APK,通过Logcat日志查找包含
Use RequestConfiguration.Builder.setTestDeviceIds()的条目,提取其中的设备ID - 在代码中配置测试设备:
import { MobileAds } from 'react-native-google-mobile-ads'; MobileAds().setRequestConfiguration({ testDeviceIds: ['你的实体机测试ID'], });
- 安装打包后的APK,通过Logcat日志查找包含
- 检查权限配置:确保
app.json中已添加必要的网络权限:{ "expo": { "android": { "permissions": ["INTERNET", "ACCESS_NETWORK_STATE"] } } } - 调整ProGuard规则(若启用):如果打包时开启了ProGuard,需在
android/app/proguard-rules.pro中添加规则避免AdMob代码被混淆:-keep class com.google.android.gms.ads.** { *; } -keep class com.google.android.gms.common.** { *; }
内容的提问来源于stack exchange,提问作者Jan van der Heijde
相关产品推荐
相关产品推荐

