如何防止广告拦截器阻止应用上的广告

Chr*_*rry 58 android ads adblock

我的一个用户让猫从袋子里拿出来告诉我他们正在使用我的一个免费应用程序,这个应用程序通过广告货币化,但是他们用广告拦截器阻止了广告.他们嘲笑地告诉我,好像我无能为力.

我能为此做些什么吗?有没有办法检测广告被阻止?

Iva*_*van 60

我知道广告拦截的一种方式(实际上在任何计算机上),他们编辑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
Run Code Online (Sandbox Code Playgroud)

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

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

如果他们没有看到广告,那对我有什么好处呢?没有必要让他们免费使用该应用程序.

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

        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;
            }
        }
    } 
Run Code Online (Sandbox Code Playgroud)

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

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

任何有关改善这一点的建议都是受欢

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

  • 您可能还需要检查以确保相关行未被注释掉.`if(line.contains("admob"))`将成为`if(line.contains("admob")&&!line.matches("^*#"))` (4认同)
  • 很高兴我不是唯一这样做的人...我感觉很糟糕,但与此同时,我不明白为什么如果我选择分享我的代码广告,有人必须阻止他们因此完全带走任何激励我必须首先免费分享我的个人代码.在我开始这样做之前,我真诚地考虑过只为iPhone推出应用程序. (3认同)

Jon*_*han 25

我这个问题的代码是: -

try {
    if (InetAddress.getByName("a.admob.com").getHostAddress().equals("127.0.0.1") ||
        InetAddress.getByName("mm.admob.com").getHostAddress().equals("127.0.0.1") ||
        InetAddress.getByName("p.admob.com").getHostAddress().equals("127.0.0.1") ||
        InetAddress.getByName("r.admob.com").getHostAddress().equals("127.0.0.1")) {
        //Naughty Boy - Punishing code goes here.
        // In my case its a dialog which goes to the pay-for version 
        // of my application in the market once the dialog is closed.
    }
} catch (UnknownHostException e) { } //no internet
Run Code Online (Sandbox Code Playgroud)

希望有所帮助.

  • -1因为可以通过将这些站点重定向到127.0.0.2或240.240.240.240来轻松攻击.AdFree允许您选择IP:D.当然我的意思是建设性的,而不是惩罚者 (12认同)

Bit*_*ank 9

作为开发人员,我们需要做出与用户同情的艰难工作,并在惩罚试图利用的少数人和遵守规则的许多人之间找到中间立场.移动广告是允许某人免费使用功能软件的合理方式.使用广告拦截技术的用户可能会被视为收入损失,但如果您看一下大局,也可以是那些在您喜欢的情况下宣传您的应用程序的人.在阻止广告的系统上运行更温和的方法是显示您自己的"住宅"广告.创建一个或多个横幅图像,并使用相同高度的ImageView(例如50dp)将其显示在与普通广告相同的位置.如果您成功收到广告,请将ImageView的可见性设置为View.GONE.您甚至可以创建一个计时器来循环浏览多个自家广告以引起用户的注意.点击您的广告可以将用户带到市场页面以购买完整版本.

  • 我怀疑使用广告拦截器的人是那种会免费购买你的应用程序的人 (3认同)

Byr*_*ock 5

您能检查一下您的应用中是否加载了广告吗?

广告拦截器的工作原理是阻止您的应用下载数据。您可以检查广告框架中数据的内容长度,以确保那里有数据。

如果没有数据,则抛出一条消息并退出或通过电子邮件警告您。

这可能不像您想象的那么大,因为只有一小部分人会屏蔽广告。