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

Expo React Native安卓应用InterstitialAd加载失败及初始化异常求助

问题解决:React Native Expo 中 Google Mobile Ads 初始化重复+广告加载失败

一、初始化重复执行的修复

初始化代码执行两次是因为Expo开发环境默认启用了React StrictMode,会触发副作用函数重复执行(生产环境会自动恢复正常)。只需将初始化逻辑放到useEffect中并添加空依赖数组,确保仅执行一次:

// App.js 修改后的初始化代码
import { useEffect } from 'react';
import { mobileAds } from 'react-native-google-mobile-ads';

function App() {
  useEffect(() => {
    mobileAds().initialize()
      .then(adapterStatuses => {
        console.log('Mobile ads initialized!', adapterStatuses);
      })
      .catch(error => {
        console.error('Error initializing mobile ads:', error);
      });
  }, []); // 空依赖数组确保仅在组件挂载时执行一次

  // 其他组件逻辑...
}

如果需要在开发环境验证单次执行效果,可暂时移除App组件外层的StrictMode包裹,但上线前建议恢复(StrictMode有助于提前发现组件潜在问题)。

二、广告无法加载/展示的排查方案

1. 确认测试广告ID的正确性

必须使用Google官方提供的测试广告ID,避免个人正式ID因未通过审核、无广告填充等原因无法加载:

  • 安卓测试奖励广告ID:ca-app-pub-3940256099942544/5224354917
  • 安卓测试插屏广告ID:ca-app-pub-3940256099942544/1033173712

2. 钩子用法规范(以useRewardedAd为例)

必须监听广告加载状态,仅在isLoaded为true时调用show(),同时监听加载失败事件获取具体错误信息:

// reward.js 正确示例代码
import { useEffect } from 'react';
import { useRewardedAd } from 'react-native-google-mobile-ads';

const REWARDED_TEST_ID = 'ca-app-pub-3940256099942544/5224354917';

function RewardScreen() {
  const { adLoaded, adFailedToLoad, isLoaded, load, show } = useRewardedAd(REWARDED_TEST_ID);

  // 监听加载状态
  useEffect(() => {
    if (adLoaded) {
      console.log('奖励广告加载成功');
    }
    if (adFailedToLoad) {
      console.error('广告加载失败原因:', adFailedToLoad); // 关键:获取具体错误信息
    }
  }, [adLoaded, adFailedToLoad]);

  // 加载广告
  const handleLoad = () => {
    if (!isLoaded) load();
  };

  // 展示广告(仅在加载完成后触发)
  const handleShow = () => {
    if (isLoaded) show();
    else console.log('广告未加载完成,无法展示');
  };

  return (
    <>
      <button onPress={handleLoad}>加载奖励广告</button>
      <button onPress={handleShow} disabled={!isLoaded}>展示广告</button>
    </>
  );
}

3. 验证配置正确性

确保app.json中插件配置格式正确:

{
  "expo": {
    "plugins": [
      [
        "react-native-google-mobile-ads",
        {
          "android_app_id": "ca-app-pub-xxxxxxxxxxxxxxxx~yyyyyyyyyy" // 替换为你的AdMob安卓APP ID
        }
      ]
    ]
  }
}

无需手动修改AndroidManifest.xml,Expo插件会自动注入必要配置。

4. 网络与环境检查

  • 测试设备需能正常访问Google服务,国内设备需确保网络环境可连接AdMob服务器;
  • 禁止在模拟器离线模式下测试,确保网络连接正常;
  • 避免使用root/越狱设备测试,部分设备会被AdMob屏蔽。

5. 版本兼容性验证

检查react-native-google-mobile-ads与当前Expo SDK版本是否兼容,例如Expo SDK 49需对应插件版本^12.1.0以上,版本不匹配可能导致底层API调用失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 00:27:47