PDA

Ver la Versión Completa : WebView Login php


rafaxplayer
20/08/14, 10:10:40
Saludos genete , tengo implementado en mi app un webview , a el accedo a unas urls de un foro, pero antes de acceder me gustaria loguearme en dicho foro con la url tipica "http://www.miforo.com/login.php?username=us&password=pass" , he probado varias cosas pero o me muestra el json de retorno en el webview o simplemente no loguea , esta tarea seguro es mas fácil de lo que creo pero nunca la he realizado con webview, podéis darme un norte?
mi codigo para acceder a las urls normales es este, totalmente funcional:


load_url(this,url);

public void load_url(final Activity activity,final String Url){


web.getSettings().setJavaScriptEnabled(true);
web.getSettings().setBuiltInZoomControls(true);
web.setWebChromeClient(new WebChromeClient() {
public void onProgressChanged(WebView view, int progress)
{
activity.setTitle(R.string.cargando);
activity.setProgress(progress * 100);

if(progress == 100) {
activity.setTitle(Url);}
}
});

web.setWebViewClient(new WebViewClient() {
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl)
{
// Handle the error
}


@Override
public void onLoadResource(WebView view, String url) {
// TODO Auto-generated method stub
super.onLoadResource(view, url);
Web.this.url=url;
}

@Override
public boolean shouldOverrideUrlLoading(WebView view, String url)
{
view.loadUrl(url);
return true;
}
});

web.loadUrl(Url);

}


Despues intente esto que encontré por hai antes de cargar la url:


if(login) {
String data = "username="+username+"&password="+password;
web.postUrl("http://www.miforo.com/login.php", EncodingUtils.getBytes(data, "base64"));

}


no se... normalmente como se realiza este tipo de tarea?

kriogeN
20/08/14, 12:58:09
Es que si te pide el username y el password en el Query lo más probable es que sea un API y no una Web, y por eso te devuelve un JSON (que incluirá un token para usarlo en el resto de páginas).

En cuanto a lo segundo, si va en Query (y si es un servicio de Login de un API) irá en GET y no en POST, lo de convertirlo a Base64 no tiene sentido.

Si es una página web de Login entonces lo más probable es que use un xxx-form-urlencoded, y en ese caso los parámetros de username y password irán en el Body y no en el Query, y en ese caso si serán un servicio POST y no GET.

Dexafree
20/08/14, 13:06:37
No termino de entender lo que quieres hacer

Que el usuario ponga sus credenciales en tu app en otro sitio, y tu cargues el WebView con la sesion ya iniciada?

1.- Tendrás que dar algún tipo de política de privacidad en la que indiques que no te guardarás los datos, sobretodo de cara a que los usuarios se sientan cómodos (y evidentemente cumplirla)

2.- Si lo que quieres hacer es eso, necesitarias:
a) Conocer el metodo de autenticacion del login.php (probablemente reciba un username y un password, pero necesitaras saber con que nombre los recibe, y si recibe algun parametro mas)
b) Hacer la peticion POST al webservice login.php y capturar la cookie de la respuesta, y una vez capturada, pasarla a cada peticion que hagas en el WebView

rafaxplayer
20/08/14, 14:24:17
No termino de entender lo que quieres hacer

Que el usuario ponga sus credenciales en tu app en otro sitio, y tu cargues el WebView con la sesion ya iniciada?

1.- Tendrás que dar algún tipo de política de privacidad en la que indiques que no te guardarás los datos, sobretodo de cara a que los usuarios se sientan cómodos (y evidentemente cumplirla)

2.- Si lo que quieres hacer es eso, necesitarias:
a) Conocer el metodo de autenticacion del login.php (probablemente reciba un username y un password, pero necesitaras saber con que nombre los recibe, y si recibe algun parametro mas)
b) Hacer la peticion POST al webservice login.php y capturar la cookie de la respuesta, y una vez capturada, pasarla a cada peticion que hagas en el WebView

Bueno dentro de mis conocimientos , el login.php solo necesita dos parametros username y password y retorna un json con nombre de usuario y un LOGIN_SUCCESFULL o LOGIN_FAILED en su defecto como este:
{"login":"LOGIN_SUCCESS","username":"rafaxplayer"}
esta url con los parametros en navegador me loguea en el foro sin problemas y ya puedo acceder cuando kiera ya logueado .

supongo que el tema cookies es lo importante , pero es un tema que no domino nada , esta url aparte del json que retorna se puede obtener la cookie para usarla en siguientes visitas? algun ejemplo o algo de como realizar esto?

terroid
22/08/14, 01:23:19
stackoverflow cookie android post

rafaxplayer
24/08/14, 07:50:41
Bueno al final lo he arreglado sin cookies , el problema es que no daba tiempo al hacer login y luego cargar la url a actuar a las cookies para entrar ya identificado , esto me sirvió a mi:

web=(WebView)findViewById(R.id.webView1);

if(login) {

String data = "username="+username+"&password="+password;
web.postUrl(Urllogin, EncodingUtils.getBytes(data, "base64"));
// necesario para que de tiempo a actuar las cookies
SystemClock.sleep(1000);
}
load_url(url);