Nik*_*hil 5 android webview google-login
如此处所述,谷歌已停止支持webview. 但是 Play 商店中的应用程序(多合一应用程序)正在使用他们的应用程序中显示多个渐进式应用程序webview,我们可以使用谷歌登录登录那里。
所以我的问题是我们如何才能做到这一点。
我已经通过以下查询搜索了有关 SO 的问题。
Android 403:错误:不允许的用户代理
找到了很多公认的答案,其中一些包含各种 UserAgentString
尝试了所有这些,但没有一个有帮助。因为UserAgentString并不总是有帮助。
如果通过打开新窗口进行登录,则它不起作用。尽管我们定义相同UserAgentString与webview在onCreateWindow的回调WebChromeClient。
我也试过寻找webview类似CrossView 等的替代品,但它们在过去 3 年中没有得到维护。
我无法使用,custom chrome tabs因为我无法隐藏custom chrome tab.
因此,请建议我是否真的有可能,webview或者是否有任何替代方案webview。
编辑- 到目前为止我尝试过的。
onCreate() 中的 WebView 初始化
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setSupportMultipleWindows(true);
webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
webView.getSettings().setUserAgentString("Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.125 Mobile Safari/537.36");
webView.getSettings().setGeolocationEnabled(true);
webView.getSettings().setUseWideViewPort(true);
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setAllowContentAccess(true);
webView.getSettings().setDatabaseEnabled(true);
webView.getSettings().setLoadsImagesAutomatically(true);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
}
webView.setWebChromeClient(new MyWebChromeClient());
enableHTML5AppCache(webView);
webView.loadUrl("https://www.makemytrip.com/");
Run Code Online (Sandbox Code Playgroud)
支持方法和类
private void enableHTML5AppCache(WebView mWebView) {
mWebView.getSettings().setDomStorageEnabled(true);
// Set cache size to 8 mb by default. should be more than enough
mWebView.getSettings().setAppCacheMaxSize(1024 * 1024 * 8);
// This next one is crazy. It's the DEFAULT location for your app's cache
// But it didn't work for me without this line
mWebView.getSettings().setAppCachePath("/data/data/" + getActivity().getPackageName() + "/cache");
mWebView.getSettings().setAllowFileAccess(true);
mWebView.getSettings().setAppCacheEnabled(true);
mWebView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
}
private class MyWebChromeClient extends WebChromeClient {
@Override
public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, android.os.Message resultMsg) {
WebView newWebView = new WebView(getActivity());
newWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
newWebView.getSettings().setUserAgentString("Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.125 Mobile Safari/537.36");
newWebView.getSettings().setLoadWithOverviewMode(true);
newWebView.getSettings().setAllowContentAccess(true);
newWebView.getSettings().setDatabaseEnabled(true);
newWebView.getSettings().setLoadsImagesAutomatically(true);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
newWebView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
}
enableHTML5AppCache(newWebView);
newWebView.setWebChromeClient(new WebChromeClient() {
@Override
public void onCloseWindow(WebView window) {
webView.removeView(window);
}
});
view.addView(newWebView);
WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
transport.setWebView(newWebView);
resultMsg.sendToTarget();
return true;
}
@Override
public void onCloseWindow(WebView window) {
webView.removeView(window);
}
}
Run Code Online (Sandbox Code Playgroud)
现在,当我使用上面的UserAgentStringgoogle 登录时,它在相同的webView. 但是在上面的站点中,当您单击login->google它时,它会请求新窗口(我在上面有新窗口的返回代码 - 请参阅onCreateWindow()上面的方法)然后显示error 403 - Disallowed UserAgent.
小智 14
webSettings.setUserAgentString(webSettings.getUserAgentString().replace("; wv",""));
然后你就可以登录了。
小智 4
你的代码看起来是正确的。
Google OAuth 根据用户代理字符串阻止 WebView,使用您自己的用户代理字符串可以再次登录(实际上您只需要从原始字符串中删除“wv”)。
不幸的是,WebView 中存在一个错误,即setSupportMultipleWindows启用该选项后,新创建的 WebView 中的第一个导航将使用默认的用户代理字符串。有关更多详细信息,请参阅错误跟踪器:https://bugs.chromium.org/p/chromium/issues/detail ?id=614951
该错误在 Chromium 67 中得到修复(当前版本为 66),因此下一版本的 WebView 预计可以正常工作。不过我自己还没有测试过。
因此,要么禁用多窗口支持,要么等待下一个版本的 WebView 到达用户(如果您确实需要解决方法,您可以尝试在第一次导航后重新加载页面或类似的操作)。
| 归档时间: |
|
| 查看次数: |
7842 次 |
| 最近记录: |