views:

182

answers:

4

One of my users let the cat out of the bag and told me they were using one of my free apps, which is monetized by ads, but they were blocking the ads with an ad blocker. They told me this mockingly, as if I can't do anything about it.

Can I do something about it? Is there a way to detect that ads are being blocked?

A: 

There is nothing you can do that your users can't do better.

The only thing that comes to mind as remotely effective is to make the ads an inextricable part of the program, so that if they're blocked the user cannot make sense of/interact with the application.

Borealid
Isn't there a way to detect that ads are being blocked?
Scienceprodigy
No. Whatever you do, the ad blocker can get more sophisticated. It's a cat-and-mouse game, and they have the advantage.
Borealid
Well, we could develop an anti-ad blocker that detects ad blocker programs. We could make it open source so all know ad-blockers could be added to the list.
Scienceprodigy
And when an ad blocker spoofs the name of a commercially successful app?
Borealid
How would it do that? You can't change the package name of an installed app on the fly.
Scienceprodigy
+3  A: 

Can you check to see if the ad loaded in your app?

Ad blockers work by preventing your app from downloading data. You could check the content length of the data in your ad frame to make sure there is data there.

If there is no data throw up a message and exit or warn you with an email.

It might not be as big an issue as you think since only a small percentage of people block ads.

Byron Whitlock
A content blocker could "serve" long blank pages to your app instead of ads.
Borealid
It seems that the ad blocker blocks http requests to known ad servers. Couldn't we check if the request was even made? That seems different from the no-fill situation.
Scienceprodigy
@Scienceprodigy yes. You could do a head request to your ad server and check the response headers. If the request wasn't blocked, you know that there is connectivity to the ads. This might help with the fill rate issue.
Byron Whitlock
+1  A: 

I think it depends on the content provider for the ads. I know the AdMob SDK provides a callback when an ad request fails. I suspect that you might be able to register for this, then check for a connection in the callback - if there is a connection and you did not receive an ad - take note, if it happens more than once or twice, chances are likely your ads are being blocked. I have not worked with the AdSense for Mobile toolset from Google but it wouldn't surprise me if there was a similar callback mechanism.

nEx.Software
I'm already implementing this on another app that uses Quattro, backed up by AdMob because of Quattro's low fill rate. When Quattro fails to serve an ad, I serve an AdMob ad. But how would I know if it's because of ad blocking vs. bad fill rate?
Scienceprodigy
It doesn't look like there is any way to distinguish between a no-fill and blocked ad without resorting to other means such as checking for known ad-blocking applications.
nEx.Software
A: 

This is an extension of a previous answer. The user has informed me that the app they are using is called AdFree Android. It can be found on the market. The app says it works by "nullifying requests to known hostnames serving ads."

I suggest that if you monetize any of your apps with ads, you check at startup for this program and give the user a nasty message, then terminate your app.

Scienceprodigy