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

Expo SDK 33升级后Facebook广告无法加载,报错1002求助

解决Expo SDK33升级后Facebook广告无法加载(错误码1002)的问题

先看你控制台抛出的错误——errorCode: 1002对应的提示是"Ad was re-loaded too frequently",这是Facebook Ads的限流警告:你的应用在短时间内请求广告的频次太高,触发了平台的频率限制。

结合你贴的代码,我注意到几个可能导致这个问题的细节:

1. Native Ads Manager预加载数量设置过高

你初始化Native Ads Manager时用了new FacebookAds.NativeAdsManager("2272791379702600_2272795453035526", 10);,第二个参数是预加载广告的数量。设置10个预加载广告对于绝大多数场景来说都太多了,尤其是如果你的页面会频繁挂载、卸载,很容易导致短时间内发起大量广告请求,触发限流。

2. Native Ad组件未绑定指定的AdsManager

你的AdScreenFacebook通过withNativeAd高阶组件包装,但没有指定使用你提前创建的adsManager,这会导致组件自动创建新的广告请求实例。再加上你同时渲染了BannerAd组件,多个独立的广告请求叠加起来,很容易触发频次限制。

另外,如果你的导航栈会重复创建AdScreen实例(比如切换页面再返回),外部初始化的adsManager可能会被重复关联,进一步加剧请求频率问题。

具体修复步骤

第一步:调整Native Ads Manager的预加载数量

把预加载数量降到合理值,比如2-3个,减少一次性发起的广告请求数:

const adsManager = new FacebookAds.NativeAdsManager("2272791379702600_2272795453035526", 2);

第二步:给Native Ad组件绑定指定的AdsManager

修改AdScreenFacebook的导出代码,通过withNativeAd的配置项指定使用你创建的adsManager,避免组件自动创建新的请求:

// AdScreenFacebook.js
// 确保这里能访问到全局的adsManager,或者把adsManager作为参数传入
export default FacebookAds.withNativeAd(AdScreenFacebook, {
  adsManager: adsManager,
});

这样就不需要再通过props传递adsManager了,组件会直接复用你初始化的实例。

第三步:避免重复初始化广告实例

把adsManager的初始化放到App的根组件(比如App.js)里,确保整个应用生命周期内只初始化一次,而不是在页面组件中重复创建:

// App.js
import * as FacebookAds from 'expo-ads-facebook';
// 全局单例的AdsManager
export const adsManager = new FacebookAds.NativeAdsManager("2272791379702600_2272795453035526", 2);

// 然后在AdScreenFacebook.js里导入
import { adsManager } from './App';

第四步:添加错误重试逻辑

在BannerAd的onError回调里,针对1002错误添加延迟重试机制,不要立即重新请求:

<FacebookAds.BannerAd 
  placementId="2272791379702600_2272803043034767" 
  type="standard" 
  onPress={() => console.log('click')} 
  onError={error => {
    console.log('error', error);
    if (error.nativeEvent.errorCode === 1002) {
      // 30秒后再尝试加载广告,避免再次触发限流
      setTimeout(() => {
        // 可以通过刷新组件状态来重新加载广告
        this.setState({ reloadAd: !this.state.reloadAd });
      }, 30000);
    }
  }} 
/>

记得给AdScreen组件添加reloadAd状态,用来触发广告组件的重新渲染。

额外注意点

  • 检查package.json里的expo-ads-facebook版本,SDK33对应的版本应该是~5.0.0,确保版本兼容。
  • 测试时不要频繁刷新页面,Facebook在测试环境的限流机制会更严格,尽量模拟真实用户的操作节奏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:06:48