58 votes

Comment empêcher le bloqueur de publicité de bloquer les publicités sur une application ?

Un de mes utilisateurs a vendu la mèche et m'a dit qu'il utilisait une de mes applications gratuites, qui est monétisée par des publicités, mais qu'il bloquait les publicités avec un bloqueur de publicité. Ils m'ont dit cela en se moquant de moi, comme si je ne pouvais rien y faire.

Est-ce que je peux faire quelque chose ? Existe-t-il un moyen de détecter que les publicités sont bloquées ?

60voto

Ivan Points 881

Je connais une façon dont le blocage des publicités fonctionne (sur n'importe quel ordinateur en fait), ils modifient le fichier hosts pour pointer vers localhost pour tous les serveurs publicitaires connus. Pour Android, ce fichier est situé dans le fichier "etc/hosts".

Par exemple, j'utilise des publicités admob et un fichier d'hôte que j'ai pris à partir de rom personnalisé liste les entrées admob suivantes :

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

Maintenant, chaque fois qu'un processus tente de résoudre les adresses ci-dessus, il est acheminé vers l'adresse indiquée à gauche de celles-ci (localhost) dans ce cas.

Ce que je fais dans mes applications, c'est de vérifier ce fichier hôte et de rechercher toute entrée admob, si j'en trouve, j'informe l'utilisateur que j'ai détecté un blocage publicitaire et je lui demande de supprimer les entrées admob de ce fichier et de ne pas l'autoriser à utiliser l'application.

Après tout, à quoi cela me sert-il s'ils ne voient pas les publicités ? Il n'y a aucun intérêt à les laisser utiliser l'application gratuitement.

Voici un extrait de code qui montre comment j'y parviens :

        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;
            }
        }
    } 

Je souhaite que toutes les applications supportant la publicité vérifient ce fichier. Vous n'avez pas besoin d'être Root pour y accéder, mais y écrire peut être une autre histoire.

De plus, je ne suis pas sûr qu'il y ait d'autres fichiers qui agissent de la même manière sur un système d'exploitation basé sur Linux, mais en tout cas nous pouvons toujours vérifier tous ces fichiers.

Toute suggestion d'amélioration est la bienvenue.

De plus, l'application appelée "Ad Free Android" a besoin d'un accès Root, ce qui signifie qu'elle modifie très probablement le fichier hosts afin d'atteindre son objectif.

25voto

Jonathan Points 481

Mon code pour ce problème est le suivant : -

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

J'espère que cela vous aidera.

9voto

BitBank Points 4603

En tant que développeurs, nous devons faire le difficile travail d'empathie avec les utilisateurs et trouver un juste milieu entre la punition des quelques personnes qui tentent de profiter de la situation et celle des nombreuses personnes qui respectent les règles. La publicité mobile est un moyen raisonnable de permettre à quelqu'un d'utiliser gratuitement un logiciel fonctionnel. Les utilisateurs qui ont recours à des techniques de blocage des publicités peuvent être considérés comme un manque à gagner, mais si vous regardez la situation dans son ensemble, ils peuvent aussi être ceux qui font connaître votre application si elle leur plaît. Une approche plus douce pour fonctionner sur des systèmes dont les publicités sont bloquées consiste à afficher votre propre publicité "maison". Créez une ou plusieurs images de bannière et affichez-les au même endroit que votre publicité normale, avec un message de type ImageView de la même hauteur (par exemple 50dp). Si vous recevez une publicité, réglez la visibilité de votre ImageView sur View.GONE. Vous pouvez même créer une minuterie pour faire défiler plusieurs annonces maison afin d'attirer l'attention de l'utilisateur. En cliquant sur votre annonce, l'utilisateur peut accéder à la page du marché pour acheter la version complète.

4voto

Byron Whitlock Points 29863

Pouvez-vous vérifier si la publicité a été chargée dans votre application ?

Les bloqueurs de publicité fonctionnent en empêchant votre application de télécharger des données. Vous pouvez vérifier la longueur du contenu des données dans votre cadre publicitaire pour vous assurer qu'il y a des données.

S'il n'y a pas de données, un message s'affiche et vous quitte ou vous avertit par un courriel.

Ce n'est peut-être pas un problème aussi important que vous le pensez, car seul un petit pourcentage de personnes bloque les publicités.

4voto

Julian Fondren Points 2847

Les deux premières réponses ne vous aident qu'avec une méthode particulière (bien que, probablement, la plus populaire) de blocage des publicités. Les utilisateurs root peuvent également bloquer les publicités avec un pare-feu sur l'appareil. Les utilisateurs WiFi peuvent bloquer les publicités avec un pare-feu en amont.

Je suggère :

  1. Ne récompensez pas les utilisateurs qui bloquent les publicités. Veillez à ce que votre mise en page réserve une partie de l'affichage pour une publicité, même si celle-ci ne peut pas être chargée. Ou si vous avez une publicité en plein écran qui est lue pendant un certain temps, assurez-vous que votre application attende un peu même si la publicité ne peut pas être lue. Si vous utilisez les notifications comme des publicités (espèce d'ordure), prévenez l'utilisateur lorsque vous ne parvenez pas à obtenir une telle publicité. Cela pourrait être interprété comme "ennuyer tous de vos utilisateurs", mais vos utilisateurs normaux savent ce qu'ils obtiennent, et vos "utilisateurs" bloqueurs de publicité ne sont pas désirés.

  2. Demandez aux bloqueurs de publicité d'arrêter. Moins une industrie qui fournit ce qu'un utilisateur souhaite est rentable, moins cette industrie fournira ce que l'utilisateur avait souhaité. Un développeur individuel découvrira qu'il gagne plus d'argent en servant d'autres utilisateurs. Vous le savez, et vos utilisateurs penseront que c'est évident après que vous le leur ayez dit, mais il s'agit toujours d'un argument économique - ce n'est pas intuitif. Ayez une publicité de secours qui dit quelque chose comme "C'est mon travail. Si vous ne me payez pas, j'en trouverai un autre, et vous n'obtiendrez plus d'applications comme celle-ci de ma part."

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X