我需要在我的android應用程序中使用WebView查看一些網站。而在網站上,可以通過google plus進行登錄。一看幾個教程和結果我有下面的代碼:通過谷歌加在WebView登錄
我的XML文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
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"
tools:context="ua.test.testgoogleauth.MainActivity">
<FrameLayout
android:id="@+id/webview_frame"
android:layout_width="match_parent"
android:layout_height="match_parent">
<WebView
android:id="@+id/my_webview"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</FrameLayout>
</RelativeLayout>
我的活動類:
public class MainActivity extends AppCompatActivity {
private FrameLayout webViewFrame;
private WebView webViewMain;
private WebView webViewWindow;
private final String URL = "https://some_url_with_google_auth";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webViewFrame = (FrameLayout) findViewById(R.id.webview_frame);
webViewMain = (WebView) findViewById(R.id.my_webview);
webViewMain.setWebViewClient(new CustomWebViewClient());
webViewMain.setWebChromeClient(new CustomWebChromeClient());
webViewMain.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
webViewMain.setLayerType(View.LAYER_TYPE_HARDWARE, null);
webViewMain.getSettings().setJavaScriptEnabled(true);
webViewMain.getSettings().setDomStorageEnabled(true);
webViewMain.getSettings().setAppCacheEnabled(false);
webViewMain.getSettings().setAllowFileAccess(true);
webViewMain.getSettings().setSupportZoom(true);
webViewMain.getSettings().setSupportMultipleWindows(true);
webViewMain.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
webViewMain.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
webViewMain.getSettings().setLoadWithOverviewMode(true);
webViewMain.getSettings().setUseWideViewPort(true);
webViewMain.getSettings().setBuiltInZoomControls(true);
webViewMain.getSettings().setDisplayZoomControls(false);
webViewMain.loadUrl(URL);
}
private class CustomWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
return false;
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return false;
}
}
private class CustomWebChromeClient extends WebChromeClient {
@Override
public boolean onCreateWindow(WebView view, boolean isDialog,
boolean isUserGesture, Message resultMsg) {
webViewWindow = new WebView(MainActivity.this);
webViewWindow.setVerticalScrollBarEnabled(false);
webViewWindow.setHorizontalScrollBarEnabled(false);
webViewWindow.setWebViewClient(new CustomWebViewClient());
webViewWindow.getSettings().setJavaScriptEnabled(true);
webViewWindow.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT));
webViewFrame.addView(webViewWindow);
WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
transport.setWebView(webViewWindow);
resultMsg.sendToTarget();
return true;
}
@Override
public void onCloseWindow(WebView window) {
webViewFrame.removeView(webViewWindow);
webViewWindow = null;
}
}
@Override
public void onBackPressed() {
if (webViewWindow != null) {
webViewFrame.removeView(webViewWindow);
webViewWindow = null;
} else {
super.onBackPressed();
}
}
}
而且之後一直點擊身份驗證按鈕,我有錯誤:「錯誤:disallowed_useragent「。我閱讀教程,但沒有解決這個問題。 那麼,請幫助我,如何解決這個錯誤?如果我必須使用谷歌加sdk身份驗證,如何發送用戶令牌到webview?還是有另一種解決方案?
我不確定,但我認爲您從webivew配置中缺少用戶代理。按照這個鏈接並添加一個合適的用戶代理到你的web視圖。 https://mobiforge.com/research-analysis/webviews-and-user-agent-strings –
我試圖添加許多變體的useragents,但它不工作:( –