Facebook Like 按钮的 Android WebView

标签 android facebook webview facebook-like webviewclient

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

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

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

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

  • 还尝试使用 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 Like 按钮的 Android WebView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5108088/

相关文章:

android - 从移动应用程序进行错误报告/记录的最佳工具

android - Facebook 应用程序请求无法在 Android 上运行

facebook - 从电子邮件 ID 中搜索 FB 用户 ID - 就像在 MS Outlook 2010 Social Connect 插件中一样

javascript - webViewDidFinishLoad 在从 URL 加载实际图形之前触发

java - Webview 不加载 html 或 javascript Android

android - 如何在 android WebView 中获取整个高度?

android - 以编程方式 "swipe-to-dismiss"ListView/RecyclerView 中的项目?

java - 应用程序停止响应并在更改设备方向时给出 NullPointerException。

Android:在非根设备上运行脚本

android - 尝试在 android 上使用 react-native-fbsdk 时出错