Android WebView para Facebook como botón
Estoy tratando de hacer facebook como funcionalidad en Android WebView (especificación del proyecto no permite la apertura del navegador, o cualquier fuera de la actividad de la aplicación ).
Por lo tanto, las restricciones son que tiene que hacerse en WebView. He logrado hacer que sea un diálogo, y un clic del usuario en el botón, como (el WebView) redirecciona con éxito (en la misma vista) a la página de inicio de sesión de Facebooks. Después de la autenticación exitosa, el WebView
(en un diálogo) se redirige a la página en blanco con encabezado de Facebook.
- Android: EventHub.removeMessages (int what = 107) no es compatible antes de que se configure WebViewCore
- Cargar la imagen en caché de WebView en un ImageView
- WebView - no puede descargar el archivo sin solicitarlo dos veces?
- Obteniendo webViewClient.shouldInterceptRequest () en android 2.x
- Cómo buscar Android ViewFlipper Ejemplo con varias WebViews
Curiosamente, cuando el usuario deja el cuadro de diálogo en blanco y haga clic de nuevo en el botón similar que funciona como perfectamente (como y al contrario) – de alguna manera mantiene la autenticación activa. Para resolver la página en blanco, he intentado / usado siguiendo:
- Utilizando
WebViewClient
yshouldOverloadUrlForwarding
para mantener todo el proceso en el mismo diálogo deWebView
. - Utilizando
WebChromeClient
para ejecutar correctamente JavaScript – sin que después de iniciar sesión no es posible a like / unlike. -
setUserAgentString()
usarsetUserAgentString()
para simular otros navegadores como Chrome o Firefox -
WebViewClient
manejo del certificado del error del SSL (en el nivel 8 de la API) (enWebViewClient
)@Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { handler.proceed(); }
-
Utilizando (y toda la combinación posible de estos)
webView.getSettings().setAppCacheEnabled(true); webView.getSettings().setJavaScriptEnabled(true); webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
-
Intentó también persistir las galletas con
CookieSyncManager
,CookieManager
y manejar manualmente.
Todo esto fue sin resultado. Realmente aprecio cualquier ayuda!
- ¿Qué hace stopLoading () realmente hacer?
- Android: cómo interceptar un formulario POST en android WebViewClient en el nivel 4 de API
- Abrir PDF en un WebView
- SaveState de Webview no maneja WebViewClient personalizado
- WebView Crash por java.io.IOException: cerrar error: EIO (error de E / S) libcore.io.IoUtils.close (IoUtils.java:41)
- Cómo obtener la página en blanco en Android WebViewClient
- Compruebe el método onReceivedSslError () de un WebViewClient si se firma un certificado desde una CA propia auto-firmada
- Deshabilitar Android WebView / WebViewClient Iniciado favicon.ico Solicitar
Para pasar la página en blanco, haz esto:
webview.setWebViewClient(new LikeWebviewClient(this)); private class LikeWebviewClient extends WebViewClient { @Override public void onPageFinished(WebView view, String url) { Log.d(TAG, "onPageFinished url: " +url); // Facebook redirects to this url once a user has logged in, this is a blank page so we override this // http://www.facebook.com/connect/connect_to_external_page_widget_loggedin.php?............ if(url.startsWith("http://www.facebook.com/connect/connect_to_external_page_widget_loggedin.php")){ String redirectUrl = getFacebookLikeUrl(); view.loadUrl(redirectUrl); return; } super.onPageFinished(view, url); } }
Tuve el mismo problema en mi aplicación Android. La causa del problema es FB login javascript abre una nueva página en una nueva ventana. A continuación, intenta cerrarlo después del éxito de inicio de sesión. Por favor, siga el ejemplo fluido de mis códigos de trabajo.
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#0099cc" tools:context=".MyActivity" android:id="@+id/webview_frame"> <WebView android:id="@+id/webview" android:layout_width="fill_parent" android:layout_height="fill_parent" />
La vista Webview
de id "webview" es la vista principal de mi contenido. Abajo están mis códigos de actividad.
public class MyActivity extends Activity { /* URL saved to be loaded after fb login */ private static final String target_url="http://www.example.com"; private static final String target_url_prefix="www.example.com"; private Context mContext; private WebView mWebview; private WebView mWebviewPop; private FrameLayout mContainer; private long mLastBackPressTime = 0; private Toast mToast; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_urimalo); // final View controlsView = // findViewById(R.id.fullscreen_content_controls); CookieManager cookieManager = CookieManager.getInstance(); cookieManager.setAcceptCookie(true); mWebview = (WebView) findViewById(R.id.webview); //mWebviewPop = (WebView) findViewById(R.id.webviewPop); mContainer = (FrameLayout) findViewById(R.id.webview_frame); WebSettings webSettings = mWebview.getSettings(); webSettings.setJavaScriptEnabled(true); webSettings.setAppCacheEnabled(true); webSettings.setJavaScriptCanOpenWindowsAutomatically(true); webSettings.setSupportMultipleWindows(true); mWebview.setWebViewClient(new UriWebViewClient()); mWebview.setWebChromeClient(new UriChromeClient()); mWebview.loadUrl(target_url); mContext=this.getApplicationContext(); } private class UriWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { String host = Uri.parse(url).getHost(); //Log.d("shouldOverrideUrlLoading", url); if (host.equals(target_url_prefix)) { // This is my web site, so do not override; let my WebView load // the page if(mWebviewPop!=null) { mWebviewPop.setVisibility(View.GONE); mContainer.removeView(mWebviewPop); mWebviewPop=null; } return false; } if(host.equals("m.facebook.com")) { return false; } // Otherwise, the link is not for a page on my site, so launch // another Activity that handles URLs Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); startActivity(intent); return true; } @Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { Log.d("onReceivedSslError", "onReceivedSslError"); //super.onReceivedSslError(view, handler, error); } } class UriChromeClient extends WebChromeClient { @Override public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) { mWebviewPop = new WebView(mContext); mWebviewPop.setVerticalScrollBarEnabled(false); mWebviewPop.setHorizontalScrollBarEnabled(false); mWebviewPop.setWebViewClient(new UriWebViewClient()); mWebviewPop.getSettings().setJavaScriptEnabled(true); mWebviewPop.getSettings().setSavePassword(false); mWebviewPop.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); mContainer.addView(mWebviewPop); WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj; transport.setWebView(mWebviewPop); resultMsg.sendToTarget(); return true; } @Override public void onCloseWindow(WebView window) { Log.d("onCloseWindow", "called"); } } }
La clave para este problema es onCreateWindow
. Se crea una nueva ventana y se inserta en el diseño del marco y se quita con éxito. He añadido la eliminación en shouldOverrideUrlLoading
.
Tuve que trabajar a través de este casi exactamente el mismo problema en el iPhone. Lo que tenía que hacer era interceptar la solicitud que la webview hace a la "página en blanco" descrita anteriormente, y en su lugar decirle a la webview para cargar la URL como.
No funcionó para mí :(, pero la forma de observación i percibir que mal redireccionado enlace comenzó con
url.startsWith("http://m.facebook.com/a/profile.php?fan&id"))
- Configuración de TeamCity para crear el proyecto de Android Studio
- Google inicia sesión y termina sesión en android con la última API de g-plus