En este tutorial veremos cómo integrar AdMob, una de las redes de publicidad más populares, con nuestra aplicación o juego de Unity para android. Para ello usaremos el plugin oficial para Unity de Google Ads.
Una de las maneras de monetizar las aplicaciones para smartphones es el uso de publicidad. Esta publicidad suele presentarse en forma de banners, vídeos o popups que se muestran al usuario en determinados momentos de la utilización de la app. Si el usuario hace clic en alguno de los anuncios, el autor de la aplicación recibirá un porcentaje de lo que pague el anunciante por cada clic conseguido. Hay diferentes redes de publicidad que ofrecen diferentes servicios, pero en esta ocasión usaremos AdMob, red que es propiedad de Google. Además de la confianza que puede dar esto último, hay a nuestra disposición un plugin oficial para Unity que facilitará la integración de AdMob.
Descarga de Google Play Services
En primer lugar tenemos que descargar las librerías de Google Play Services, que serán necesarias para el correcto funcionamiento del plugin. Para descargarlas usaremos el Manager del SDK de android que podemos encontrar en la carpeta donde instalamos el SDK con el nombre de SDK Manager.exe
Lo arrancamos y seleccionamos los paquetes correspondientes a Google Play Services. Según he leído conviene descargar también el Google Repository así que lo marcamos también y descargamos e instalamos los paquetes.
Una vez se hayan descargado las librerías de Google Play Services podemos cerrar el SDK Manager. Mientras se descargan podemos pasar al siguiente paso.
Descarga del plugin de Google Ads e importación a Unity
Como hemos comentado antes, existe un plugin oficial de Google para integrar AdMob con las aplicaciones creadas con Unity, por lo que lo más sabio será utilizarlo.
Descargamos el plugin de Google Ads para Unity de la siguiente página (en la sección de Downloads):
https://github.com/googleads/googleads-mobile-plugins
Obtendremos un paquete de Unity llamado GoogleMobileAds.unitypackage que deberemos importar en cada proyecto en el que queramos usar AdMob.
Dentro del proyecto de Unity importamos este paquete a través del menú Assets > Import Package > Custom Package. Se crearán en la carpeta de Assets dos nuevas carpetas llamadas GoogleMobileAds y Plugins, que contienen los scripts y librerías del plugin.
Para terminar la configuración del plugin debemos buscar la carpeta google-play-services_lib, que se encuentra en android-sdk\extras\google\google_play_services\libproject, y copiarla a nuestro proyecto Unity en Assets\Plugins\Android. Este paso habrá que hacerlo en todos los proyectos que usen el plugin y si nos olvidamos obtendremos errores de compilación o ejecución.
Registro de la aplicación en AdMob y obtención de id de anuncio
Para poder mostrar anuncios en nuestra aplicación deberemos registrarla primero en AdMob y crear un anuncio para obtener el identificador que usaremos al invocarlo desde el código.
Vamos a https://www.google.es/ads/admob/ y accedemos a nuestra cuenta de AdMob o creamos una nueva (para lo cual solo necesitamos una cuenta de Google). Desde el panel de AdMob podemos crear una nueva aplicación para monetizar. Seleccionamos la opción de crear la aplicación manualmente, le asignamos un nombre y seleccionamos android como plataforma.
A continuación podemos crear un anuncio, ya sea un banner o un interstitial. Para este ejemplo crearemos un banner.
Tras crear el anuncio obtendremos su identificador, que tendrá una apariencia similar a esta: ca-app-pub-1234567890123123/1231231231
Uso del plugin de Google Ads para mostrar un banner de AdMob
Una vez configurado el plugin y registrada la aplicación en AdMob, ya estamos listos para mostrar los anuncios en nuestra aplicación o juego.
Simplemente creamos un objeto vacío en la escena (Game Object > Create Empty), que será el encargado de controlar los anuncios. A continuación creamos un script de C# llamado AdsManager y lo arrastramos al objeto vacío recién creado. Editamos el script y sustituimos el código por defecto por el siguiente:
using UnityEngine; using System.Collections; // Librerias de Google Ads using GoogleMobileAds; using GoogleMobileAds.Api; public class AdsManager : MonoBehaviour { public static AdsManager manager; // Patron Singleton void Awake () { if(manager == null) { // Persistente entre escenas DontDestroyOnLoad(gameObject); manager = this; } else if (manager != this) { // Solo puede haber 1 Destroy (gameObject); } } void Start() { // Creacion del banner BannerView bannerView = new BannerView("ID_BANNER_ADMOB", AdSize.Banner, AdPosition.Bottom); // Creacion de la peticion de anuncio AdRequest request = new AdRequest.Builder().Build(); // Carga del anuncio bannerView.LoadAd(request); } }
Como puede verse el código es muy sencillo. Sólo habrá que sustituir donde pone ID_BANNER_ADMOB por el id de anuncio obtenido en el paso anterior.
Y eso es todo! El banner de AdMob se mostrará en la aplicación…
Sin embargo, si compilamos y desplegamos la app en el dispositivo es probable que no veamos nada, y es que los anuncios de AdMob tardan en generarse desde su creación hasta una hora! ¿Cómo saber si hemos integrado correctamente AdMob entonces? Podemos usar anuncios de test.
Para activar los anuncios de test debemos obtener primero el ID de nuestro dispositivo. Para ello podemos usar el monitor localizable en las tools del SDK de android (android-sdk\tools\monitor.bat). Con el dispositivo conectado por USB y el monitor activo, arrancamos la aplicación de Unity y buscamos en el log del monitor una línea parecida a:
09-30 18:20:11.001: I/Ads(26786): Use AdRequest.Builder.addTestDevice("TU_ID_DISPOSITIVO") to get test ads on this device.
De la que podemos obtener el ID de nuestro dispositivo. Sólo tenemos entonces que modificar el código de AdsManager, cambiando la línea:
AdRequest request = new AdRequest.Builder().Build();
por esta otra:
AdRequest request = new AdRequest.Builder().AddTestDevice("TU_ID_DISPOSITIVO").Build();
Si ahora compilamos y desplegamos la aplicación deberíamos ver un banner de test de AdMob. Más tarde podemos probar a deshacer esta última modificación para comprobar que se muestran anuncios reales, pero en teoría los anuncios de test sólo se mostrarán en nuestro dispositivo, mostrándose anuncios reales en los de los usuarios.
No me muestra anuncios, cuando lo corro desde unity en el log si me dice dummy pero lo paso al celular y no aparece el anuncio, que me falta hacer seguí los pasos exactamente como este tuto.
Hola Osiris.¿Has probado con los anuncios de test que comento en la última parte? Otra cosa que puedes hacer es ejecutar monitor.bat del sdk de android y ver si al correr el juego en el teléfono te saca algún error relacionado con los ads. Un saludo
Pingback: Integración de Facebook en Unity para apps Android | El Blog de Marcos
No me copila me sale este error Error building Player: CommandInvokationFailure: Failed to re-package resources. See the Console for details.
C:\Users\Heriberto\Desktop\sdkandroid\android-sdk-windows\build-tools\21.1.0\aapt.exe package –auto-add-overlay -v -f -m -J gen -M AndroidManifest.xml -S “res” -I “C:/Users/Heriberto/Desktop/sdkandroid/android-sdk-windows/platforms/android-21\android.jar” -F bin/resources.ap_ –extra-packages com.google.android.gms -S “C:\Users\Heriberto\Documents\Line Esacpe\Temp\StagingArea\android-libraries\google-play-services_lib\res”
Estupendo tutorial Marcos, No conocía tu blog ya que llegué a él googleando pero ya tienes un seguidor más en Facebook para no perderme ni un post (no tienes Twitter?). Un saludo!
Perfecto !! Funcionó a la primera !
Gracias por tu post
hola nose que pasa a la hora de exportar mi juego me sale este tipo de error “Error building Player: CommandInvokationFailure: Unable to convert classes into dex format. See the Console for details.
C:\Program Files\Java\jdk1.8.0_25\bin\java.exe -Xmx1024M -Dcom.android.sdkmanager.toolsdir=”C:/Users/elvis/.android/sdk\tools” -Dfile.encoding=UTF8 -jar “C:/Program Files (x86)/Unity/Editor/Data/BuildTargetTools/AndroidPlayer\sdktools.jar”
a que se debe, ya habia exportado mi juego con las funcionalidades del GOOGLE PLAY GAMES y ahora que importe el nuevo plugin de ADMOB he hice lo mismo que nos enseñaste y ese es el error que me sale a la hora de exportar, por favor que es lo que pasa??
Hola elvis, es probable que el error se produzca porque haya 2 librerías iguales en distintos plugins, en este caso admob y google play. Esto produce un error al tratar de compilar dos veces las mismas clases. Busca en las carpetas de los plubins y elimina las librerías repetidas a ver si así se soluciona. Un saludo.
El banner creado no puede cerrarse no? Es decir, es permanente en el juego cuando se activa.
Efectivamente, a diferencia de los llamados interstitials (anuncios a pantalla completa), los banners de publicidad de Admob no pueden cerrarse. Un saludo!
Muy buen tutorial! Pero tengo una duda: Me gustaría que la publicidad de mi app sea de otros juegos, pero con la publicidad de admob me salen anuncios de toyota o de paginas web de ropa. Se puede cambiar eso?
Hola Toni! Me parece que en el panel de admob puedes desactivar y activar las categrías de anuncios que te interesa que se muestren. Échale un vistazo a ver.
Un saludo!
hola, me podrias decir si se puede mostrar el banner en una sola escena?
hola genial funciono a primera pero para hacer lo mismo que se active con un boton y solo corra un video de admod como puedo hacer?
Ya sé que lo han preguntado ya, pero respecto a que el banner no puede cerrarse, ¿no existe ninguna manera de mostrarlo y ocultarlo? lo digo porque además de haber visto juegos que lo hacen, he encontrado un asset de Unity llamado “AdsManager” (como tu singleton) que se supone que deja mostrar el banner con: “AdsManager.instance.ShowBanner()” y ocultarlo con “AdsManager.instance.HideBanner” (también hay un “AdsManager.instance.DestroyBanner” que no entiendo en que se diferencia del anterior…). Decir que este plugin también trabaja con otras networks como AdColony y CharBoost.
¿El que no se pueda ocultar es una particularidad de AdMob?
Gracias!