Cómo evitar que el bloqueador de anuncios bloquee anuncios en una aplicación

Uno de mis usuarios dejó que el gato fuera de la bolsa y me dijo que estaban usando una de mis aplicaciones gratuitas, que es monetizado por los anuncios, pero estaban bloqueando los anuncios con un bloqueador de anuncios. Me dijeron esto burlonamente, como si no pudiera hacer nada al respecto.

¿Puedo hacer algo al respecto? ¿Hay alguna forma de detectar que se están bloqueando los anuncios?

Tengo conocimiento de una forma en la que funciona el bloqueo de anuncios (en cualquier computadora en realidad), modifican el archivo hosts para apuntar a localhost para todos los servidores de anuncios conocidos. Para android esto se encuentra en el archivo "etc / hosts".

Por ejemplo, uso anuncios admob y un archivo de host que he tomado de la ROM personalizada lista las siguientes entradas de 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 

Ahora, cada vez que un proceso intenta resolver las direcciones anteriores, se enrutan a la dirección que aparece a la izquierda de ellos (localhost) en este caso.

Lo que hago en mis aplicaciones es comprobar este archivo de host y buscar las entradas de AdMob, si me encuentro con cualquier notificar al usuario que he detectado bloqueo de anuncios y les digo que para eliminar las entradas de AdMob de allí y no les permiten el uso de la aplicación.

Después de todo lo bueno que me hace si no están viendo anuncios? No tiene sentido dejarlos usar la aplicación gratis.

He aquí un fragmento de código de cómo lograrlo:

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

Prometo que todas las aplicaciones compatibles con anuncios deben comprobar este archivo. No es necesario ser root para acceder a él, pero escribirlo puede ser una historia diferente.

Además, no estoy seguro de si hay otros archivos que actúan de la misma en un sistema operativo basado en linux, pero en cualquier caso siempre podemos comprobar todos esos archivos.

Cualquier sugerencia para mejorar esto es bienvenida.

También la aplicación llamada "Ad Free android" necesita acceso root, lo que significa que probablemente cambie el archivo hosts para lograr su objetivo.

Mi código para este problema es así:

 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 

Espero que ayude.

Como desarrolladores, tenemos que hacer el trabajo difícil de empathizing con los usuarios y encontrar un punto medio entre castigar a los pocos que tratan de tomar ventaja y los muchos que juegan por las reglas. La publicidad móvil es una forma razonable de permitir que alguien utilice una pieza funcional de software de forma gratuita. Los usuarios que emplean técnicas de bloqueo de anuncios pueden considerarse ingresos perdidos, pero si echamos un vistazo a la imagen general, también pueden ser aquellos que difunden la palabra acerca de su aplicación si les gusta. Un enfoque más suave para ejecutar en los sistemas con anuncios bloqueados es mostrar su propio anuncio de "casa". Cree una o más imágenes de banner y muéstrelas en el mismo lugar que su anuncio normal con un ImageView de la misma altura (por ejemplo, 50dp). Si recibe correctamente un anuncio, establezca la visibilidad de ImageView en View.GONE. Incluso puede crear un temporizador para recorrer varios anuncios de casa para obtener la atención del usuario. Al hacer clic en su anuncio puede llevar al usuario a la página de mercado para comprar la versión completa.

¿Puedes comprobar si el anuncio está cargado en tu aplicación?

Los bloqueadores de anuncios funcionan al impedir que la aplicación descargue datos. Puede comprobar la longitud del contenido de los datos en su marco de anuncios para asegurarse de que hay datos allí.

Si no hay datos, envíe un mensaje y salga o le avise con un correo electrónico.

Puede que no sea un problema tan grande como usted piensa, ya que sólo un pequeño porcentaje de personas bloquea anuncios.

Las dos respuestas principales le ayudan con sólo un método concreto (si, probablemente, el más popular) de bloqueo de anuncios. Los usuarios raíz también pueden bloquear anuncios con un cortafuegos en el dispositivo. Los usuarios WiFi pueden bloquear los anuncios con un cortafuegos ascendente.

Yo sugiero:

  1. No recompensa a los usuarios que bloquean anuncios. Asegúrese de que su diseño reserve parte de la pantalla para un anuncio aunque no pueda cargarse. O si tiene un anuncio de pantalla completa que juega un poco, asegúrese de que la aplicación espere un poco incluso si el anuncio no se puede reproducir. Si utiliza notificaciones como anuncios (escoria), notifique al usuario cuando no obtenga dicho anuncio. Esto podría ser leído como "molestar a todos sus usuarios", pero sus usuarios normales saben lo que están recibiendo, y sus "usuarios" de bloqueo de anuncios no son deseados.

  2. Pida a los ad-bloqueadores que se detengan. Cuanto menos rentable sea una industria que suministre lo que un usuario desee, menos la industria suministrará lo que el usuario quería. Un desarrollador individual encontrará que él hace más dinero que sirve a otros usuarios. Usted sabe esto, y sus usuarios piensan que es obvio después de decirles, pero sigue siendo un argumento económico – no es intuitivo. Tienes un anuncio de respaldo que dice algo así como: "Este es mi trabajo. Si no me pagas, obtendré otro, y no recibirás más aplicaciones como esta de mi parte".

En lugar de buscar archivos individuales instalados o modificados, mi enfoque es usar un AdListener como este y, si el anuncio no se carga debido a NETWORK_ERROR , sólo busco una página aleatoria siempre en línea (para las patadas, apple.com) Y compruebe si las páginas se cargan correctamente.

Si es así, boom va a la aplicación .

Para añadir algún código, la clase de escucha sería algo como:

 public abstract class AdBlockerListener implements AdListener { @Override public void onFailedToReceiveAd(Ad arg0, ErrorCode arg1) { if (arg1.equals(ErrorCode.NETWORK_ERROR)) { try { URL url = new URL("http://www.apple.com/"); URLConnection conn = url.openConnection(); BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); reader.readLine(); onAdBlocked(); } catch (IOException e) {} } } public abstract void onAdBlocked(); } 

Y entonces cada actividad con un adView haría algo como:

 AdView adView = (AdView) findViewById(R.id.adView); adView.setAdListener(new AdBlockerListener() { @Override public void onAdBlocked() { AlertDialog ad = new AlertDialog.Builder(CalendarView.this) .setMessage("nono") .setCancelable(false) .setNegativeButton("OK", new OnClickListener() { public void onClick(DialogInterface dialog, int which) { System.exit(1); } }) .show(); } }); 

Estoy seguro de que esta respuesta no será totalmente popular con ciertos segmentos de desarrolladores, sin embargo considere si usted cae en esta categoría que quizás su aplicación no merece existir en la tienda de aplicaciones. Tenga en cuenta que todos estos son implementables como cambios de código, no se requiere hackery o spyware como comportamiento.

Básicamente, cambie la economía de su aplicación. El usuario siempre tiene la razón : esta es la actitud adoptada por una de las compañías publicitarias más exitosas de la historia (Google). Si sus anuncios están siendo bloqueados por los usuarios, su porque usted chupa, no porque los anuncios o bloqueadores de anuncios chupar.

http://books.google.com/books/about/The_User_is_Always_Right.html?id=gLjPMUjVvs0C

  • Hacer anuncios menos molestos y en su cara. Los usuarios reaccionan a un anuncio deficiente / molesto, y cuanto menos aparezca y se convierta en tu aplicación, más probabilidades tendrán de abandonarla de todos modos. No me importa las aplicaciones con anuncios en ellos, siempre y cuando no están obstaculizando significativamente la funcionalidad, y aún mejor me gustan los anuncios que son relevantes para mí. ( http://www.nngroup.com/articles/most-hated-advertising-techniques/ )
  • Para detectar que los anuncios no se están cargando, no es necesario implementar el software espía como las actividades mencionadas en los carteles anteriores. Cargue un anuncio que tenga un código de confirmación y, de vez en cuando, inserte un mensaje pidiendo el código de confirmación. El código no tiene que ser largo o molesto, de hecho sería suficiente para implementar un servicio de captcha con 3 o 4 letras / números. ( http://textcaptcha.com/api )
  • Además de detectar la falta de carga de los anuncios, haga mejores anuncios. En lugar de usar una API como mobads (¿Te das cuenta de lo desagradable que suena? ¿Mobs? ¿Realmente somos desarrolladores, la mafia rusa?), Entramos en una asociación con una compañía de anuncios que te permite insertar anuncios directamente desde tu aplicación. Esto hará que su aplicación general sea más grande para instalar, y no, no puede protegerse contra la modificación manual, pero los cambios sugeridos anteriormente no guardan contra eso tampoco. Y esto apoyará mejor cualquier versión de pago de su aplicación, que será mucho más ligero (y más rápido).
  • Revise detenidamente los anuncios que está mostrando al usuario, sea abierto y transparente sobre sus políticas publicitarias e incluso permita a los usuarios inspeccionar sus anuncios y fuentes de anuncios. La principal razón por la que me preocupan los anuncios no es porque odio los anuncios, sino porque me preocupa que el desarrollador de baja calidad responsable de esta aplicación esté introduciendo virus o otro malware. Pida que se haga una excepción al adblocker instalado. Asociarse con los bloqueadores de anuncios como AdBlock para entrar en su lista de excepciones. Si usted es una aplicación legítima, esto no debería ser un problema. ( http://www.cio.com/article/699970/6_Ways_to_Defend_Against_Drive_by_Downloads?page=1&taxonomyId=3089 )

Reitero: todos los cambios anteriores son cosas que puedes hacer legítimamente en código para prevenir comportamientos anti-anuncio. Los anuncios se bloquean por razones de seguridad y reacciones viscerales, principalmente y, a veces, el ancho de banda y el rendimiento. Asegúrese de que sus anuncios no invocan ninguno de estos problemas, a nivel de código.

Finalmente quería hablar de lo que dijo Borealid, que repetí arriba; Al final es un juego de "gato y ratón", porque el usuario tiene autoridad y responsabilidad última, legal y moralmente, sobre su propia propiedad. Un usuario puede hacer cualquier cosa, incluso modificar directamente el código sobre la marcha. Por supuesto, hay restricciones que puede implementar, etc, pero siempre hay maneras de sortear el problema. Este es el último problema (técnicamente) con DRM (que es lo que usted está tratando de hacer). En lugar de perder tiempo y esfuerzo en este juego, es mejor animar a los usuarios a mantener anuncios en todo; Se convertirán en su mejor, más inteligente anti-ad-bloqueadores, de forma gratuita.

No hay nada que usted pueda hacer que sus usuarios no puedan hacer mejor.

Lo único que viene a la mente como remotamente eficaz es hacer que los anuncios una parte inextricable del programa, de modo que si están bloqueados el usuario no puede hacer sentido de / interactuar con la aplicación.

Creo que depende del proveedor de contenido para los anuncios. Sé que SDK de AdMob proporciona una devolución de llamada cuando una solicitud de anuncio falla. Sospecho que podrías registrarte para esto, después comprobaras para una conexión en la devolución de llamada – si hay una conexión y no has recibido un anuncio – toma la nota, si sucede más de una o dos veces, las ocasiones son probables su Los anuncios se están bloqueando. No he trabajado con el conjunto de herramientas de AdSense para móviles de Google, pero no me sorprendería si hubiera un mecanismo similar de devolución de llamada.

En primer lugar, permítanme decir que creo que el bloqueo de anuncios, cuando se trata de aplicaciones, es en realidad una forma de piratería. Estas aplicaciones son compatibles con los anuncios y, a veces, con una "licencia de pago" para desactivar los anuncios y / o agregar funciones. Al bloquear los anuncios, los usuarios están robando los ingresos potenciales del desarrollador que tomaron el tiempo necesario para crear la aplicación que está utilizando.

De todos modos, quiero añadir una forma de ayudar a prevenir el uso de bloqueadores de anuncios. Utilizo este método y no permito que los usuarios utilicen la aplicación si detecto un bloqueador de anuncios. La gente se enoja mucho y le dará una mala calificación. Pero también declaro muy claramente en mis descripciones de aplicaciones que no podrás usar la aplicación si tienes un adblocker.

Utilizo el gestor de paquetes para comprobar si se ha instalado un paquete específico. Mientras que esto no conseguirá todos los adblockers, si usted guarda "hasta la fecha" en alguno de los populares, usted puede conseguir la mayor parte de ellos.

 PackageManager pm = activity.getPackageManager (); Intent intent = pm.getLaunchIntentForPackage ( "de.ub0r.android.adBlock" ); if ( Reflection.isPackageInstalled ( activity, intent ) ) { // they have adblock installed } 

Hay dos maneras para que un usuario pase un anuncio:

1) Utilice la aplicación sin internet.

2) Con el teléfono enraizado y el archivo modificado del anfitrión.

Hice dos herramientas que puede implementar, vea el código a continuación.

Checkifonline (); Es para el problema 1:

 public void checkifonline() { boolean haveConnectedWifi = false; boolean haveConnectedMobile = false; ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo[] netInfo = cm.getAllNetworkInfo(); for (NetworkInfo ni : netInfo) { if (ni.getTypeName().equalsIgnoreCase("WIFI")) if (ni.isConnected()) haveConnectedWifi = true; if (ni.getTypeName().equalsIgnoreCase("MOBILE")) if (ni.isConnected()) haveConnectedMobile = true; } if(haveConnectedWifi==false && haveConnectedMobile==false){ // TODO (could make massage and than finish(); } } 

Adblockcheck (); Es para el problema 2

 private void adblockcheck() { BufferedReader in = null; boolean result = true; try { in = new BufferedReader(new InputStreamReader( new FileInputStream("/etc/hosts"))); String line; while ((line = in.readLine()) != null) { if (line.contains("admob")) { result = false; break; } } } catch (UnknownHostException e) { } catch (IOException e) {e.printStackTrace();} if(result==false){ // TODO (could make massage and than finish(); } } 

Dé a sus usuarios una forma de usar la aplicación sin los anuncios. Yo personalmente encontrar anuncios una de las cosas más molesto que posiblemente podría suceder en mi equipo, y yo con mucho gusto pagar por una aplicación si me ahorra el insulto de tener anuncios lanzados en mi cara. Y estoy seguro de que no soy el único.

Para el caso en que no hay conexión a Internet, he seguido este tutorial y he creado un "oyente de estado de red" así:

 private BroadcastReceiver mConnReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { boolean noConnectivity = intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false); if (noConnectivity == true) { Log.d(TAG, "No internet connection"); image.setVisibility(View.VISIBLE); } else { Log.d(TAG, "Interet connection is UP"); image.setVisibility(View.GONE); add.loadAd(new AdRequest()); } } }; @Override protected void onCreate(Bundle savedInstanceState) { //other stuff private ImageView image = (ImageView) findViewById(R.id.banner_main); private AdView add = (AdView) findViewById(R.id.ad_main); add.setAdListener(new AdListener()); } @Override protected void onResume() { registerReceiver(mConnReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); super.onResume(); } @Override protected void onPause() { unregisterReceiver(mConnReceiver); super.onPause(); } 

RegisterReceiver y unregisterReceiver tienen que ser llamados on onResume y onPause respectivamente, como se describe aquí .

En su diseño xml configure el AdView y un ImageView de su propia elección, así:

 <com.google.ads.AdView xmlns:googleads="http://schemas.android.com/apk/lib/com.google.ads" android:layout_alignParentBottom="true" android:id="@+id/ad_main" android:layout_width="fill_parent" android:layout_height="wrap_content" googleads:adSize="BANNER" googleads:adUnitId="@string/admob_id" /> <ImageView android:id="@+id/banner_main" android:layout_centerInParent="true" android:layout_alignParentBottom="true" android:layout_width="379dp" android:layout_height="50dp" android:visibility="gone" android:background="@drawable/banner_en_final" /> 

Ahora, siempre que la conexión a Internet esté disponible, el anuncio se mostrará y cuando esté apagado el ImageView aparecerá, y viceversa. Esto debe realizarse en todas las actividades en las que desea que se muestren los anuncios.

Así como comprobar si se puede resolver admob, lo que hago es presentar una página que aconseja básicamente que he detectado un adblocker, el estado que entiendo las posibles razones por qué, a continuación, mostrar algunos anuncios incorporados de mis propias aplicaciones y pedir su tipo Apoyo para el desarrollo continuo. 🙂

Esta es una extensión de una respuesta anterior. El usuario me ha informado de que la aplicación que están utilizando se llama AdFree Android. Se puede encontrar en el mercado. La aplicación dice que funciona al "anular peticiones a nombres de host conocidos que publiquen anuncios".

Sugiero que si monetiza cualquiera de sus aplicaciones con anuncios, comprueba en el inicio de este programa y envíe un mensaje desagradable al usuario y, a continuación, cierra la aplicación.

  • La aplicación no puede cargar anuncios intersticiales en mi dispositivo real
  • ¿Cómo mostrar anuncios VAST en mi aplicación Android?
  • ¿Cómo calcular los ingresos potenciales de usar AdMob en la aplicación?
  • ¿Los anuncios de servicio de Google se comportan de forma distinta a AdMob SDK durante la carga de anuncios?
  • Mobs de anuncios o iAd?
  • AdMob: versión actualizada de la solución de problemas de la identificación de anuncios de AdMob
  • Swiffy-convertidos Flash a HTML5 animados anuncios de Google AdSense causar un rendimiento terrible jank en Chrome para Android
  • Cómo hacer que el trabajo de admob con android versión <= 3.2?
  • Cierre programáticamente un anuncio intersticial
  • Problemas al agregar una nueva aplicación de AdMob a Android
  • El anuncio de banner de AdMob no se muestra
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.