Ironsource Banner仅在主Activity显示 其他Activity实现后无法展示问题问询
错误根因
- 重复初始化Ironsource SDK:你在所有Activity中都调用了
IronSource.init(),该SDK全局仅需初始化1次,多次调用无广告单元参数的init方法就会触发第一个报错。 - Banner加载请求重复:你的代码中同一banner实例连续调用了两次
loadBanner方法,同时前一个Activity的banner加载任务未结束时,新Activity又触发加载请求,就会触发第二个报错。 - 插屏监听重复设置:每个Activity都重新设置插屏广告监听器,会导致回调逻辑错乱。
修正方案
- 全局初始化SDK
新建自定义Application类,在其onCreate生命周期中仅执行一次Ironsource初始化,后续所有Activity中不要再调用init方法:
public class MyApp extends Application { @Override public void onCreate() { super.onCreate(); // 全局仅初始化一次 IronSource.init(this, "APP_ID"); IronSource.setMetaData("Facebook_IS_CacheFlag","IMAGE"); // 全局仅设置一次插屏监听器即可,不需要每个Activity都设置 IronSource.setInterstitialListener(new InterstitialListener() { @Override public void onInterstitialAdReady() { // 不要在就绪回调里直接触发展示,建议在业务需要展示的位置调用showInterstitial } @Override public void onInterstitialAdLoadFailed(IronSourceError ironSourceError) {} @Override public void onInterstitialAdOpened() {} @Override public void onInterstitialAdClosed() { // 插屏关闭后可预加载下一次的插屏 IronSource.loadInterstitial(); } @Override public void onInterstitialAdShowSucceeded() {} @Override public void onInterstitialAdShowFailed(IronSourceError ironSourceError) {} @Override public void onInterstitialAdClicked() {} }); // 预加载插屏 IronSource.loadInterstitial(); } }
记得在AndroidManifest.xml的application标签中配置android:name=".MyApp"。
- 修正单个Activity中的Banner逻辑
每个Activity中仅保留一次banner加载调用,同时在页面销毁时销毁banner实例终止未完成的请求:
public class OtherActivity extends AppCompatActivity { private IronSourceBannerLayout bannerLayout; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_other); FrameLayout bannerContainer = findViewById(R.id.adview); bannerLayout = IronSource.createBanner(this, ISBannerSize.SMART); FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams( FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.WRAP_CONTENT ); bannerContainer.addView(bannerLayout, layoutParams); // 仅调用一次loadBanner即可,删除重复的加载调用 IronSource.loadBanner(bannerLayout, "DefaultBanner"); } @Override protected void onDestroy() { super.onDestroy(); // 页面销毁时销毁banner,终止未完成的加载请求 if (bannerLayout != null) { IronSource.destroyBanner(bannerLayout); } } }
内容的提问来源于stack exchange,提问作者Ejaz Malik
相关产品推荐
相关产品推荐

