java - Android Google 登录在 WebView 中不起作用
问题描述
我是android开发的新手。尝试在 Android 网络视图中集成 FB 和 Google+ 登录。FB登录工作正常。但谷歌登录不允许登录。我提到了一些链接,但无法成功。
问题是在 Gmail 中提供用户名和密码后,我的网站无法登录
private class MyCustomWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
String host = Uri.parse(url).getHost();
Log.d("Loading URL", url);
if (host.equals(target_url_prefix)) {
// This is my web site, so do not override; let my WebView load
// the page
if (mWebviewPop != null) {
mWebviewPop.setVisibility(View.GONE);
mContainer.removeView(mWebviewPop);
mWebviewPop = null;
}
return false;
}
if (host.contains("m.facebook.com") || host.contains("facebook.co")
|| host.contains("google.co")
|| host.contains("www.facebook.com")
|| host.contains(".google.com")
|| host.contains(".google")
|| host.contains("accounts.google.com/signin/oauth/consent")
|| host.contains("accounts.youtube.com")
|| host.contains("accounts.google.com")
|| host.contains("accounts.google.co.in")
|| host.contains("www.accounts.google.com")
|| host.contains("oauth.googleusercontent.com")
|| host.contains("content.googleapis.com")
|| host.contains("ssl.gstatic.com")
// || host.contains("https://accounts.google.com/signin/oauth/consent")
) {
return false;
}
// Otherwise, the link is not for a page on my site, so launch
// another Activity that handles URLs
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
return true;
}
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
Log.d("onReceivedSslError", "onReceivedSslError");
super.onReceivedSslError(view, handler, error);
}
@Override
public void onPageFinished(WebView view, String url) {
if (url.startsWith("https://m.facebook.com/v2.7/dialog/oauth")
) {
if (mWebviewPop != null) {
mWebviewPop.setVisibility(View.GONE);
mContainer.removeView(mWebviewPop);
mWebviewPop = null;
}
view.loadUrl("https://www.cbazaar.com");
return;
}
super.onPageFinished(view, url);
}
}
private class UriWebChromeClient extends WebChromeClient {
@Override
public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) {
mWebviewPop = new WebView(mContext);
mWebviewPop.setVerticalScrollBarEnabled(false);
mWebviewPop.setHorizontalScrollBarEnabled(false);
mWebviewPop.setWebViewClient(new MyCustomWebViewClient());
mWebviewPop.setWebChromeClient(new UriWebChromeClient());
mWebviewPop.getSettings().setJavaScriptEnabled(true);
mWebviewPop.clearHistory();
mWebviewPop.clearFormData();
mWebviewPop.clearCache(true);
mWebviewPop.getSettings().setSavePassword(true);
mWebviewPop.getSettings().setSaveFormData(true);
mWebviewPop.getSettings().setUserAgentString(USER_AGENT_FAKE);
builder = new AlertDialog.Builder(MainActivity.this, AlertDialog.THEME_DEVICE_DEFAULT_LIGHT).create();
builder.setTitle("");
builder.setView(mWebviewPop);
builder.setButton("close", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
mWebviewPop.destroy();
dialog.dismiss();
}
});
builder.show();
builder.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
/* CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(true);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
cookieManager.setAcceptThirdPartyCookies(mWebviewPop,true);
}
*/
WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
transport.setWebView(mWebviewPop);
resultMsg.sendToTarget();
return true;
}
@Override
public void onCloseWindow(WebView window) {
try {
mWebviewPop.destroy();
} catch (Exception e) {
}
try {
builder.dismiss();
} catch (Exception e) {
}
}
}
解决方案
Google 不允许使用 WebView 的默认实现。因此,您需要为您的 WebView 设置自定义用户代理:
webView.getSettings().setUserAgentString("YourAppName");
您可以使用任何字符串代替YourAppName
.
推荐阅读
- unity3d - 使用 fastlane 为 iOS 构建 Unity 游戏失败,缺少 USYM_UPLOAD_AUTH_TOKEN
- java - 双击时程序无法正常执行。“发生 JNI 错误,请检查您的安装并重试。”
- bash - 无法使用带有 docker exec 的 psql 命令行从文件运行查询
- c# - 如何停止自动生成我引用的 dll 文件?(视觉工作室)
- python - 无法解决 ModuleNotFoundError
- sql-server - 有没有办法填补没有 ReviewType 出现日期占位符和 0 次出现的日期空白
- google-cloud-platform - 无法获得可读的编码字符串
- django - 如何将主键存储在会话变量中
- html - 为什么我的锚在 IE 中会跳回页面顶部?
- reactjs - 退出并重新打开应用程序后如何重新渲染页面?