[英]Issue in loading URL in webview android
我需要在webview中顯示一個登錄網頁鏈接,該鏈接如下所示
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。
現在,我需要幫助解決以下問題:
下面是我的代碼:
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瀏覽器的意圖,並返回true
。 返回值告訴Android您是要控制加載頁面( true
)還是將其留在Web視圖中( false
)。 如果您不控制URL的處理,則Web視圖將嘗試像正常頁面一樣加載它。
您還將立即將網絡視圖定向到onCreate
代碼中的授權URL。 我認為這是您所看到的導航行為混亂的一部分。
對於這種身份驗證過程,您不想覆蓋加載OTP頁面。 讓Web視圖像處理其他任何事情一樣處理它。 您要做的是捕獲URL響應。 您的shouldOverrideUrlLoading
if
語句應捕獲響應URL,使用內容並響應true
以使Web視圖知道您已經使用了該URL。 其他所有內容都應通過網絡視圖處理。
最后,代碼的注釋版本在我看來就像是將您帶入無限循環(編寫方式)一樣。 您要告訴Web視圖加載授權URL,這將返回到您的Web客戶端代碼,這將捕獲URL,從而導致其加載URL。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.