Single Tech Games

LeadBolt y LibGDX, Como mostrar una pagina web en tu juego

¿Se acuerdan que en el post anterior dije AdWalls son intrusivos, malos, sucios, cochinos y que nadie debería usarlos? bueno hoy les voy a mostrar como los coloque en mi juego, pero lo hice por una causa trascendental y profunda… el dinero ($_$) es que el dinero no da la felicidad, pero prefiero llorar en un ferrari XD .
El caso es que no quiero usar el sdk de leadbolt, entonces me dieron otra solución, usar su AppWall en versión Html, ahora lo único que tengo que hacer es visualizar una pagina web dentro de mi juego, nada más… ok no se emocionen es más facil decirlo que hacerlo, comencemos:

Dialog
La pregunta es, si Google dice que no utilicemos los AdWalls de manera intrusiva y/o forzemos algún tipo de descarga entonces, ¿que es lo que debo utilizar?, después de probar varias opciones me di cuenta que los Dialog son mi mejor opción, no son intrusivos y con el botón regresar te deshaces de ellos, así que lo primero es abrir el proyecto en Android y crear una clase AppWall.java y colocarle esto:

import android.app.Dialog;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.webkit.WebView;
import android.widget.LinearLayout;
public class AppWall {
private final static String APP_TITLE = "Other Cool Apps";
private final static String DIRECTION = "http://ad.leadboltads.net/show_app_wall?section_id=286686300";
public static void showWallDialog(final Context mContext) {
final ConnectivityManager administradorConexiones =
(ConnectivityManager)mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
// Return true if connected, either in 3G or wi-fi
final boolean conectado =
(administradorConexiones.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.CONNECTED ||
administradorConexiones.getNetworkInfo(ConnectivityManager.TYPE_WIFI  ).getState() == NetworkInfo.State.CONNECTED   );
if (conectado){
final Dialog dialogo = new Dialog(mContext);
dialogo.setTitle(APP_TITLE);
LinearLayout ll = new LinearLayout(mContext);
ll.setOrientation(LinearLayout.VERTICAL);
WebView webView = new WebView(mContext);;
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl(DIRECTION);
ll.addView(webView);
dialogo.setContentView(ll);
dialogo.show();
}
}
}

Lo único que hice fue chequear que hubiera conexión a internet, y si lo hubiera creo un layout, le paso el webview y lo muestro, nada del otro mundo, recuerden que necesitan acceso al wifi y a internet, obviamente para eso en su AndroidManifest.xml deben colocar lo siguiente:

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

LibGDX
Ahora viene lo bueno, no se si ustedes están usando Admob como publicidad, pero en caso de hacerlo deben haber seguido este tutorial, y si no lo hicieron háganlo 😛 , lo primero a modificar es la interface IActivityRequestHandler en el proyecto donde esta el juego, y le agregamos este método:

public interface IActivityRequestHandler {
public void showAds(boolean show);
public void showWall(boolean show);
}

Regresamos a nuestro proyecto en Android y en la clase que implementa la interface IActivityRequestHandler, agregamos el método faltante showWall y ademas implementamos un manejador y una clase que devuelva nuestro propio Context:

public class JuegoActivity extends AndroidApplication implements IActivityRequestHandler  {
private final int SHOW_ADS = 1;
private final int HIDE_ADS = 0;
protected Handler manejador = new Handler()
{
@Override
public void handleMessage(Message msg) {
switch(msg.what) {
case SHOW_ADS:
{
AppWall.showWallDialog(manejadorContexto());
break;
}
}
}
};
private Context manejadorContexto(){
return this;
}
@Override
public void showWall(boolean show) {
// TODO Auto-generated method stub
manejador.sendEmptyMessage(show ? SHOW_ADS : HIDE_ADS);
}
}

Regresamos  de nuevo a nuestro proyecto LibGDX y en la clase que extendemos game tenemos el siguiente código:

public class Juego extends Game{
private IActivityRequestHandler myRequestHandler;
public Screen menuPrincipal;
public Juego(IActivityRequestHandler myRequestHandler) {
super();
this.myRequestHandler = myRequestHandler;
}
@Override
public void create() {
Recursos.cargar();
menuPrincipal = new PantMenuPrincipal(this,myRequestHandler);
setScreen(menuPrincipal);
}

Como se darán cuenta, mi primera pantalla en mostrar se llama Menu Principal y es hay donde quiero que se muestre el AdWall, por lo tanto voy a mi clase MenuPrincipal.java que implementa Screen y en el constructor le agrego esto:

public class PantMenuPrincipal implements Screen {
private IActivityRequestHandler myRequestHandler;
public PantMenuPrincipal(Game Juego1,
IActivityRequestHandler myRequestHandler) {
this.myRequestHandler = myRequestHandler;
myRequestHandler.showWall(true);
}

Pero como quiero que se muestre una sola vez y no a cada rato, en el método update coloco:

private void Update(float DeltaTime) {
myRequestHandler.showWall(false);
    }

Entonces quedaría que el Adwall solo mostraría una sola vez al iniciar la pantalla y nada más, por si las moscas, en el constructor de la siguiente pantalla coloco showWall(False) también para que no vuelva a aparecer el AdWall y listo tenemos un AppWall funcionando dentro de dialog que no es intrusivo y que se puede eliminar de la pantalla sin problemas con el botón regresar del dispositivo.
Suerte!

0 0 votes
Article Rating
Subscribe
Notify of
guest
10 Comments
Newest
Oldest Most Voted
Inline Feedbacks
View all comments

[…] Muros con publicidad (Lo que uso en LeadBolt) […]

diego

hola, ya confirme que se llama el metodo destroy de mi actividad principal al darle click al anuncio, y por eso creo que no puedo volver a mi juego. no entiendo por que se llama?, me falta configurar algo para evitar eso?.

diego

gracias, probare. no había pensado que fuera la tablet porque hay juegos que si les funciona la publicidad.

diego

Hola, tu blog me parece excelente.
tengo un bug haber si de pronto me podes ayudar:
implemente admob con el tutorial de libgdx y funciona perfectamente en el emulador, pero cuando voy a probar en la tablet cuando le doy click al anuncio me abre la publicidad bien, pero me es imposible volver al juego con el botón back. este no funciona, al darle abre otro anuncio y así sucesivamente.
la única forma de correr otra vez el juego es desinstalarlo y volverlo a correr.
lo unico raro que he visto es que sale este error al darle click al anuncio, no se mucho sobre android apenas estoy aprendiendo, pero creo que destruye la actividad del juego en libgdx?.
E/webview(5302): Error: WebView.destroy() called while still attached!

Emilio

Hola, estoy interesado en integrar LeadBolt en mi juego y he visto que tu solución es magnífica, no molesta al usuario y además creo que es la mejor opción para ingresar este tipo de Ads. He leido que conseguiste que te dieran una forma de usar su AppWall en versión Html, ¿cómo puedo pedir ésto para que me manden la dirección para mostrar el anuncio en HTML?
Además, otra duda que creo que me puedes responder, al dar de alta un juego te piden que elijas “Opt-In Display *:” ¿me podrías decir que diferencias hay entre uno u otro? He leido por internet y no encuentro nada que me aclare cual elegir.
Muchísimas Gracias por tu blog.

[…] mes a mediados arranque con Leadbolt y un appWall por lo que habrán un poquito más de ganancias, […]