当前位置: 首页 > 知识库问答 >
问题:

Android Google登录在WebView中不工作

翟光赫
2023-03-14

我是android开发的新手。尝试在Android web View中整合FB和Google+登录。FB登录正常。但谷歌登录是不允许登录的。我参考了几个链接,但无法成功。

问题是在Gmail中提供用户名和密码后,我的网站无法登录

webview覆盖在另一个webview上

Google登录不工作的android webview应用程序

Google登录不工作的android webview应用程序

private class MyCustomWebViewClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        String host = Uri.parse(url).getHost();
        Log.d("Loading URL", 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.contains("m.facebook.com") || host.contains("facebook.co")
                || host.contains("google.co")
                || host.contains("www.facebook.com")
                || host.contains(".google.com")
                || host.contains(".google")
                || host.contains("accounts.google.com/signin/oauth/consent")
                || host.contains("accounts.youtube.com")
                || host.contains("accounts.google.com")
                || host.contains("accounts.google.co.in")
                || host.contains("www.accounts.google.com")
                || host.contains("oauth.googleusercontent.com")
                || host.contains("content.googleapis.com")
                || host.contains("ssl.gstatic.com")
            //     || host.contains("https://accounts.google.com/signin/oauth/consent")

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

    @Override
    public void onPageFinished(WebView view, String url) {
        if (url.startsWith("https://m.facebook.com/v2.7/dialog/oauth")


        ) {
            if (mWebviewPop != null) {
                mWebviewPop.setVisibility(View.GONE);
                mContainer.removeView(mWebviewPop);
                mWebviewPop = null;
            }
            view.loadUrl("https://www.cbazaar.com");
            return;
        }

        super.onPageFinished(view, url);
    }
}

private class UriWebChromeClient 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 MyCustomWebViewClient());
        mWebviewPop.setWebChromeClient(new UriWebChromeClient());
        mWebviewPop.getSettings().setJavaScriptEnabled(true);
        mWebviewPop.clearHistory();
        mWebviewPop.clearFormData();
        mWebviewPop.clearCache(true);
        mWebviewPop.getSettings().setSavePassword(true);
        mWebviewPop.getSettings().setSaveFormData(true);
        mWebviewPop.getSettings().setUserAgentString(USER_AGENT_FAKE);

        builder = new AlertDialog.Builder(MainActivity.this, AlertDialog.THEME_DEVICE_DEFAULT_LIGHT).create();

        builder.setTitle("");
        builder.setView(mWebviewPop);

        builder.setButton("close", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int id) {
                mWebviewPop.destroy();
                dialog.dismiss();

            }
        });

        builder.show();
        builder.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);

             /*   CookieManager cookieManager = CookieManager.getInstance();
                cookieManager.setAcceptCookie(true);
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                    cookieManager.setAcceptThirdPartyCookies(mWebviewPop,true);
                }
    */

        WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
        transport.setWebView(mWebviewPop);
        resultMsg.sendToTarget();

        return true;
    }


    @Override
    public void onCloseWindow(WebView window) {

        try {
            mWebviewPop.destroy();
        } catch (Exception e) {
        }

        try {
            builder.dismiss();

        } catch (Exception e) {
        }

    }

}

共有1个答案

冀翰翮
2023-03-14

Google不允许使用WebView的默认实现。因此,您需要为WebView设置一个自定义用户代理:

webView.getSettings().setUserAgentString("YourAppName");

您可以使用任何字符串来代替YourAppName

 类似资料:
  • 我用WebView创建了Android应用程序。当尝试用谷歌登录时,它首先询问用户名和密码,然后屏幕显示‘请关闭此窗口’的信息&什么也没有发生。 用户也未登录。 附注。这对我的移动网站来说是非常好的,它本身就被移植到了Android Webview应用程序上。有人能说出为什么那不起作用吗?我对Android是完全陌生的。

  • 问题内容: 我无法使用JavaFX WebView登录到Google。当我单击“下一步”按钮时,该页面无法加载。 在不同网站上的其他登录也可以正常工作。 这是您可以运行的示例: 屏幕截图在这里 问题答案: 精简版: 在加载页面之前,将以下行添加到您的main方法中: 长版: 我的第一个直觉是JavaScript无法正常工作,但是我测试了伪邮件并正确地得到了错误: 找不到您的Google帐户 因此,

  • 我无法在JavaFX WebView中登录谷歌。当我单击“下一步”按钮时,页面未加载。 不同网站上的其他登录也可以。 这是一个您可以运行的示例: 此处截图

  • 我正在Java创建一个管理系统。 我有这个登录表。与数据库的连接看起来很好,因为它没有给出错误。 但是当我尝试执行try{}和catch{}时,它给出了一个错误。 我希望有谁能帮助我。 它总是给出: catch(Exception ex){JoptionPane.ShowMessageDialog(null,“登录操作错误”,“登录错误”,JoptionPane.Error_Message);}

  • 首先,我想让你知道,我是新来的Symfony。我在路上把我的PHP项目从我自己的“基本”MVC转到SimfOn.该项目已经运行良好,但我在适应Symfony时遇到了一些问题。 我从基本的框架开始,make: user和make: auth。模板运行良好。但是我未能将登录过程转换为AJAX和JSON。 我遵循了这个官方教程:https://symfonycasts.com/screencast/ap

  • 我得到了一个登录表单,提交后,但似乎不自动认证,我可以看到匿名在分析器,即使我登录为管理员。 我正在从数据库中获取数据: 当然,数据库中存储的密码是加密的。 security.yml(app/config/security.yml) SecurityController.php(src/AppBundle/Controller) User.php(src/AppBundle/Entity/User