Vista Web de Android
En mi aplicación, quiero que los usuarios puedan iniciar sesión con su cuenta de Facebook. Después de algunas búsquedas, soy capaz de averiguar esto aunque no creo que de esta manera es el mejor método. Utilicé una webview en mi interfaz de usuario y un webviewclient para detectar conmutaciones de url. Como entiendo, en Android, debo manejar todas las redirecciones en mi webviewclient (redirecciones de Facebook, varias redirecciones suceden cuando el usuario establece su correo electrónico y contraseña). Pero todo lo que necesito es analizar mi xml de salida y tomar una decisión de acuerdo al resultado de salida (redirigir a mi casa activiy o fallo, etc). Aquí está mi código, por favor dé sus sugerencias si el método más conveniente existe.
public class FbLoginActivity extends Activity { String fbLoginBaseUrl = "{my server url}/facebook/redirector.jsp?"; private ProgressDialog progressBar; WebView webView; int count = 0; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.fb_login); fbLoginBaseUrl += "usdId=NoSession:"; fbLoginBaseUrl += Subroutines.getInstance().getDeviceId() + "_L"; webView = (WebView) findViewById(R.id.webview); webView.getSettings().setJavaScriptEnabled(true); webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE); progressBar = ProgressDialog.show(FbLoginActivity.this, "", "Page is loading..."); webView.setWebViewClient(new HelloWebViewClient()); webView.loadUrl(fbLoginBaseUrl); } private class HelloWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); Log.v(Subroutines.TAG, url); return true; } @Override public void onPageFinished(WebView view, String url) { Log.i(Subroutines.TAG, "Finished loading URL: " +url); // if login screen loading finishes, cancel the progressdialog.. // twice redirecting happens to this sub url.. String subFace = "m.facebook.com/login.php"; if(url.indexOf(subFace) != -1 && ++count == 2){ if (progressBar.isShowing()) { progressBar.cancel(); } } // Permission redirecting.. String loginSub = "www.facebook.com/connect/uiserver.php?method=permissions.request"; if(url.indexOf(loginSub) != -1){ progressBar = ProgressDialog.show(FbLoginActivity.this, "", "Logging in..."); } // finally if my server makes a response.. String sub = "{my server url}/facebook/connect.jsp"; if(url.indexOf(sub) != -1){ Log.v(Subroutines.TAG, "my server makes a response.."); // xml parsing stuff.. // use url content to parse } } @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { Log.e(Subroutines.TAG, "Error: " + description); } } }
- Android: cómo interceptar un formulario POST en android WebViewClient en el nivel 4 de API
- Obtener recursos de WebView que ya se ha descargado
- ¿WebViewClient y WebChromeClient se excluyen mutuamente?
- WebViewClient que devuelve "No se pudo establecer una conexión segura." Al recrear el fragmento
- ShouldOverrideUrlLoading se llama SOLAMENTE para ALGUNAS páginas web
- Android WebClient, devolver un recurso de imagen a través de WebResourceResponse - no mostrar la imagen
- WebViewClient.onPageStarted () llamó dos veces al especificar URL no existente a través de WebView.loadURL ()
- OnPageStart se llama muchas veces y onPageFinished no se llama para una sola página
- Cómo buscar Android ViewFlipper Ejemplo con varias WebViews
- ¿Cuál es la diferencia entre setWebViewClient y setWebChromeClient?
- WebView de Android ignorando target = "_ blank" cuando se agrega WebViewClient
- ¿Qué se considera onPageFinished en el WebViewClient para Android?
- Sube la foto de la cámara y el archivador de archivos desde el campo INPUT de la vista web
Me gustaría obtener el SDK de Facebook y utilizar sus funciones
En pocas palabras usted hace esto:
public Facebook facebook = new Facebook("appID");
Luego en crear o en cualquier lugar:
facebook.authorize(this,String[] YourNeededPermissions, new DialogListener() { @Override public void onComplete(Bundle values) {} @Override public void onFacebookError(FacebookError error) {} @Override public void onError(DialogError e) {} @Override public void onCancel() {} });
Puedes ver esto aquí: http://developers.facebook.com/docs/guides/mobile/#android
Tengo realmente un problema similar en la integración del registro de Facebook con mi propio (pero no soy el desarrollador de Android). Le hice la pregunta aquí Facebook flujo de registro de Android, pero no sabía acerca de la webview. Que parece una buena solución, ¿Puedo contactar con usted por chat o por otros medios?
EDIT: Facebook acaba de actualizar su procedimiento de inicio de sesión: https://developers.facebook.com/docs/offline-access-deprecation/ como se puede ver, ahora el token que obtiene de SSO (o cualquier otro token de cliente) está vinculado sólo a su aplicación (hay una validación de token-app id-app secreto). El punto final es ahora
https://graph.facebook.com/oauth/access_token? client_id=APP_ID& client_secret=APP_SECRET& grant_type=fb_exchange_token& fb_exchange_token=EXISTING_ACCESS_TOKEN
Así que con el facebook sdk para android los pasos son: 1) obtener el usuario firmado 2) enviar el token al servidor 3) servidor de validar el token contra su app id y secreto de la aplicación 4) agregar sus propias características de seguridad