Tutorial: Nuestro sitio en una aplicacion Android 2

  • Autor Autor Cicklow
  • Fecha de inicio Fecha de inicio
Estado

🔒 Este tema está cerrado para nuevas respuestas.

⏰ Solo el creador del tema puede solicitar la reapertura de sus propios temas, pero únicamente dentro de los 60 días previos a la última actualización.

Cicklow

Cicklow

Admin
Épsilon
Verificado
Verificación en dos pasos activada
Verificado por Whatsapp
¡Ha verificado su Paypal!
Suscripción a IA
Anteriormente había explicado como usar AppInventor para colocar nuestro sitio en una aplicación Android. (http://forobeta.com/tutoriales/130009-nuestro-blog-aplicacion-android.html)

Hoy lo que aprenderán es a programar una sencilla programación en JAVA para colocar nuestro sitio en una apps android y tambien colocarle AdMOB (el adsense para mobiles, pagan por paypal y otras empresas).

Antes que nada, entiendan esto: tanto el tutorial anterior como este funcionan muy bien, pero si su sitio contiene AdSense, tendrán problemas, les explico, el problema no es que nuestro sitio para mobiles contenga adsense, ni tampoco que sea visualizado desde dentro de una aplicación android. El problema es que el WebView de android y appinventor están bugeados, cuando alguien hace clic en el banner de adsense, este no se abre en una nueva ventana, sino que se abre dentro del iframe de adsense. Y eso les traerá problemas. Es por eso que usaremos AdMOB!

Este tutorial va a ser bastante por arriba, ya que el entrar en bastante detalle significa que se hace muy extenso

Paso 1 - Instalar el SDK de android:
Setting Up an Existing IDE | Android Developers

Paso 2 - Instalar Eclipse Helios
Eclipse IDE for Java Developers | Eclipse Packages
Seleccionan sus SO y descargan e instalan Eclipse!

Paso 3 - Instalar ADT (Permite a eclipse crear apps android y firmarlas)
Installing the Eclipse Plugin | Android Developers

Los pasos del 1 al 3 no me detengo en detalles, porque sino esto se hace muy largo!

Paso 4 - Comenzamos
Una ves que tengan todo instalado, abren Eclipse, y van a File->New->Project->Android Application Project
1-3e14356.jpg

Colocamos:
- Nombre de nuestra aplicación
- Nombre del proyecto (se completa solo)
- Nombre del paquete. Esto es importante al crear apps, que no repitan nunca el mismo nombre de paquete. Sino si se trata de instalar una apps con un mismo nombre de paquete, que el cual ya existe en el celular, traerá problemas. Yo uso: com.cicklow.nombredelaapps
- Requerimientos minimos: API 5
- Destino del SDK: API 17
- Compilar usando: API 17
- Diseño: Holo....

Al darle en Next, veremos otra ventana, le damos Next de nuevo. En la 3 ventana podremos seleccionar el icono para nuestra apps. En la 4 ventana seleccionaremos Blank Activity, en la 5 ventana le damos finalizar y esperamos un momento a que eclipse cree nuestro proyecto.

Paso 5 - Agregar el SDK de AdMOB
Para poder colocar admob en nuestra apps android, tendremos que colocar el SDK en nuestro proyecto, para esto descargamos el SDK de admob, y lo colocamos dentro de la carpeta libs de nuestro proyecto.

Paso 6 - Editar detalles del proyecto
Para que admob funcione y tmb el webview en nuestra apps, tendremos que agregar unos permisos y detalles en el archivo AndroidManifiest.xml
Abajo de uses-sdk agregamos:
HTML:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Esto permite a la apps acceder al estado de la red y acceder a internet.

Antes de </aplication>
HTML:
<activity
            android:name="com.google.ads.AdActivity"
            android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" />
Esto nos permite usar AdMOB en nuestro proyecto.

Paso 7 - Editar los textos de nuestra apps
Vamos a res->values->string.xml y agregamos esto:
HTML:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">Mi Bonita Web</string>
    <string name="action_settings">Settings</string>
    <string name="idADS">a1518ddb8175128</string>
    <string name="idTMP">TEST_EMULATOR, TEST_DEVICE_ID</string>
    <string name="txtCargar">Cargar Contenido</string>
    <string name="title_activity_ver_web">Mi Sitio</string>
    <string name="alertT">Aviso</string>
    <string name="alertD">Desea cerrar la aplicacion?</string>
    <string name="alertSi">Si</string>
    <string name="alertNo">No</string>
</resources>
Estos textos los usaremos dentro de nuestra apps, son variables de textos a usar. como ven tenemos una variable llamada idADS, esa variable es la que tendremos que cambiar y colocar nuestro id de aplicacion de admob (cuando registramos una apps en admob, vale aclarar que no es necesario que este en google play la apps para que nos den el id, solo rellenamos los campos y cuando nos dice url de la aplicacion colocamos: market://details?id=com.cicklow.nombredemiapps y listo)

Paso 8 - Editar el diseño
Vamos a: res->layout->activity_main.xml y colocamos:
HTML:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#333333"
    tools:context=".MainActivity" >

    <com.google.ads.AdView
        android:id="@+id/adView"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true"
        ads:adSize="IAB_MRECT"
        ads:adUnitId="@string/idADS"
        ads:loadAdOnCreate="true"
        ads:testDevices="@string/idTMP"
        android:gravity="center_horizontal" >
    </com.google.ads.AdView>

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/adView"
        android:layout_centerHorizontal="true"
        android:onClick="btnCargar"
        android:text="@string/txtCargar" />
    
</RelativeLayout>
En detalle:
HTML:
    <com.google.ads.AdView
        android:id="@+id/adView"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true"
        ads:adSize="IAB_MRECT"
        ads:adUnitId="@string/idADS"
        ads:loadAdOnCreate="true"
        ads:testDevices="@string/idTMP"
        android:gravity="center_horizontal" >
    </com.google.ads.AdView>
Es nuestro banner de admob (como el de adsense pero desde xml), como ven en adSize tenemos IAB_MRECT, eso es un banner de 300x250 uno bien grande (https://developers.google.com/mobile-ads-sdk/docs/admob/intermediate).

HTML:
    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/adView"
        android:layout_centerHorizontal="true"
        android:onClick="btnCargar"
        android:text="@string/txtCargar" />
Esto es un boton, y como ven llamamos al texto txtCargar, creado previamente en el file strings.xml, tmb completamos el android😱nClick, esto es que cuando alguien hace clic, llamamos a una función de nuestro proyecto.
Y se armara el diseño asi:
2-3e14428.jpg

Esto es para mostrar admob antes de cargar nuestro sitio.

Paso 9 - Editamos src->com.cicklow.nombredenuestrapps->MainActivity.java
PHP:
//Nombre de nuestro paquete, en mi caso se llama: miBonitaWeb :)
package com.cicklow.mibonitaweb;

//Librerias necesarias para que nuestra apps funcione
import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.View;

public class MainActivity extends Activity {

 [MENTION=42437]over[/MENTION]ride
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	}

 [MENTION=42437]over[/MENTION]ride
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		//getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	//btnCargar es la funcion encargada de abrir una neuva actividad y msotrar nuestro sitio. Si recuerdan cuando creamos el boton le dijimos que cuando alguien haga clic llame a esta funcion
	public void btnCargar(View view){
		//Esto lo que hace es llamar a otra ventana, esta otra ventana contendrá el webview que mostrara nuestro sitio!
		Intent intent2 = new Intent(this, VerWeb.class);
		startActivity(intent2);
	}

	//Esta funcion lo que hace es capturar el boton atras de android, entonces si es precionado lo que hacemos es preguntar si quiere salir de la aplicacion
	public boolean onKeyDown(int keyCode, KeyEvent event) {
	    //Capturamos la tecla atras
	    if(keyCode == KeyEvent.KEYCODE_BACK && isTaskRoot()) {
	        //Preguntamos al usuario si quiere cerrar la apps
	        new AlertDialog.Builder(this)
	        .setIcon(android.R.drawable.ic_dialog_alert)
	        .setTitle(R.string.alertT)
	        .setMessage(R.string.alertD)
	        .setPositiveButton(R.string.alertSi, new DialogInterface.OnClickListener() {
	            public void onClick(DialogInterface dialog, int which) {
	                //Salimos
	                finish();    
	            }
	        })
	        .setNegativeButton(R.string.alertNo, null)
	        .show();

	        return true;
	    }
	    else {
	        return super.onKeyDown(keyCode, event);
	    }
	}
}

Paso 10 - Crear una nueva actividad (ventana)
Para esto hacemos clic derecho arriba de la carpeta de nuestro proyecto (en eclipse) y vamos a New->others->Android Activity->Blank activity
Como nombre de la actividad le colocamos: VerWeb

Paso 11 - Editar la nueva ventana
Vamos a res->layout->activity_ver_web.xml y colocamos:
HTML:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#333333"
    tools:context=".VerWeb" >

    <com.google.ads.AdView
        android:id="@+id/adView"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        ads:adSize="BANNER"
        ads:adUnitId="@string/idADS"
        ads:loadAdOnCreate="true"
        ads:testDevices="@string/idTMP"
        android:gravity="center_horizontal" >
    </com.google.ads.AdView>

    <WebView
        android:id="@+id/webView1"
        android:layout_width="fill_parent"
        android:layout_height="match_parent"
        android:layout_above="@+id/adView"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true" />

    <ProgressBar
        android:id="@+id/progressBar1"
        style="?android:attr/progressBarStyleLarge"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true" />

</RelativeLayout>
En detalle:
HTML:
   <WebView
        android:id="@+id/webView1"
        android:layout_width="fill_parent"
        android:layout_height="match_parent"
        android:layout_above="@+id/adView"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true" />
Este objeto es el encargado de mostrar nuestro sitio web (Recuerden el sitio a mostrar NO tiene que contener adsense, ni otra publicidad tipo iframe)

HTML:
    <ProgressBar
        android:id="@+id/progressBar1"
        style="?android:attr/progressBarStyleLarge"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true" />
Esto es una barra de progreso, pero sin definir el progreso, osea es la tipica barra giratoria.

Y quedara:
3-3e144a3.jpg


Paso 12 - editar el code java de: src->com.cicklow.nombredenuestrapps->VerWeb.java
PHP:
package com.cicklow.mibonitaweb;

import android.os.Bundle;
import android.app.Activity;
import android.graphics.Bitmap;
import android.view.Menu;
import android.view.View;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ProgressBar;

public class VerWeb extends Activity {
	//Creamos variables privadas que seran objetos webview y progressbar
	private WebView webView;
	private ProgressBar progress;
    
 [MENTION=42437]over[/MENTION]ride
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_ver_web);

		//obtenemos el id del objeto webview
		webView = (WebView) findViewById(R.id.webView1);
		//le decimos que vamos a usar una clase aparte para este navegador (de esta forma podremos controlar muchas cosas)
		webView.setWebViewClient(new MyWebViewClient());
		//obtenemos el id del objeto progressbar
		progress = (ProgressBar) findViewById(R.id.progressBar1);

		//habilitamos java script en nuestro sitio
		webView.getSettings().setJavaScriptEnabled(true);
		//Cargamos un sitio :)
		webView.loadUrl("http://twitter.github.com/bootstrap/");
	}

 [MENTION=42437]over[/MENTION]ride
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		//getMenuInflater().inflate(R.menu.ver_web, menu);
		return true;
	}

	//Creamos una clase extendida del webview, esto es para controlar mejor las funciones propias del webview
	private class MyWebViewClient extends WebViewClient {  
        [MENTION=42437]over[/MENTION]ride
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
               view.loadUrl(url);
               return true;
        }

        [MENTION=42437]over[/MENTION]ride
        public void onPageFinished(WebView view, String url) {
		//cuando la pagina termino de cargar ocultamos la barra de progreso
        	progress.setVisibility(View.GONE);
        	VerWeb.this.progress.setProgress(100);
        	super.onPageFinished(view, url);
       }

        [MENTION=42437]over[/MENTION]ride
       public void onPageStarted(WebView view, String url, Bitmap favicon) {
		//mientras el sitio carga hacemos que la barra de progreso sea visible
           progress.setVisibility(View.VISIBLE);
           VerWeb.this.progress.setProgress(0);
           super.onPageStarted(view, url, favicon);
       }
   }

   public void setValue(int progress) {
		//obtenemos el % de carga del sitio y lo asignamos a la barra de progreso.
       this.progress.setProgress(progress);       
   }
}

Paso 13 - testear todo nuestro proyecto
Para esto necesitaremos crear un emulador de android. Vamos a:
Windows->Android Virtual Device Manager-> New
4-3e14540.jpg


Una ves creado nuestro emulador, solo le damos clic al boton play verde y si nos pregunta que tipo de proyecto es, le decimos que es un proyecto de android.
Veremos algo como esto:
device-2013-05-11-043225-3e145bd.png


Paso 14 - compilar nuestro proyecto
Para compilar nuestro proyecto a un APK, solo le damos boton derecho arriba de la carpeta de nuestro proyecto:
Android Tools->Export signed apps android->Next
La 1° ves que vamos a firmar una apps, tendremos que crear un certificado. Completamos los datos, creamos uno y continuamos. Una ves que se completo la creación y el firmado de nuestra apps, ya la podremos usar en nuestro celular, tablets o colocarla en google Play 🙂


Saludos y éxitos.
Descarga del proyecto => MiBonitaWeb.rar
 
Gracias por el Aporte!! 🙂
 
Gracias por el aporte cicklow 🙂

Ahora, lo que hace la app es obtener los datos de la URL ¿verdad? Dígamos que como un tipo iframe. 😱

Entonces si tengo una url para móviles tipo m.sitio.com ¿Lo puedo usar en la app sin problemas?
 
Excelente aporte, gracias por compartir! :encouragement:
 
Gracias por el tutorial.
 
Última edición:
gracias por compartir... excepto que nunca me gusto programar java xd
 
Al fin te decidiste a realizar el tuto :encouragement: ..Lo estaba esperando mil gracias compañero cicklow pero si que esta enredado 😕 vamos a intentar entenderlo 😱nthego:
 
Gracias por el aporte cicklow 🙂

Ahora, lo que hace la app es obtener los datos de la URL ¿verdad? Dígamos que como un tipo iframe. 😱

Entonces si tengo una url para móviles tipo m.sitio.com ¿Lo puedo usar en la app sin problemas?

si es como un iframe. osea lo que hace es usar el navegador del android, pero mas limitado. vos agregas tu sitio y se vera. si ves el ejemplo lo que hago es leer el bootstrap de twitter y es responsive 🙂
 
si es como un iframe. osea lo que hace es usar el navegador del android, pero mas limitado. vos agregas tu sitio y se vera. si ves el ejemplo lo que hago es leer el bootstrap de twitter y es responsive 🙂

Muy bien, voy a testear entonces.

Muchas gracias 😀
 
gracias por el tuto!
 
Me interesa, empezaré a aprender un poco.
Gracias
 
Muy completo, aunque tanto codigo me asusta!
 
Una pregunta
Yo hago las app en phonegap eclipse hice una de mi web ya que la
Plantilla trae erosión móvil . No hay problema que mi publicidad de
Adsense salga en mi app ? Ya que lo que hace la app es abrir mi web con in iframe
 
Una pregunta
Yo hago las app en phonegap eclipse hice una de mi web ya que la
Plantilla trae erosión móvil . No hay problema que mi publicidad de
Adsense salga en mi app ? Ya que lo que hace la app es abrir mi web con in iframe

no funciona las ads se abren en el iframe. y eso es malo para adsense, podes hacer que te baneen!
 
Esta forma de implentar admob, sigue funcionando? O hay que añadirle google play a la app?
 
Estado

🔒 Este tema está cerrado para nuevas respuestas.

⏰ Solo el creador del tema puede solicitar la reapertura de sus propios temas, pero únicamente dentro de los 60 días previos a la última actualización.

Temas similares

WebmasterKing
Respuestas
5
Visitas
418
navarroo3189
N
loquiver
Respuestas
0
Visitas
95
loquiver
loquiver
jansel4800
Respuestas
10
Visitas
398
jansel4800
jansel4800
S
Respuestas
2
Visitas
281
goldfish
goldfish
Atrás
Arriba