Android发布者应用广告Deep linking无法应用内打开问题
核心原因
Android WebView 的默认行为就是点击页面内<a>标签链接时,抛出Intent唤起系统默认浏览器处理,不会自动在当前WebView内加载目标链接。
你提到的纯文本形式链接可以在应用内打开,是TextView自动链接识别走了应用内路由逻辑,和WebView加载广告页的链接处理逻辑完全独立,这个效果不会自动生效,必须添加额外配置代码。
实现方案
- 第一步:给承载广告内容的WebView设置自定义
WebViewClient,重写链接拦截方法,强制链接在应用内处理,不抛给系统浏览器。
对应Java代码如下:webView.setWebViewClient(new WebViewClient() { // Android 7.0及以上版本走这个拦截 @Override public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { String targetUrl = request.getUrl().toString(); // 如果你要在当前广告WebView直接打开落地页,就用下面这行 view.loadUrl(targetUrl); // 如果你要跳转到自己应用内的专属网页Activity(比如你已有的AdDetailActivity),就注释上面一行,写自己的页面跳转逻辑,把targetUrl传给对应页面加载即可 return true; } // 兼容Android 7.0以下系统版本 @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } }); - 第二步:补全WebView基础配置,避免广告素材点击事件失效:
WebSettings webSettings = webView.getSettings(); // 大部分广告素材依赖JS实现渲染、点击逻辑,必须开启 webSettings.setJavaScriptEnabled(true); // 可选开启DOM存储,避免部分广告落地页加载异常 webSettings.setDomStorageEnabled(true);
配置说明
你贴出的AndroidManifest.xml不需要额外修改,不需要新增http/https类型的intent-filter——如果加了全局的网页链接过滤规则,你的应用会被加入系统浏览器选择列表,其他App打开网页时也会弹出唤起你的应用的选项,属于不必要的配置,只需要做好WebView端的链接拦截即可。
排错提示:如果配置完之后仍有部分广告点击跳外部浏览器,一般是广告素材做了特殊scheme的跳转触发,你可以在
shouldOverrideUrlLoading方法中打印所有触发跳转的url,针对性做拦截处理即可。
内容的提问来源于stack exchange,提问作者Mukul Kumar
相关产品推荐
相关产品推荐

