Android App – Adblocker entdecken
In diesem Artikel zeige ich euch eine Möglichkeit wie man Adblocker entdecken kann. Ein wichtiges Code Schnipsel für jeden einen App Entwickler, der von der Werbung abhängig ist. Nichts ist ärgerlicher, als wenn Kunden die durch Werbung finanzierte gratis App durch Adblocker unterwandern.
Android App – Adblocker entdecken
Was wäre die Alternative zu Ads? Eine kostenpflichtige App? Leider funktionieren in den App Stores nur Apps mit Werbung beziehungsweise In-App Käufen. Setzt man ausschließlich auf dieses Modell der Einnahmen, dann muss man auch sicherstellen, dass dieses System nicht manipuliert wird. Adblocker Apps verhindern die Anzeige von Werbung die von externer Stelle geladen wird. Das funktioniert zum Beispiel so:
- der Adblocker manipuliert die /etc/hosts Datei
- dort werden alle Domains von Werbenetzwerken (wie beispielsweise Admob) auf die lokale Adresse (127.0.0.1 bzw. localhost) umgeleitet
- das Ergebnis sind leere Werbeflächen
Um die /etc/hosts Datei zu bearbeiten benötigt man root Rechte. Anders aber beim auslesen, das darf man in jeder App ohne weitere Rechte. Genau den Umstand machen wir uns zunutze.
Manipulierte /etc/hosts entdecken
Da wir in einer Android App die hosts Datei recht einfach auslesen können steht es uns frei dort nach verdächtigen Zeilen zu suchen. Der folgende Code demonstriert eine solche Überprüfung:
//check adblocker boolean adblocker = false; BufferedReader in = null; try { in = new BufferedReader(new InputStreamReader(new FileInputStream("/etc/hosts"))); String line; while ((line = in.readLine()) != null) { if (line.contains("admob")) { adblocker = true; break; } } } catch(IOException e) { Log.d("msg", e.getMessage()); } //adblocker detected? if(adblocker) { Intent intent = new Intent(MainActivity.this, AdBlockerActivity.class); MainActivity.this.startActivity(intent); }
In einem try/catch Block lesen wir die /etc/hosts Datei Zeile für Zeile aus. Sofern eine Zeile admob (Admob ist das standard Werbenetzwerk von Google für mobile Geräte) enthält können wir davon ausgehen, dass es sich hier um einen adblocker handelt. Welchen anderen Grund sollte es geben, dass ein Smartphone oder Tablet dort einen admob Eintrag hat? Ich setze das adblocker Flag. Nachdem die komplette /etc/hosts Datei kontrolliert wurde wechsle ich die Activity, sofern der Adblocker entdeckt wurde. Auf diese Activity gebe ich eine Nachricht aus, dass diese App nur mit deaktiviertem Blocker funktioniert. Als Alternative könnte man auch auf den App Store verlinken zur kostenpflichtigen App ohne Werbung.
Ein paar Worte zu Adblocker und Werbung
Werbung nervt. App Entwickler müssen aber auf Methoden um Adblocker entdecken zu können zurückgreifen. Schuld daran ist der Kunde selbst, oft wird ein Preis von 2€ für eine App schon als viel zu viel angesehen. Wobei dieser bei mehrmaliger Nutzung bereits mehr als gerechtfertigt wäre…im Vergleich dazu ist das ja nicht mal ein Kaffee. Da aber kostenpflichtige Apps viel weniger oft genutzt werden greift man zu gratis Variante. Natürlich müssen Entwicklungskosten verdient werden und da bleibt dann nur noch Werbung über. Verhindern dann die Kunden auch noch diesen Kanal der Einnahme wäre die Entwicklung defizitär.
2€ als Preis wäre, denkt man genau darüber nach für den Kunden billiger als Werbung. Warum? Werbung hat immer das Problem, dass der Kunde dadurch seine Privatsphäre her gibt. Die Trackingdaten für Interessen werden groß gehandelt und bringen Werbeunternehmen Millionen. Manchmal bis zu 100€ pro Kunde. Das ist weder im Interesse des Kunden, noch dem des App Entwicklers.
Fazit
Man kann in einer Android App Adblocker erkennen und darauf reagieren. Je nach dem kann man den Kunden an der Verwendung der App hindern, eine Meldung ausgeben oder auf eine kostenpflichtige App im Store weiterleiten.
Was denkt ihr zum Thema Werbung in Apps? Wie steht ihr zu AdBlocker, habt ihr einen in Verwendung?