Integración de AdMob con Unity3D en Android

Llevaba algún tiempo queriendo aprender a integrar el servicio AdMob de anuncios de Google con una aplicación desarrollada en Unity3D. Finalmente, me decidí a desarrollar un pequeño juego de tipo puzzle llamado Súmalos e incluir en él dicho servicio de anuncios.

Lo primero que debemos de tener en cuenta, es que necesitamos una cuenta en AdMob y añadir dentro del mismo una nueva aplicación a monetizar. No es el objetivo de este post explicar como hacer esto; para ello, podéis echar un vistazo a excelentes tutoriales como este.

Una vez tengamos creada nuestra cuenta y añadida nuestra aplicación dentro de AdMob, necesitamos descargarnos el plugin oficial de Google.

Nos vamos a:

http://googleadsdeveloper.blogspot.com.es/2013/07/admob-plugin-for-unity3d.html y descargamos la versión para Android. El fichero que obtengamos, una vez descomprimido nos dará un paquete de Unity3D que ya podemos importar en nuestro juego.

Al importar este paquete nos creará en nuestra aplicación (si no la tenemos ya) una carpeta llamada Plugins y dentro de esta, otras dos llamadas AdMobPlugin y Android. La primera de ellas contiene el prefab que debemos de añadir a nuestra escena y dos scripts, AdMobPlugin.cs (el script interno de funcionamiento del plugin) y AdMobPluginDemoScript.cs (un ejemplo de funcionamiento y el fichero que tenemos que modificar);  la segunda de las carpetas (Android) contiene una librería llamada unityadmobactivity.jar.

Sin embargo, para que el plugin funcione correctamente, es necesario que descarguemos el SDK de admob y lo incluyamos en esta última carpeta. Para ello, nos vamos a la página https://developers.google.com/mobile-ads-sdk/download?hl=es#downloadandroid y nos descargamos la última versión de este SDK, que en el momento de escribir este post es la 6.4.1. (Nota: Al parecer, a partir del 1 de Agosto de 2014 este sistema se quedará obsoleto y Google no aceptará aplicaciones que no incluyan la nueva versión del SDK disponible a través de Google Play).

Descargamos ese zip, lo descomprimimos e incluimos la librería que contiene (GoogleAdMobAdsSdk-6.4.1.jar) dentro de la carpeta Plugins/Android. Ahora ya podemos arrastrar el prefab que se encuentra en Plugins/AdMobPlugin a nuestra escena; como vemos, tiene incluidos los dos scripts citados anteriormente. Para enlazar nuestra aplicación con nuestro anuncio necesitamos editar el script AdMobPluginDemoScript.cs; concretamente, debemos de modificar el método Start(), sustituyendo el texto “INSERT_YOUR_AD_UNIT_ID_HERE” por el ID de nuestro bloque de anuncios en AdMob que se encuentra en la zona tapada con un recuadro verde en la imagen siguiente:

admob

y añadiendo al final la línea AdMobPlugin.ShowBannerView();.

void Start() {

AdMobPlugin.CreateBannerView(“TU_ID_DE_ADMOB”, AdMobPlugin.AdSize.Banner, false);
AdMobPlugin.RequestBannerAd(true);
AdMobPlugin.ShowBannerView();
}

Aun nos falta un paso más: debemos de decirle a nuestra aplicación que incluya los permisos de acceso a internet y a estado de la red para que se muestren los anuncios. Para ello, necesitamos incluir un AndroidManifest.xml. Cuando Unity3D genera una aplicación para Android, incluye un AndroidManifest por defecto pero NO incluye estos permisos. Para solucionarlo, necesitamos copiar este fichero por defecto desde la carpeta <Carpeta de Unity>Editor\Data\PlaybackEngines\androidplayer a la carpeta de nuestro proyecto Assets/Plugins/Android donde ya estaban las librerías unityadmobactivity.jar y GoogleAdMobAdsSdk-6.4.1 y añadir las siguientes líneas (si no queréis realizar estos pasos, al final del artículo os dejo el AndroidManifest.xml que utilicé yo):

<uses-permission android:name=”android.permission.INTERNET”/>
<uses-permission android:name=”android.permission.ACCESS_NETWORK_STATE”/>

Al generar un nuevo apk, Unity3D incluirá este nuevo AndroidManifest.xml con los nuevos permisos añadidos.

En este punto deberían de mostrarse correctamente los anuncios en nuestra aplicación pero aun hemos de tener en cuenta dos últimas cosas:

  1. Unity3D trata nuestra aplicación como una sola Activity de Android independientemente del número de escenas que tenga; como AdMob va asociado a un activity, los anuncios se mostrarán en TODAS las escenas que tengamos aunque no esté el prefab de Admob en ellas. En mi caso, tenía el prefab en la escena del título del juego y al mostrar la escena de la ayuda (sin el prefab), los anuncios seguían saliendo apareciendo. Tenemos que controlar dónde salen y dónde no utilizando los métodos AdMobPlugin.ShowBannerView() y AdMobPlugin.HideBannerView().
  2. En ocasiones, los anuncios aparecen pero no son “clickables”. Para evitar este problema, tenemos que encontrar en el AndroidManifest.xml la línea <meta-data android:name=”unityplayer.ForwardNativeEventsToDalvik” android:value=”false” /> y poner el valor a true. En mi caso, además de hacer este cambio, tuve que incluir la línea en dos activities distintas.

Os dejo el AndroidManifest.xml que finalmente me funcionó: AndroidManifest