我的一个用户让猫从袋子里拿出来,告诉我他们正在使用我的一款免费应用程序,该应用程序通过广告获利,但他们使用广告拦截器拦截了广告。他们 mock 地告诉我这件事,好像我对此无能为力。
我能做点什么吗?有没有办法检测广告是否被屏蔽?
最佳答案
我知道广告拦截的一种工作方式(实际上在任何计算机上),他们编辑主机文件以指向所有已知广告服务器的 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
现在,只要进程尝试解析上述地址,它们就会被路由到它们左侧列出的地址(在这种情况下为本地主机)。
我在我的应用程序中所做的是检查此主机文件并查找任何 admob 条目,如果我发现任何我通知用户我已检测到广告拦截并告诉他们从那里删除 admob 条目并且不允许他们使用该应用程序。
毕竟,如果他们没有看到广告,这对我有什么好处?让他们免费使用该应用毫无意义。
这是我如何实现这一目标的代码 fragment :
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 访问权限,这意味着它很可能会更改主机文件以实现其目标。
关于android - 如何防止广告拦截器阻止应用程序上的广告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3452907/