Кнопка входа в WWebView и Facebook - PullRequest
0 голосов
/ 20 февраля 2019

Я захожу на сайт через 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>

Приложение застревает в этом действии

Я использую код ниже с WebView и WebChromeClientна странице MainActivity, где компонент webview.

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

        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...