J'ai besoin d'utiliser WebView dans mon application Android pour voir certains sites. Et sur les sites, il est possible d'avoir un login via google plus. A lire plusieurs tutoriels et dans le résultat que j'ai le code suivant:Faire une connexion via google plus dans un WebView
mon fichier 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>
ma classe d'activité:
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();
}
}
}
Et toujours après cliquage auth j'ai erreur: « Erreur : disallowed_useragent ". Je lis des tutoriels, mais il n'y a pas de solution à ce problème. Alors, aidez-moi s'il vous plaît, comment résoudre cette erreur? Si je dois utiliser google plus sdk pour auth, comment envoyer un token utilisateur à webview? Ou y a-t-il une autre solution?
Je ne suis pas sûr mais je pense qu'il vous manque l'agent utilisateur de votre configuration webivew. Suivez ce lien et ajoutez un agent utilisateur approprié à votre webview. https://mobiforge.com/research-analysis/webviews-and-user-agent-strings –
J'ai essayé d'ajouter de nombreuses variantes de useragents mais cela ne fonctionne pas :( –