我在Google Play上发布了我的android应用,就像你们中的许多人一样。我知道许多用户使用广告拦截程序来阻止我的AdMob加载并显示插入式广告。由于广告是我花了几个小时在电脑前编写我的应用程序的原因,我认为我的用户避开它们是不公平的。那么,有没有什么地方我可以检测到我的广告被屏蔽了( 100%,这是危险的假阳性)?是否有ad.blocker应用程序包名称的列表,所以如果我的应用程序检测到其中之一,则停止显示消息,如“已安装总广告拦截程序。此应用程序将不会运行”或类似的消息。你认为这是可能的,还是说这是一场失败的战争?
发布于 2018-04-17 21:04:03
解决“你认为这是可能的还是失败的战争?”问题的一部分:
即使有可能检测到广告拦截器,并在它们存在的情况下采取“规避行动”,这样做可能也不是最有意义的。
假设简单地显示广告的收入远远低于点击时的收入,那么当广告拦截程序存在时拒绝运行,或者(最好是)当广告实际上被阻止时,似乎不太可能对收入产生很大影响:遇到这种拒绝运行的广告而麻烦地阻止广告的人可能会:
相反,专注于应用程序的其他盈利方式可能会更好:
发布于 2018-05-14 12:34:38
您可以在AdView对象上设置listener,以便在广告加载失败等情况下进行检测。在你的代码部分可以检测到广告是否在过去10分钟内(例如)没有加载,并禁用一些应用程序功能或完全终止应用程序。这将解决AdBlocker的问题,关闭WiFi/移动数据和网络级拦截器。
另一方面,你必须决定是否值得拒绝没有网络连接的用户使用你的应用程序。我猜你还可以向用户显示一个友好的“提醒”或者类似的东西。不管怎样,这是一种选择
发布于 2020-04-28 07:21:21
如果设备连接到网络,我尝试通过pinging来解决此问题。
static boolean adblockcheck(Context con, @SuppressWarnings("SameParameterValue") String link) {
ConnectivityManager connMgr = (ConnectivityManager) con.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = Objects.requireNonNull(connMgr).getActiveNetworkInfo();
if(networkInfo != null && networkInfo.isConnected()){
try {
final String command = "ping -c 1 "+ link;
//admob.com ping success, return true
return Runtime.getRuntime().exec(command).waitFor() == 0;
} catch (InterruptedException | IOException e) {
e.printStackTrace();
// admob.com ping error, return false
return false;
}
} else {
//No network connection? return true
return true;
}
}使用
if(!adblockcheck(this,"admob.com")){
// do something
}也许这会有帮助
https://stackoverflow.com/questions/49876455
复制相似问题