Expo托管工作流集成react-native-google-mobile-ads失败求助
Expo托管工作流集成react-native-google-mobile-ads遇TypeError问题解决
问题描述
我已遵循最新指南在Expo托管工作流中集成react-native-google-mobile-ads,参考了Expo集成该库的相关问答内容,但调用interstitial.load()时始终触发以下错误:
ERROR TypeError: null is not an object (evaluating 'RNAppModule.eventsNotifyReady')
该错误关联到react-native-google-mobile-ads库的jest.setup.ts文件,目前不清楚具体原因及解决办法。
解决方案
确保广告库完成初始化后再执行操作
必须在调用任何广告加载方法前,完成库的初始化流程。在Expo环境中,建议在App启动时调用MobileAds.initialize(),并等待初始化完成后再加载广告:import { MobileAds } from 'react-native-google-mobile-ads'; import { useEffect } from 'react'; useEffect(() => { const initAndLoadAd = async () => { await MobileAds.initialize(); const interstitial = MobileAds().interstitial('你的插屏广告ID'); interstitial.load(); }; initAndLoadAd(); }, []);检查Expo插件配置是否正确
确认app.json或app.config.js中已添加react-native-google-mobile-ads的插件配置,并填写了正确的AdMob应用ID:{ "expo": { "plugins": [ [ "react-native-google-mobile-ads", { "androidAppId": "ca-app-pub-xxx~xxx", "iosAppId": "ca-app-pub-xxx~xxx" } ] ] } }配置完成后需执行
expo prebuild重新生成原生代码,或使用EAS构建自定义开发客户端——Expo Go无法完全支持该原生模块,不建议用于测试广告功能。修复Jest测试环境的模块模拟
若错误出现在测试场景中,说明RNAppModule未被正确模拟。在你的jest.setup文件中添加以下模拟代码:jest.mock('react-native-google-mobile-ads', () => ({ MobileAds: jest.fn(() => ({ interstitial: jest.fn(() => ({ load: jest.fn(), show: jest.fn() })) })), initialize: jest.fn() }));避免测试环境调用真实的原生模块方法。
验证依赖版本兼容性
检查react-native-google-mobile-ads与当前Expo SDK的版本是否匹配,优先使用库官方文档推荐的适配版本,版本不匹配可能导致原生模块未正确注册。
内容的提问来源于stack exchange,提问作者Muzly
相关产品推荐
相关产品推荐

