[英]How to do google sign-in from an Android WebView and after successful sign-in redirect back to the home website?
我有一个使用Webview渲染具有Google登录和Facebook登录网站的android应用。 问题是,当我进行Google或Facebook登录时,它会打开移动浏览器,成功登录后不会返回到应用程序,而是停留在浏览器中。 我希望它转到应用程序。 登录页面在webview本身中打开还是在浏览器中打开都没有关系。 但成功登录后,它应重定向回应用程序中的主网站。 我曾尝试在Webview本身中呈现登录页面,但登录后却卡在了页面中。
我在清单中添加了INTERNET权限
public class MainActivity extends AppCompatActivity {
WebView myWebView;
WebView myPopedWebView;
WebSettings myWebSettings;
FrameLayout mContainer;
String HOME_URL = "https://www.something.com";
String HOME_URL_PREFIX = "www.something.com";
Context mContext;
@SuppressLint("SetJavaScriptEnabled")
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
CookieManager cm = CookieManager.getInstance();
cm.setAcceptCookie(true);
myWebView = findViewById(R.id.myWebView);
myWebSettings = myWebView.getSettings();
mContainer = findViewById(R.id.frame_layout);
myWebView.loadUrl(HOME_URL);
myWebView.setWebViewClient(new customWebViewClient());
myWebView.setWebChromeClient(new customWebChromeClient());
myWebSettings.setJavaScriptEnabled(true);
myWebSettings.setDomStorageEnabled(true);
myWebSettings.setJavaScriptCanOpenWindowsAutomatically(true);
myWebSettings.setAppCacheEnabled(true);
myWebSettings.setSupportMultipleWindows(false);
myWebSettings.setUserAgentString(myWebSettings.getUserAgentString().replace("; wv", ""));
mContext = this.getApplicationContext();
}
public class customWebViewClient extends WebViewClient {
@Override public boolean shouldOverrideUrlLoading(WebView view, String url) {
String host = Uri.parse(url).getHost();
Log.d("Loading url", url);
if (host.equals(HOME_URL_PREFIX)) {
if (myPopedWebView != null) {
myPopedWebView.setVisibility(View.GONE);
mContainer.removeView(myPopedWebView);
myPopedWebView = null;
}
return false;
}
if (host.equals("www.facebook.com") || host.equals("www.accounts.google.com")) {
return false;
}
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
return false;
}
@Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
Log.d("onReceivedSslError", "onReceivedSslError");
}
}
public class customWebChromeClient extends WebChromeClient {
@SuppressLint("SetJavaScriptEnabled")
@Override public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) {
myPopedWebView = new WebView(mContext);
myPopedWebView.getSettings().setDomStorageEnabled(true);
myPopedWebView.getSettings().setJavaScriptEnabled(true);
myPopedWebView.setWebChromeClient(new customWebChromeClient());
myPopedWebView.setWebViewClient(new customWebViewClient());
myPopedWebView.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
WebView.WebViewTransport transport = (WebView.WebViewTransport)resultMsg.obj;
transport.setWebView(myPopedWebView);
resultMsg.sendToTarget();
return true;
}
@Override public void onCloseWindow(WebView window) {
Log.d("onCloseWindow", "closed");
}
}
}
您没有任何代码要求使用登录回调登录Facebook(或Google)帐户。 您可以执行以下操作:
在使用Facebook或Google按钮进行登录的网站中,对登录功能(以及登录回调URL配置)进行编码。
或者,您可以在Android应用中添加Facebook和Google登录(身份验证)SDK,并在您的应用中处理登录和回调(编写Java / Kotlin代码)。
您可以选择两种方法之一,也可以轻松地在线找到有关如何将Facebook sdk集成到Web(方法1)或android(方法2)中的教程。
快乐编码!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.