我正在尝试在 Android WebView 中创建类似 facebook 的功能(项目规范不允许打开浏览器,或任何 应用程序外 Activity )。
因此,限制是必须在 WebView 中完成。我设法使它成为一个对话框,并且在用户单击按钮后,它(WebView)成功地(在同一 View 中)重定向到 facebooks 登录页面。成功验证后,WebView
(在对话框中)被重定向到带有 facebook header 的 blank page。
有趣的是,当用户离开空白对话框并再次单击“赞”按钮时,它的工作原理非常完美(赞和不一样)——它以某种方式保持身份验证处于 Activity 状态。为了解决空白页,我尝试/使用了以下内容:
- 使用
WebViewClient
和shouldOverloadUrlForwarding
将整个过程保持在同一个WebView
对话框中。 - 使用
WebChromeClient
正确执行 JavaScript - 没有它,登录后无法喜欢/不喜欢。 - 尝试使用
setUserAgentString()
来模拟 Chrome 或 Firefox 等其他浏览器 尝试了 SSL 错误证书处理(在 API 级别 8)(在
WebViewClient
)@Override public void onReceivedSslError(WebView View ,SslErrorHandler 处理程序,SslError 错误){ handler.proceed(); }
使用(以及所有可能的组合)
webView.getSettings().setAppCacheEnabled(true); webView.getSettings().setJavaScriptEnabled(true); webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
还尝试使用
CookieSyncManager
、CookieManager
和手动处理来持久化 cookie。
这一切都没有结果。非常感谢任何帮助!
最佳答案
要通过空白页,请执行以下操作:
webview.setWebViewClient(new LikeWebviewClient(this));
private class LikeWebviewClient extends WebViewClient {
@Override
public void onPageFinished(WebView view, String url) {
Log.d(TAG, "onPageFinished url: " +url);
// Facebook redirects to this url once a user has logged in, this is a blank page so we override this
// http://www.facebook.com/connect/connect_to_external_page_widget_loggedin.php?............
if(url.startsWith("http://www.facebook.com/connect/connect_to_external_page_widget_loggedin.php")){
String redirectUrl = getFacebookLikeUrl();
view.loadUrl(redirectUrl);
return;
}
super.onPageFinished(view, url);
}
}
关于Facebook Like 按钮的 Android WebView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5108088/