Cómo introducir publicidad en aplicaciones Android con AdMob

16

De igual manera que hace ya algunos meses os explicamos cómo desarrollar una aplicación Android desde cero, hoy os vamos a explicar cómo introducir propaganda en vuestras aplicaciones.

Existen varias formas de introducir propaganda en las aplicaciones, si bien la más sencilla es usar AdMob, que es la interfaz de publicidad creada (y mantenida) por Google, que se encarga de seleccionar qué anuncios presenta al usuario y que nos abona un determinado importe dependiendo del número de visualizaciones y clics que se hagan en los mismos, dejando a nuestra elección sólo el tamaño y posición de los banners.

Como hemos indicado, AdMob paga a los desarrolladores un determinado importe dependiendo de los clics y visualizaciones de anuncios por parte de los usuarios, si bien tendrás que tener en cuenta que:

  • Los pagos se realizan mensualmente, si bien no recibirás pago alguno si el importe a abonar es inferior a 20 dólares (en caso de haber optado por recibir el pago a través de Paypal o 100 dolares si optas por recibir el pago por transferencia), en cuyo caso el importe se acumulará para el próximo pago.
  • Los pagos se realizan con más de dos meses de retraso (es decir, a mediados o finales de marzo se abonarán los ingresos por anuncios generados durante el mes de enero).

Si finalmente decides empezar a trabajar con AdMob, lo primero que tendrás que hacer es registrarte en su página web, para lo cual deberás introducir tus datos personales y bancarios, que deberás comprobar para evitar problemas posteriores, si bien, al contrario de lo que ocurre con otras secciones de la empresa californiana, tienen un servicio de atención vía email que funciona bastante bien.

Banner de AdMob

Una vez finalizado el registro podrás acceder a la interfaz web para dar de alta las diferentes aplicaciones (se recomienda generar un identificador de aplicación diferente para cada una, ya que así podrás comprobar qué aplicación te está generando mayores ingresos).

Cómo añadir una nueva aplicación a AdMob

Para añadir una nueva aplicación seguiremos los siguientes pasos:

  1. Acceder a la web de AdMob, autentificarnos y hacer clic en la pestaña “Sitios y aplicaciones”.
  2. Hacer clic en “Agregar sitio/aplicación”.
  3. Hacer clic en “Aplicación Android” e introducir los datos de la aplicación (nombre, link al market, categoría y descripción) y hacer clic en el botón “continuar”.
  4. Descargar el SDK de AdMob.

Cómo añadir la propaganda a nuestra aplicación

Una vez dada de alta la aplicación en AdMob, procederemos a modificar nuestra aplicación para permitir que referencie los banners de propaganda, para lo cual deberemos:

  1. Copiar el archivo GoogleAdMobAdsSdk-6.3.0.jar que nos hemos descargado anteriormente al directorio libs de nuestra aplicación.
  2. Desde Eclipse, abrir el proyecto correspondiente, hacer clic en el botón derecho del ratón sobre el nombre del proyecto en la lista de paquetes y seleccionar refrescar.
  3. Buscar el directorio libs de nuestro proyecto y hacer clic para ver su contenido.
  4. Hacer clic con el botón derecho del ratón en la librería de AdMob y seleccionar Build Path y seguidamente Add to Build Path, lo que nos permitirá referenciar los objetos del SDK de AdMob en nuestro código y en nuestros layouts.

Seguidamente procederemos a añadir los banners, para lo cual simplemente haremos lo siguiente:

    1. Seleccionar el layout (o layouts) en el que queremos introducir la propaganda
    2. Obtener el identificador de nuestra aplicación en AdMob, para lo cual haremos lo siguiente:
      1. Acceder al apartado «sitios y aplicaciones» de AdMob.
      2. Hacer clic en el botón «gestionar configuración» correspondiente a la aplicación en cuestión.
      3. En la página de configuración, anotar el número que aparece a la derecha de «Id de Editor«.
    3. Introducir el bloque correspondiente al banner en un LinearLayout o en un RelativeLayout, que tendrá la forma que indicamos a continuación

<com.google.ads.AdView
android:id="@+id/ads"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
ads:adUnitId="id-de-la-aplicación"
ads:adSize="BANNER"
ads:loadAdOnCreate="true" />

Finalmente, también será necesario modificar el manifiesto de nuestra aplicación para incluir una actividad que es usada por la librería de AdMob, tal como indicamos a continuación.


<activity
android:name="com.google.ads.AdActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" />

Cómo forzar la visualización u ocultado de la propaganda

En general no será necesario interactuar con la propaganda, si bien es posible que, dependiendo de la situación, nos interese ocultarla, por ejemplo si el usuario ha adquirido la versión PRO de nuestra aplicación.

Para ello simplemente deberemos acceder a la vista que implementa el banner y ocultarla, tal como mostramos a continuación.

findViewById(R.id.ads).setVisibility(has_payed_for ?
View.GONE :
View.VISIBLE);

Captura de pantalla de la web de AdMob

Y esto es todo lo que se necesita para añadir propaganda a una aplicación Android.

A partir de aquí el dinero que ganéis dependerá de los clics de los usuarios y del número de descargas que tenga vuestra aplicación, aunque no es fácil hacerse rico con los importes que genera la publicidad.

16 comentarios

  1. Hola Robert, cuando pego el codigo en el xml(poniendo mi id) da error la aplicacion navas abrirla el emulador.
    En el manifest tengo todo puesto.

    Saludos.

  2. Pues lo pego aqui, a ver si se ve bien.

    06-13 21:10:10.584: E/AndroidRuntime(859): FATAL EXCEPTION: main
    06-13
    21:10:10.584: E/AndroidRuntime(859): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.acaradolca.publi3/com.acaradolca.publi3.MainActivity}: android.view.InflateException: Binary XML file line #20: Error inflating class com.google.ads.AdView
    06-13
    21:10:10.584: E/AndroidRuntime(859): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
    06-13
    21:10:10.584: E/AndroidRuntime(859): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
    06-13
    21:10:10.584: E/AndroidRuntime(859): at android.app.ActivityThread.access$600(ActivityThread.java:141)
    06-13
    21:10:10.584: E/AndroidRuntime(859): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
    06-13
    21:10:10.584: E/AndroidRuntime(859): at android.os.Handler.dispatchMessage(Handler.java:99)
    06-13
    21:10:10.584: E/AndroidRuntime(859): at android.os.Looper.loop(Looper.java:137)
    06-13
    21:10:10.584: E/AndroidRuntime(859): at android.app.ActivityThread.main(ActivityThread.java:5041)
    06-13
    21:10:10.584: E/AndroidRuntime(859): at java.lang.reflect.Method.invokeNative(Native Method)
    06-13
    21:10:10.584: E/AndroidRuntime(859): at java.lang.reflect.Method.invoke(Method.java:511)
    06-13
    21:10:10.584: E/AndroidRuntime(859): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
    06-13
    21:10:10.584: E/AndroidRuntime(859): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
    06-13
    21:10:10.584: E/AndroidRuntime(859): at dalvik.system.NativeStart.main(Native Method)
    06-13
    21:10:10.584: E/AndroidRuntime(859): Caused by: android.view.InflateException: Binary XML file line #20: Error inflating class com.google.ads.AdView
    06-13
    21:10:10.584: E/AndroidRuntime(859): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:698)
    06-13
    21:10:10.584: E/AndroidRuntime(859): at android.view.LayoutInflater.rInflate(LayoutInflater.java:746)
    06-13
    21:10:10.584: E/AndroidRuntime(859): at android.view.LayoutInflater.rInflate(LayoutInflater.java:749)
    06-13
    21:10:10.584: E/AndroidRuntime(859): at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
    06-13
    21:10:10.584: E/AndroidRuntime(859): at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
    06-13
    21:10:10.584: E/AndroidRuntime(859): at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
    06-13
    21:10:10.584: E/AndroidRuntime(859): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:270)
    06-13
    21:10:10.584: E/AndroidRuntime(859): at android.app.Activity.setContentView(Activity.java:1881)
    06-13
    21:10:10.584: E/AndroidRuntime(859): at com.acaradolca.publi3.MainActivity.onCreate(MainActivity.java:23)
    06-13
    21:10:10.584: E/AndroidRuntime(859): at android.app.Activity.performCreate(Activity.java:5104)
    06-13
    21:10:10.584: E/AndroidRuntime(859): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
    06-13
    21:10:10.584: E/AndroidRuntime(859): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
    06-13
    21:10:10.584: E/AndroidRuntime(859): … 11 more
    06-13
    21:10:10.584: E/AndroidRuntime(859): Caused by: java.lang.ClassNotFoundException: Didn’t find class «com.google.ads.AdView» on path: /data/app/com.acaradolca.publi3-2.apk
    06-13
    21:10:10.584: E/AndroidRuntime(859): at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:65)
    06-13
    21:10:10.584: E/AndroidRuntime(859): at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
    06-13
    21:10:10.584: E/AndroidRuntime(859): at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
    06-13
    21:10:10.584: E/AndroidRuntime(859): at android.view.LayoutInflater.createView(LayoutInflater.java:552)
    06-13
    21:10:10.584: E/AndroidRuntime(859): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:687)
    06-13
    21:10:10.584: E/AndroidRuntime(859): … 22 more

    • En mi opinión no estás incluyendo correctamente la librería de ads en el proyecto. Debería aparecer la librería de Google-ads en el directorio libs y en referenced libraries

      • Me dado cuenta ahora, la ponia en build path(siguiendo un tutorialde google) pero no la copiava en la libreta libs.
        Ahora no me da error, aun no aparece el anuncio pero tengo entendio que la primera vez tarda unos minutos en aparecer.

        Muchas gracias.

      • Pues al final no aparecio. No se cuelga pero se queda sin aparecer aunque pase mas de media hora.
        En el logcat sale » 06-16 21:06:38.357: E/Ads(800): Not enough space to show ad! Wants: , Has: i 06-16 21:06:38.376: E/Ads(800): Not enough space to show ad! Wants: , Has: »
        Que me parece que es que que las medidas en pixeles del emulador, sabes como solucionar esto? he leido por ahi que eliminando la part de screensize en el manifest, pero entonces dentro del anuncio sale un mensaje de error de que configchanges en el manifest del Ad activity.
        Si la mando a un HTC(con la linia de confichanges entera) para probarlas, me da error durante la instalacion.

  3. Hola. Tengo el mismo problema (No aparece la publicidad, aparece el layout en blanco). Así lo tengo:

    – En Referenced Libraries: GoogleAdMobAdsSdk-6.4.1.jar

    – En el activity.java:

    AdView adView = new AdView(this, AdSize.SMART_BANNER, «ca-app-pub-xxxxxxxxxxxxxx/xxxxxxxxxx»);
    LinearLayout layout = (LinearLayout) findViewById(R.id.anuncio1);
    layout.addView(adView);
    adView.loadAd(new AdRequest());

    – En el layout.xml:

    He visto varios tutoriales y parece que esta todo bien… A ver si me puedes ayudar.

    Gracias!

    • – En el Layout (Que no se ha copiado):

      LinearLayout
      android:id=»@+id/anuncio1″
      android:layout_width=»match_parent»
      android:layout_height=»40dp»
      android:layout_weight=»0″
      android:layout_alignParentBottom=»true»
      android:orientation=»horizontal»
      android:background=»#FFFFFF»
      android:gravity=»center_horizontal»>
      LinearLayout

      • Y en el manifest:

        uses-permission android:name= «android.permission.INTERNET» />
        uses-permission android:name= «android.permission.ACCESS_NETWORK_STATE»/>

        activity
        android:name=»com.google.ads.AdActivity» android:configChanges=»keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize» />

Dejar respuesta