如何检测用户是否在我的应用上使用Adblocker?

时间:2018-02-24 19:42:56

标签: android admob adblock google-admob

我正在制作类似应用的水龙头,因此应用完全依赖广告,有没有办法检测用户是否使用广告拦截器?我想到试图ping谷歌广告服务器,看它是否可以ping服务器,这会工作吗?如果不是你建议采用什么方法?谢谢!

1 个答案:

答案 0 :(得分:0)

Ivan

引用here的答案

我知道广告拦截的一种方式(实际上在任何计算机上),他们编辑hosts文件以指向所有已知广告服务器的localhost。对于Android,它位于" etc / hosts"文件。

例如,我使用admob广告和我从自定义rom中获取的主机文件列出了下面的admob条目:

127.0.0.1 analytics.admob.com
127.0.0.1 mmv.admob.com
127.0.0.1 mm.admob.com
127.0.0.1 admob.com
127.0.0.1 a.admob.com
127.0.0.1 jp.admob.com
127.0.0.1 c.admob.com
127.0.0.1 p.admob.com
127.0.0.1 mm1.vip.sc1.admob.com
127.0.0.1 media.admob.com
127.0.0.1 e.admob.com

现在,只要进程尝试解析上述地址,就会在这种情况下将它们路由到左侧列出的地址(localhost)。

我在我的应用程序中执行的操作是检查此主机文件并查找任何admob条目,如果我发现任何我通知用户我已检测到广告拦截并告诉他们从那里删除admob条目并执行&# 39; t允许他们使用该应用程序。

如果他们没有看到广告会对我有什么好处呢?让他们免费使用该应用程序毫无意义。

以下是我如何实现这一目标的代码段:

BufferedReader in = null;

try 
{
    in = new BufferedReader(new InputStreamReader(
            new FileInputStream("/etc/hosts")));
    String line;

    while ((line = in.readLine()) != null)
    {
        if (line.contains("admob"))
        {
            result = false;
            break;
        }
    }
} 

我发誓所有广告支持的应用都应该检查此文件。您无需成为root用户即可访问它,但写入它可能是另一回事。

此外,不确定在基于Linux的操作系统上是否还有其他文件相同,但无论如何我们总能检查所有这些文件。

欢迎提出改善建议的任何建议。

此应用程序名为" Ad Free android"需要root访问权限,这意味着它很可能会更改hosts文件以实现其目标。