【发布时间】:2016-06-11 12:20:36
【问题描述】:
我即将在我的 Android 应用中推出 WebView AdBlocking。我想知道这是否会有效地阻止广告,或者在我尚未修改的 Webview 本身中是否还有更多工作要做。基本上我有一个存储在 Android 资产中的主机文件,其中列出了数百个广告服务器站点。我将此文件读入我的 AdBlocker,然后将其应用到 WebViewClient 中,如下所示:
// AdBlocker.isAdURL(String url)
public Boolean isAdURL(String url){
Boolean retValue = false;
if ((url == null) || (url.isEmpty()))
return false;
if ((adServers == null)|| (adServers.size() <1))
return false;
try{
String domainName = getUrlsDomain(url);
if (adServers.contains(domainName)) {
retValue = true;
}
} catch(URISyntaxException e){
}
return retValue;
}
而且我只在 WebViewClient 中使用如下:
@Deprecated
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
if (adBlocker.isAdURL(url)) {
ByteArrayInputStream nada = new ByteArrayInputStream("".getBytes());
return new WebResourceResponse("text/plain", "utf-8", nada);
}
return super.shouldInterceptRequest(view, url);
}
同样:
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
if (adBlocker.isAdURL(request.getUrl().toString())) {
ByteArrayInputStream nada = new ByteArrayInputStream("".getBytes());
return new WebResourceResponse("text/plain", "utf-8", nada);
}
}
return super.shouldInterceptRequest(view, request);
}
还有什么需要做的吗?或者就是这样?是否需要保留白名单,或者假设我的广告服务器列表是最新的,这通常会起作用吗?
【问题讨论】:
-
你能发布你的 getUrlsDomain(url) 函数吗? --> 没关系,在这里找到答案:link
-
希望这个赞对你有帮助。它非常适合我:stackoverflow.com/a/52341184/8197867