Android中Facebook插屏广告每7次滑动仅显示一次的问题排查
解决Facebook插屏广告仅显示一次的问题
嗨,我来帮你排查下这个插屏广告的问题~ 先梳理下你代码里的核心问题,再一步步给出修改方案:
问题根源
- 滑动计数变量没正确维护:你注释掉的
final int counter = 0是final修饰的局部变量,不仅没法修改,每次方法执行还会重置,完全起不到累计计数的作用。 - 插屏广告仅加载一次:当前代码只在
onCreate里调用了一次interstitialAd.loadAd(),广告展示后没有重新加载新的广告,导致后续触发时没有可用广告。 - 页面切换监听逻辑不完整:你贴的代码里
OnPageChangeListener没写完,缺少滑动计数和广告触发的核心逻辑。
具体修改方案
步骤1:添加正确的滑动计数成员变量
在MainActivity类里添加一个成员变量来记录滑动次数,不要用final修饰:
public class MainActivity extends AppCompatActivity { // ... 其他已有的成员变量 private int slideCounter = 0; // 用于累计ViewPager滑动次数 // ... }
步骤2:完善页面切换监听逻辑
完整实现ViewPager.OnPageChangeListener,每次页面切换时累计次数,达到7次就触发广告,同时处理广告展示后的重新加载:
private final ViewPager.OnPageChangeListener mOnPageChangeListener = new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { // 此方法无需处理 } @Override public void onPageSelected(int position) { // 每次切换页面,计数+1 slideCounter++; // 保留你原来的分享意图更新逻辑 setShareIntent(position); // 检查是否达到7次滑动触发条件 if (slideCounter >= 7) { // 先判断广告是否已加载完成 if (interstitialAd != null && interstitialAd.isAdLoaded()) { interstitialAd.show(); // 展示后重置计数 slideCounter = 0; // 立即加载下一条广告,保证下次触发时有可用广告 interstitialAd.loadAd(); } else { // 广告未加载成功也重置计数,避免一直累计 slideCounter = 0; // 尝试重新加载广告 if (interstitialAd != null) { interstitialAd.loadAd(); } } } } @Override public void onPageScrollStateChanged(int state) { // 此方法无需处理 } };
步骤3:优化广告生命周期,避免内存泄漏
在Activity销毁时销毁广告资源,防止内存泄漏:
@Override protected void onDestroy() { super.onDestroy(); if (adView != null) { adView.destroy(); } if (interstitialAd != null) { interstitialAd.destroy(); } }
可选:添加广告加载回调(方便调试)
给插屏广告添加加载回调,能直观看到广告加载状态,也能在广告关闭后自动加载新广告:
// 在onCreate初始化插屏广告时添加 interstitialAd.setAdListener(new InterstitialAdListener() { @Override public void onAdLoaded(Ad ad) { // 广告加载成功的提示(可选) Log.d("FBAd", "插屏广告加载完成"); } @Override public void onAdFailed(Ad ad, AdError adError) { // 打印加载失败原因,方便排查问题 Log.e("FBAd", "插屏广告加载失败: " + adError.getErrorMessage()); } @Override public void onInterstitialDismissed(Ad ad) { // 广告关闭后立即加载下一条,确保后续触发时有广告可用 interstitialAd.loadAd(); } // 其他回调方法按需实现即可 @Override public void onAdClicked(Ad ad) {} @Override public void onAdImpression(Ad ad) {} @Override public void onInterstitialDisplayed(Ad ad) {} }); interstitialAd.loadAd();
这样修改后,每次ViewPager滑动都会累计次数,达到7次时如果广告已加载就会展示,展示后重置计数并自动加载新广告,就能实现你想要的“每7次滑动展示一次插屏广告”的效果了。
内容的提问来源于stack exchange,提问作者Bhavesh
相关产品推荐
相关产品推荐

