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

如何用单个WebView加载双URL并前置插页广告?解决广告后空白问题

解决插页广告关闭后WebView空白的问题

我来帮你梳理下问题根源和修改方案:核心问题是你原来的逻辑是直接通过Intent传URL并立即加载,但加入广告后,需要把URL加载的时机延后到广告关闭的回调中,同时要确保URL能正确传递、WebView配置无误。

下面分主页和WebView页面给出具体修改代码:


一、主页(MainActivity)修改

原来的按钮点击是直接跳转WebView页面,现在改成「点击按钮→展示插页广告→广告关闭后跳转并传递URL」的逻辑:

import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.InterstitialAd;
import com.google.android.gms.ads.InterstitialAdLoadCallback;
import com.google.android.gms.ads.MobileAds;
import com.google.android.gms.ads.FullScreenContentCallback;
import com.google.android.gms.ads.AdError;

public class MainActivity extends AppCompatActivity {
    private InterstitialAd mInterstitialAd;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 初始化广告SDK
        MobileAds.initialize(this, initializationStatus -> {});
        loadInterstitialAd();

        // 按钮1:对应第一个URL
        findViewById(R.id.btn_open_url1).setOnClickListener(v -> {
            String targetUrl = "https://www.your-first-url.com";
            showAdThenOpenWebView(targetUrl);
        });

        // 按钮2:对应第二个URL
        findViewById(R.id.btn_open_url2).setOnClickListener(v -> {
            String targetUrl = "https://www.your-second-url.com";
            showAdThenOpenWebView(targetUrl);
        });
    }

    // 加载插页广告
    private void loadInterstitialAd() {
        AdRequest adRequest = new AdRequest.Builder().build();
        InterstitialAd.load(this, "你的广告单元ID", adRequest,
            new InterstitialAdLoadCallback() {
                @Override
                public void onAdLoaded(@NonNull InterstitialAd interstitialAd) {
                    mInterstitialAd = interstitialAd;
                    // 设置广告关闭后的回调
                    mInterstitialAd.setFullScreenContentCallback(new FullScreenContentCallback() {
                        @Override
                        public void onAdDismissedFullScreenContent() {
                            // 广告关闭后,重新加载下一次的广告(可选,提升后续展示率)
                            loadInterstitialAd();
                        }

                        @Override
                        public void onAdFailedToShowFullScreenContent(@NonNull AdError adError) {
                            mInterstitialAd = null;
                            loadInterstitialAd();
                        }
                    });
                }

                @Override
                public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) {
                    mInterstitialAd = null;
                }
            });
    }

    // 展示广告后打开WebView页面
    private void showAdThenOpenWebView(String targetUrl) {
        if (mInterstitialAd != null) {
            // 先展示广告,关闭后再跳转
            mInterstitialAd.show(MainActivity.this);
            // 这里可以用全局变量或者临时存储URL,不过更稳妥的是在广告回调中传递?不,其实可以直接在show之后,等关闭回调触发时跳转,哦不对,应该把URL和广告绑定?不对,其实可以这样:
            // 哦,刚才的回调里没有URL参数,所以可以用一个临时变量或者修改回调方式,比如用自定义的接口?或者更简单的,把URL存在一个成员变量里,然后在onAdDismissedFullScreenContent中使用
            // 修正:把targetUrl存为成员变量,或者用lambda捕获
            String finalTargetUrl = targetUrl;
            mInterstitialAd.setFullScreenContentCallback(new FullScreenContentCallback() {
                @Override
                public void onAdDismissedFullScreenContent() {
                    openWebViewActivity(finalTargetUrl);
                    loadInterstitialAd();
                }

                @Override
                public void onAdFailedToShowFullScreenContent(@NonNull AdError adError) {
                    openWebViewActivity(finalTargetUrl);
                    mInterstitialAd = null;
                    loadInterstitialAd();
                }
            });
            mInterstitialAd.show(MainActivity.this);
        } else {
            // 广告未加载完成,直接跳转
            openWebViewActivity(targetUrl);
            // 同时重新加载广告
            loadInterstitialAd();
        }
    }

    // 跳转WebView页面的通用方法
    private void openWebViewActivity(String url) {
        Intent intent = new Intent(MainActivity.this, WebViewActivity.class);
        intent.putExtra("KEY_TARGET_URL", url);
        startActivity(intent);
    }
}

二、WebView页面(WebViewActivity)修改

这里要确保WebView配置正确,并且在收到URL后能正常加载:

import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class WebViewActivity extends AppCompatActivity {
    private WebView mWebView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_web_view);

        mWebView = findViewById(R.id.web_view);
        configureWebView();

        // 获取主页传递的URL并加载
        String targetUrl = getIntent().getStringExtra("KEY_TARGET_URL");
        if (targetUrl != null && !targetUrl.isEmpty()) {
            mWebView.loadUrl(targetUrl);
        }
    }

    // 配置WebView的必要设置
    private void configureWebView() {
        WebSettings webSettings = mWebView.getSettings();
        // 开启JavaScript(很多网页需要)
        webSettings.setJavaScriptEnabled(true);
        // 开启DOM存储(避免部分网页加载异常)
        webSettings.setDomStorageEnabled(true);
        // 设置WebViewClient,避免跳转到系统浏览器
        mWebView.setWebViewClient(new WebViewClient());
        // 支持缩放(可选)
        webSettings.setSupportZoom(true);
        webSettings.setBuiltInZoomControls(true);
    }

    // 处理返回键,让WebView返回上一页
    @Override
    public void onBackPressed() {
        if (mWebView.canGoBack()) {
            mWebView.goBack();
        } else {
            super.onBackPressed();
        }
    }
}

关键注意事项

  1. 替换代码中的你的广告单元ID为你在AdMob后台申请的真实ID
  2. 确保AndroidManifest.xml中添加了网络权限:
    <uses-permission android:name="android.permission.INTERNET" />
    
  3. 广告加载是异步的,所以我们处理了「广告未加载完成时直接跳转」的情况,避免用户点击按钮无响应
  4. 核心修复点:把WebView的loadUrl操作,绑定到广告的onAdDismissedFullScreenContent回调中,确保只有广告关闭后才开始加载URL

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:12:58