gpt4 book ai didi

android - 在 WebView 中完成 AdBlock

转载 作者:可可西里 更新时间:2023-11-01 11:42:36 25 4
gpt4 key购买 nike

我即将在我的 Android 应用中推出 WebView AdBlocking。我想知道这是否会有效地阻止广告,或者是否还有更多我没有修改的 Webview 本身要做的事情。基本上我有一个存储在 Android Assets 中的主机文件,其中列出了数百个广告服务器站点。我将此文件读入我的 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);
}

还有什么需要做的吗?或者就是这样?是否需要保留白名单,或者假设我的广告服务器列表是最新的,这通常会起作用吗?

最佳答案

此实现与"whitelist" feature in Cordova 基本相同.他们还使用 shouldInterceptRequest 来阻止对非白名单网站的请求。这种方法有已知的简写形式,例如它不会捕获通过 WebSockets 协议(protocol)完成的请求(请参阅 this book excerpt ),但通常它是 recommended approach (在该文档中查找 shouldInterceptRequest)。

为了做得更好,您需要自己加载所有内容(使用一些 HTTP 客户端),过滤和清理内容,然后将结果传递给 WebView 以便呈现。例如,这就是 GMail Android 应用程序的工作方式(它们在服务器上进行实际清理,但也可以在设备上进行)。

关于android - 在 WebView 中完成 AdBlock,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35682986/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com