用于 Facebook 点赞按钮的 Android WebView

标签 android facebook webview facebook-like webviewclient

我正在尝试在 Android WebView 中创建类似 facebook 的功能(项目规范不允许打开浏览器,或任何应用程序外 Activity )。

因此,限制是必须在 WebView 中完成。我已经设法使它成为一个对话框,并且在用户单击“喜欢”按钮后,它(WebView)成功重定向(在同一 View 中)到 facebooks 登录页面。身份验证成功后,WebView(在对话框中)被重定向到带有 facebook header 的空白页面

有趣的是,当用户离开空白对话框并再次单击“赞”按钮时,它可以完美地工作(喜欢和不喜欢)——它以某种方式保持身份验证处于 Activity 状态。为了解决空白页,我尝试/使用了以下内容:

  • 使用 WebViewClientshouldOverloadUrlForwarding 将整个过程保持在同一个 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);

  • 还尝试使用 CookieSyncManagerCookieManager 和手动处理持久保存 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/

相关文章:

php - 如何允许我网站的用户通过 Facebook 登录/注册并将 Facebook 登录系统与我自己的登录系统集成?

android - Android中的TabHost

android - 使用自定义 CSS 在 WebView 中呈现 HTML

javascript - Android webview在loadUrl方法中加载多个java脚本函数

android - 以编程方式将特定颜色设置为 ColorStateList

android - ConstraintLayout 不考虑最大宽度/高度与 DimensionRatio 的结合

ios - SDK 更新到 3.14 后原生 Facebook 登录停止工作

android - 通过谷歌播放控制台禁用某些 Android 版本的 apk

android - 无法解析 Android Studio 上的符号 webView

Facebook GraphQL 对象喜欢端点返回 "Tried accessing nonexisting field (likes) on node type (Post)"