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

Expo SDK42安卓应用更新广告后Google Play上架包启动崩溃求助

问题排查与修复方案

1. 优先检查app.json的AdMob配置

Expo Go调试环境内置了AdMob基础配置,生产构建必须手动补充配置才可以正常运行:

  • 确认你已经在app.json的expo.android.config节点下添加了AdMob应用ID,示例:
{
  "expo": {
    "android": {
      "config": {
        "googleMobileAdsAppId": "你的正式AdMob应用ID"
      }
    }
  }
}

注意:这里不能用测试ID,必须填写你在AdMob后台申请的对应应用的正式应用ID,不是广告位ID

2. 给广告调用逻辑添加错误捕获

你当前的adFunction是异步函数,没有任何错误捕获逻辑,只要广告请求失败、广告无填充、重复调用等任意异常出现,都会直接触发应用崩溃,本地调试网络环境稳定、测试广告填充率100%所以不会触发,生产环境很容易遇到异常,修改代码如下:

const adFunction = async() => {
  try {
    // 先判断是否已经有广告在加载/展示,避免重复调用
    if (await AdMobInterstitial.isLoadedAsync() || await AdMobInterstitial.isShowingAsync()) {
      return
    }
    await AdMobInterstitial.setAdUnitID('上线时替换为正式插屏广告位ID');
    await AdMobInterstitial.requestAdAsync({ servePersonalizedAds: true});
    // 加载成功后再展示
    if (await AdMobInterstitial.isLoadedAsync()) {
      await AdMobInterstitial.showAdAsync();
    }
  } catch (e) {
    // 此处可添加自定义日志逻辑,不会导致应用崩溃
    console.log('广告加载失败', e)
  }
 }

3. 修复定时器的不合理调用

你当前在useEffect里直接用setInterval每隔45秒触发一次广告调用,完全没有判断上一次广告的执行状态,插屏广告是单例模式,重复调用请求/展示方法极容易导致状态冲突崩溃,建议调整为:

  • 不要用固定间隔触发,改为用户完成某个操作(比如返回页面、点击按钮)时触发
  • 如果必须用间隔,需要在回调里加状态判断,或者把setInterval替换为setTimeout,每次广告执行完成后再调度下一次

4. 检查混淆和权限配置

  • 如果你的构建开启了代码混淆,需要在app.json里添加AdMob的混淆规则,避免相关类被误删
  • 确认安卓权限配置已经添加了INTERNET、ACCESS_NETWORK_STATE,如果你的targetSdkVersion >=31,还需要添加com.google.android.gms.permission.AD_ID权限

5. 测试验证建议

不要直接上传到Google Play测试,可以先本地打生产环境的apk包安装测试,生产apk的表现和Google Play上架的包完全一致,能直接复现问题排查,不需要等Google Play审核。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 23:39:03