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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 16:57:15