android - quitar - Cómo evitar que el bloqueador de anuncios bloquee anuncios en una aplicación
eliminar publicidad whatsapp (15)
Uno de mis usuarios dejó al gato fuera de la bolsa y me dijo que estaban usando una de mis aplicaciones gratuitas, que se monetiza mediante anuncios, pero que 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 los anuncios están siendo bloqueados?
¿Puedes verificar si el anuncio se cargó en tu aplicación?
Los bloqueadores de anuncios funcionan impidiendo que su aplicación descargue datos. Puede verificar la longitud del contenido de los datos en su marco publicitario para asegurarse de que haya datos allí.
Si no hay datos, arroje un mensaje y salga o lo avise con un correo electrónico.
Puede que no sea un problema tan grande como piensas, ya que solo un pequeño porcentaje de personas bloquea los anuncios.
Además de verificar si AdMob puede resolverse, lo que hago es presentar una página que básicamente me informa que he detectado un bloqueador de anuncios, declaro que entiendo las posibles razones, luego muestro algunos anuncios incorporados de mis propias aplicaciones y pregunto por su tipo apoyo para el desarrollo continuo. :)
Como desarrolladores, tenemos que hacer el trabajo difícil de empatizar con los usuarios y encontrar un término medio entre castigar a los pocos que tratan de aprovechar y los muchos que siguen las reglas. La publicidad móvil es una forma razonable de permitir que alguien use una pieza funcional de software de forma gratuita. Los usuarios que emplean técnicas de bloqueo de anuncios podrían considerarse ingresos perdidos, pero si echa un vistazo al panorama general, también pueden ser quienes difundan la información sobre su aplicación si les gusta. Un enfoque más suave para ejecutar en sistemas con anuncios bloqueados es mostrar su propio anuncio de "casa". Cree una o más imágenes de banner y visualícelas en el mismo lugar que su anuncio normal con un ImageView de la misma altura (por ejemplo, 50dp). Si recibe un anuncio correctamente, configure la visibilidad de su ImageView en View.GONE. Incluso puede crear un temporizador para recorrer varios avisos internos para llamar la atención del usuario. Al hacer clic en su anuncio, puede llevar al usuario a la página del mercado para comprar la versión completa.
Creo que depende del proveedor de contenido para los anuncios. Sé que el SDK de AdMob proporciona una devolución de llamada cuando falla una solicitud de anuncio. Sospecho que es posible que pueda registrarse para esto, luego verifique la conexión en la devolución de llamada, si hay una conexión y no recibió un anuncio, tome nota, si ocurre más de una o dos veces, es probable que su los anuncios están siendo bloqueados No he trabajado con el conjunto de herramientas de AdSense para móviles de Google, pero no me sorprendería si hubiera un mecanismo de devolución de llamada similar.
En lugar de buscar un software individual instalado o un archivo de hosts modificado, mi enfoque es utilizar un AdListener como este y, si el anuncio no se carga debido a NETWORK_ERROR , simplemente busco alguna página aleatoria siempre en línea (para las patadas, apple.com) y verifica si las páginas se cargan con éxito.
Si es así, boom va la aplicación .
Para agregar algún código, la clase de escucha sería algo así 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 luego, 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();
}
});
En primer lugar, permítanme decir que creo que Ad Blocking, en lo que respecta a las aplicaciones, es en realidad una forma de piratería. Estas aplicaciones son compatibles con los anuncios y, en ocasiones, con una "licencia paga" para desactivar anuncios y / o agregar funciones. Al bloquear anuncios, los usuarios están robando ingresos potenciales del desarrollador que se tomó el tiempo para crear la aplicación que está usando.
De todos modos, quiero agregar una forma de ayudar a evitar el uso de bloqueadores de anuncios. Utilizo este método y no permito a los usuarios usar la aplicación si detecto un bloqueador de anuncios. La gente se enoja mucho y te dará calificaciones bajas por ello. Pero también declaro muy claramente en las descripciones de mis aplicaciones que no podrá usar la aplicación si tiene un bloqueador de anuncios.
Uso el administrador de paquetes para verificar si un paquete específico está instalado. Si bien esto no atraerá a todos los bloqueadores, si te mantienes "actualizado" en algunos de los populares, puedes obtener la mayoría de ellos.
PackageManager pm = activity.getPackageManager ();
Intent intent = pm.getLaunchIntentForPackage ( "de.ub0r.android.adBlock" );
if ( Reflection.isPackageInstalled ( activity, intent ) ) {
// they have adblock installed
}
Esta es una extensión de una respuesta anterior. El usuario me ha informado que la aplicación que está utilizando se llama AdFree Android. Se puede encontrar en el mercado. La aplicación dice que funciona "anulando solicitudes a nombres de host conocidos que publican anuncios".
Sugiero que si monetiza cualquiera de sus aplicaciones con anuncios, compruebe al inicio de este programa y le dé al usuario un mensaje desagradable, luego finalice su aplicación.
Estoy al tanto de una forma en que el bloqueo de anuncios funciona (en realidad, en cualquier computadora), editan el archivo de 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 listas de rom personalizadas las siguientes entradas 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 intente resolver las direcciones anteriores, se enrutarán a la dirección que aparece a la izquierda de ellas (localhost) en este caso.
Lo que hago en mis aplicaciones es verificar este archivo de host y buscar cualquier entrada de admob, si encuentro alguna notifico al usuario que he detectado bloqueo de anuncios y les pido que eliminen las entradas de admob de allí y no las utilizo. la aplicación.
Después de todo, ¿de qué me sirve si no ven anuncios? No tiene sentido permitirles usar la aplicación de forma gratuita.
Aquí hay un fragmento de código de cómo logro eso:
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;
}
}
}
Juro que todas las aplicaciones compatibles con publicidad deberían verificar este archivo. No necesita ser root para poder acceder, pero escribirle puede ser una historia diferente.
Además, no estoy seguro de si hay algún otro archivo que actúe de la misma manera en un sistema operativo basado en Linux, pero en cualquier caso siempre podemos verificar todos esos archivos.
Cualquier sugerencia para mejorar esto es bienvenida.
Además, la aplicación llamada "Ad Free android" necesita acceso de root, lo que significa que lo más probable es que cambie el archivo de hosts para lograr su objetivo.
Estoy seguro de que esta respuesta no será del todo popular entre ciertos segmentos de desarrolladores, sin embargo, considere si entra en esta categoría que tal vez su aplicación no merece existir en la tienda de aplicaciones. Tenga en cuenta que estos son implementables como cambios de código, no se requiere ningún tipo de comportamiento de hackeo o spyware.
Básicamente, cambia la economía de tu aplicación. El usuario siempre tiene razón : esta es la actitud adoptada por una de las compañías publicitarias más exitosas (Google). Si tus anuncios están siendo bloqueados por los usuarios, es porque chupas, no porque apestan los anuncios o los bloqueadores de anuncios.
http://books.google.com/books/about/The_User_is_Always_Right.html?id=gLjPMUjVvs0C
- Haga que los anuncios sean menos molestos y cara a cara. Los usuarios reaccionan a la publicidad pobre / molesta, y cuanto más sórdida se ve y se convierte su aplicación, más probabilidades tienen de deshacerse de todos modos. No me molestan las aplicaciones con anuncios en ellas, siempre y cuando no impidan 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 spyware, 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 pidiéndole el código de confirmación. El código no tiene que ser largo ni molesto, de hecho sería suficiente implementar un servicio de captcha con 3 o 4 letras / números. ( http://textcaptcha.com/api )
- Además de detectar el fracaso de los anuncios para cargar, haga mejores anuncios. En lugar de utilizar una API como los mobads (¿Te das cuenta de cuán sórdido suena? ¿Mobs? ¿Realmente ?, ¿somos desarrolladores, la mafia rusa?), Establece una asociación con una empresa publicitaria que te permite insertar anuncios directamente desde tu aplicación. Aumentará la velocidad de instalación de la aplicación general, y no, no podrá protegerse contra modificaciones manuales, pero los cambios sugeridos anteriormente tampoco lo previenen. Y esto respaldará mejor cualquier versión paga de su aplicación, que será mucho más liviana (y más rápida).
- Revise minuciosamente los anuncios que muestra al usuario, sea abierto y transparente con respecto a sus políticas de anuncios, e incluso permita que los usuarios inspeccionen sus anuncios y orígenes de anuncios. La razón principal por la que me preocupan los anuncios no es porque odio los anuncios, sino porque me preocupa que el desarrollador de mala calidad responsable de esta aplicación también esté dejando entrar virus u otro malware. Pida que se haga una excepción al adblocker instalado. Forma equipo con bloqueadores de anuncios como AdBlock para entrar en su lista de excepciones. Si eres 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 )
Me vuelvo a repetir: todos los cambios anteriores son cosas que legítimamente puede hacer en el código para evitar comportamientos anti-ad. Los anuncios se bloquean por razones de seguridad y reacciones viscerales, principalmente, y algunas veces por el ancho de banda y el rendimiento, por lo que debe asegurarse de que sus anuncios no invoquen ninguno de estos problemas, a nivel de código.
Finalmente, quería referirme a lo que dijo Borealid, que reiteré más arriba; al final es un juego de "gato y ratón", porque el usuario tiene la máxima autoridad y responsabilidad, tanto legal como moralmente, sobre su propia propiedad. Un usuario puede hacer lo que sea, incluso modificar código directamente sobre la marcha. Por supuesto, existen restricciones que puede implementar, etc., pero siempre hay formas de evitar el problema. Este es el último problema (técnicamente) con DRM (que es lo que estás tratando de hacer). En lugar de perder el tiempo y el esfuerzo en este juego, es mejor alentar a los usuarios a mantener los anuncios en todo; se convertirán en sus mejores y más inteligentes anti-ad-blockers, gratis.
Hay dos maneras para que un usuario pase un anuncio:
1) Use la aplicación sin Internet.
2) Con teléfono rooteado y archivo de host modificado.
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();
}
}
Las dos respuestas principales lo ayudan con solo un método particular (si es que probablemente el más popular) para bloquear anuncios. Los usuarios raíz también pueden bloquear anuncios con un firewall en el dispositivo. Los usuarios de WiFi pueden bloquear anuncios con un firewall en sentido ascendente.
Yo sugiero:
No recompense a los usuarios que bloquean anuncios. Asegúrese de que su diseño reserve parte de la pantalla de un anuncio, incluso si no se puede cargar uno. O si tiene un anuncio de pantalla completa que se reproduce un poco, asegúrese de que su aplicación espere un poco, incluso si el anuncio no se puede reproducir. Si utiliza las notificaciones como anuncios (usted escoria), notifique al usuario cuando no reciba dicho anuncio. Esto podría interpretarse como "molestar a todos los usuarios", pero los usuarios normales saben lo que obtienen y no se desean los "usuarios" que bloquean anuncios.
Pídele a ad-blockers que se detenga. Cuanto menos rentable sea una industria que suministre lo que un usuario quiere, menos podrá la industria proporcionar lo que el usuario quería. Un desarrollador individual encontrará que gana más dinero sirviendo a otros usuarios. Sabes esto, y tus usuarios pensarán que es obvio después de que les digas, pero sigue siendo un argumento económico, no es intuitivo. Tenga un anuncio de respaldo que diga algo así como: "Este es mi trabajo. Si no me paga, obtendré otro y no obtendrá más aplicaciones como esta de mi parte".
Mi código para este problema es por lo tanto:
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.
No hay nada que puedas hacer que tus usuarios no puedan hacer mejor.
Lo único que viene a la mente como remotamente efectivo es hacer que los anuncios sean una parte inextricable del programa, de modo que si están bloqueados, el usuario no puede entender ni entender la aplicación.
Ofrezca a sus usuarios una forma de utilizar la aplicación sin los anuncios. Personalmente, encuentro que los anuncios son una de las cosas más molestas que podrían suceder en mi computadora, y con mucho gusto pagaré una aplicación si me ahorra el insulto de tener anuncios en mi cara. Y estoy seguro de que no soy el único.
Para el caso en que no haya conexión a Internet, he seguido este tutorial y he creado un "oyente de estado de red" como sigue:
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 invocarse en Resume y OnPause respectivamente, como se describe here .
En su diseño xml, configure AdView y un ImageView de su elección, de la siguiente manera:
<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, se mostrará el anuncio y, cuando esté desactivado, aparecerá el menú emergente ImageView, y viceversa. Esto debe hacerse en cada actividad en la que desee que se muestren los anuncios.