我正在尝试在 Android WebView 中创建类似 facebook 的功能(项目规范不允许打开浏览器,或任何应用程序外 Activity )。
因此,限制是必须在 WebView 中完成。我已经设法使它成为一个对话框,并且在用户单击“喜欢”按钮后,它(WebView)成功重定向(在同一 View 中)到 facebooks 登录页面。身份验证成功后,WebView
(在对话框中)被重定向到带有 facebook header 的空白页面。
有趣的是,当用户离开空白对话框并再次单击“赞”按钮时,它可以完美地工作(喜欢和不喜欢)——它以某种方式保持身份验证处于 Activity 状态。为了解决空白页,我尝试/使用了以下内容:
- 使用
WebViewClient
和shouldOverloadUrlForwarding
将整个过程保持在同一个WebView
对话框中。 - 使用
WebChromeClient
正确执行 JavaScript - 如果没有它,登录后将无法点赞/取消点赞。 - 尝试使用
setUserAgentString()
模拟其他浏览器,如 Chrome 或 Firefox 尝试了 SSL 错误证书处理(在 API 级别 8 中)(在
WebViewClient
)@Override public void onReceivedSslError(WebView View ,SslErrorHandler 处理程序,SslError 错误){ 处理程序.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 点赞按钮的 Android WebView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7812857/