WWebView和Facebook登录按钮

时间:2019-02-20 14:47:41

标签: android facebook webview

我正在通过webView component访问一个网站。在您可以选择使用Facebook登录的站点内,用户单击该按钮以使用Facebook帐户。但是我的应用程序在确认数据后卡住了,并且没有返回到站点页面。

如果我关闭该应用程序并再次打开,则似乎我使用之前尝试过的Facebook帐户登录。

我的XML:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context=".activitys.MainActivity"
    tools:showIn="@layout/app_bar_main">

    <FrameLayout
        android:id="@+id/webview_frame"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="1.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="1.0">

        <android.support.v4.widget.SwipeRefreshLayout
            android:id="@+id/swiperefreshlayout"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <WebView
                android:id="@+id/webView_site"
                android:layout_width="match_parent"
                android:layout_height="match_parent">


            </WebView>

            <ProgressBar
                android:id="@+id/progressBar"
                style="?android:attr/progressBarStyle"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal|center_vertical" />

        </android.support.v4.widget.SwipeRefreshLayout>
    </FrameLayout>

Application gets stuck in this activity

我在WebView组件所在的WebChromeClient页面上使用MainActivitywebview下面的代码。

CookieManager cookieManager = CookieManager.getInstance();
        cookieManager.setAcceptCookie(true);

        wb_site = (WebView) findViewById(R.id.webView_site);
        mContainer = findViewById(R.id.webview_frame);
        WebSettings webSettings = wb_site.getSettings();
        webSettings.setCacheMode(WebSettings.LOAD_DEFAULT);
        webSettings.setAllowFileAccess(true);
        webSettings.setJavaScriptEnabled(true);
        webSettings.setRenderPriority(WebSettings.RenderPriority.HIGH);
        webSettings.setAppCacheMaxSize(5 * 1024 * 1024); //5mb
        webSettings.setSupportZoom(true);
        webSettings.setAppCacheEnabled(true);
        webSettings.setLoadsImagesAutomatically(true);
        webSettings.setDatabaseEnabled(true);
        webSettings.setDomStorageEnabled(true);
        webSettings.setSupportMultipleWindows(true);
        webSettings.setSupportZoom(true);
        webSettings.setJavaScriptCanOpenWindowsAutomatically(true);

        wb_site.setWebViewClient(new MainActivity.Navegador());
        wb_site.setWebChromeClient(new UriChromeClient());

        wb_site.loadUrl(target_url);

        mContext = this.getApplicationContext();

private class Navegador extends WebViewClient {

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            String host = Uri.parse(url).getHost();
            Log.d("webviewclient", url);

            if (host.equals(target_url_prefix)) {

                if (mWebviewPop != null) {
                    mWebviewPop.setVisibility(View.GONE);
                    mContainer.removeView(mWebviewPop);
                    mWebviewPop = null;
                }
                return false;
            }

            if (host.equals("m.facebook.com")) {

                return false;

            }else {

                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);
        }



    private class UriChromeClient extends WebChromeClient {

        @Override
        public boolean onCreateWindow(WebView view, boolean isDialog,
                                      boolean isUserGesture, Message resultMsg) {

                    mWebviewPop = new WebView(mContext);
                    mWebviewPop.setVerticalScrollBarEnabled(true);
                    mWebviewPop.setHorizontalScrollBarEnabled(true);
                    mWebviewPop.setWebViewClient(new MainActivity.Navegador());
                    mWebviewPop.getSettings().setJavaScriptEnabled(true);
                    mWebviewPop.getSettings().setSavePassword(true);
                    mWebviewPop.getProgress();
                    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();
                   // Log.i("webchrome", "webchrome");


                return true;


        }

        @Override
        public void onCloseWindow(WebView window) {
            Log.d("onCloseWindow", "called");

        }

0 个答案:

没有答案