在网络视图 android 中加载 URL 时出现问题

Issue in loading URL in webview android

我需要在 webview 中显示登录网页 link,link 如下所示

url = "https://test-dev.test.com/as/authorization.oauth2?client_id=com.test.td&response=code&value=id test mail&redirect_uri=com.test.ap://oauth2/test"; 

[用不同的名称修改了实际的 URL]

在此页面上,我们必须输入用户名和密码。单击登录将带您进入 OTP 屏幕,输入 OTP 结果后将是 url 响应,我需要从中阅读代码。使用此代码,我必须发出请求以获取会话的身份验证令牌。对于令牌请求,响应将是 Json.

现在我需要帮助解决以下问题:

  1. 目前它在浏览器中打开,而不是在 webview 中打开。但除上述 link 外,其他 link 正在应用程序内的 webview 中打开。
  2. 这是处理此交易响应的回调方法。

下面是我的代码:

private WebView webView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    webView = (WebView) findViewById(R.id.webView);
    webView.setWebViewClient(new MyWebViewClient());
    WebSettings settings = webView.getSettings();
    settings.setJavaScriptEnabled(true);
    webView.loadUrl(getAuthorizationURL());
    webView.setHorizontalScrollBarEnabled(false);
    webView.setWebContentsDebuggingEnabled(true);
    //  webView.addJavascriptInterface(new MyJavaScriptInterface(this), "HtmlViewer");    
}


    private String getAuthURL() {
    Uri.Builder builder = new Uri.Builder();
    builder.scheme("https")
            .authority("test-dev.test.com")
            .appendPath("ta/authorization.oauth2")
            .appendQueryParameter("client_id", "com.test.td")
            .appendQueryParameter("response", "code")
            .appendQueryParameter("value", "id test mail").appendQueryParameter("redirect_uri", "com.test.ap://oauth2/test")

    String url = Uri.decode(builder.build().toString());

    //url = "https://www.google.com/";
    // url = "https://developers.google.com/webmaster-tools/search-console-api/about";

    return url;
}


 private class MyWebViewClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView webView, String url) {

        System.out.println(" shouldOverrideUrlLoading :============ " + Uri.parse(url).getHost() + " url " + url);

        //            if(url.contains("dev.test.com")){
        //                webView.loadUrl(url);
        //                return false;
        //            }
        Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
        startActivity(i);
        return true;
    }
}

这听起来像是您在进行 OpenID 身份验证。您实施的 shouldOverrideUrlLoading() 既触发了一个很可能转到默认 Web 浏览器的意图,又 returning true。 return 值告诉 Android 您是控制加载页面 (true) 还是将其留给网络视图 (false)。如果您不控制 URL 的处理,Web 视图将尝试像普通页面一样加载它。

您还立即将 Web 视图定向到您在 onCreate 代码中的授权 URL。我认为这是您所看到的导航行为混淆的一部分。

对于这种身份验证过程,您不想覆盖加载 OTP 页面。让 web 视图像处理其他任何事情一样处理它。您要做的是捕获 URL 响应。您在 shouldOverrideUrlLoading 中的 if 语句应该捕获响应 URL,使用内容,并响应 true 让网络视图知道您已经处理了 [=28] =].其他一切都应该由网络视图处理。

最后,代码的注释版本在我看来会让您进入无限循环,就像您编写它的方式一样。您告诉 Web 视图加载授权 URL,这将返回您的 Web 客户端代码,这将捕获 URL,导致它加载 URL...