android - 如何像在 android webview 中确认一样处理 facebook

标签 android facebook-like facebook-android-sdk

我正在尝试使用 android webview 实现类似 facebook 的功能。没有“确认”对话框,它工作正常。但是当需要确认时它不起作用。这是我正在使用的代码 fragment 。

    private void setUpWebView() {
    likeWebView.setVerticalScrollBarEnabled(false);
    likeWebView.setHorizontalScrollBarEnabled(false);
    likeWebView.setWebViewClient(new FacebookWebViewClient());
    likeWebView.setWebChromeClient(new MyChromeClient());
    likeWebView.getSettings().setJavaScriptEnabled(true);
     String url = getFacebookLikeUrl();
    likeWebView.loadUrl(url);
 }

我还设置了 ViewClient 和 WebChromeClient。

private String getFacebookLikeUrl() {
    return "http://www.facebook.com/plugins/like.php?" + "href="
            + URLEncoder.encode(mUrl) + "&access_token="
            + URLEncoder.encode(facebook.getAccessToken());
}

请帮我解决这个问题。提前致谢。

最佳答案

Facebook 点赞确认在新窗口中打开 confirm_widget。所以你的 webview 应该支持多窗口打开。为此 setJavaScriptCanOpenWindowsAutomatically(true) 和 setSupportMultipleWindows(true) 为您的 webview-

 private void setUpWebView() {
    likeWebView = new WebView(getContext());
    likeWebView.setWebViewClient(new FacebookWebViewClient());
    likeWebView.setWebChromeClient(new MyChromeClient());
    final WebSettings webSettings = likeWebView.getSettings();
    webSettings.setJavaScriptEnabled(true);
    webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
    webSettings.setSupportMultipleWindows(true);
    String url = getFacebookLikeUrl();
    likeWebView.loadUrl(url);
    likeWebView.setLayoutParams(FILL);
    mContent.addView(likeWebView);
}

Facebook 点赞确认调用 onCreateWindow() 方法。所以覆盖 WebChromeClient 中的 onCreateWindow 方法 -

final class MyChromeClient extends WebChromeClient {

    // Add new webview in same window
    @Override
    public boolean onCreateWindow(WebView view, boolean dialog,
            boolean userGesture, Message resultMsg) {
        WebView childView = new WebView(getContext());
        childView.getSettings().setJavaScriptEnabled(true);
        childView.setWebChromeClient(this);
        childView.setWebViewClient(new FacebookWebViewClient());
        childView.setLayoutParams(FILL);
        mContent.addView(childView);
        WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
        transport.setWebView(childView);
        resultMsg.sendToTarget();
        return true;
    }

    // remove new added webview whenever onCloseWindow gets called for new webview.
    @Override
    public void onCloseWindow(WebView window) {
        mContent.removeViewAt(mContent.getChildCount() - 1);
    }
}

当用户点击喜欢或取消时,喜欢调用 onCloseWindow 的 confirm_widget。在此方法中删除最后添加的 webview。

关于android - 如何像在 android webview 中确认一样处理 facebook,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7485850/

相关文章:

facebook - 如何让 facebook like 按钮显示针对移动设备优化的 Facebook 登录页面?

jquery - Facebook 点赞框 : changing the width by jQuery

android - Xamarin Forms 和 Facebook Android SDK 问题

Android onCreate() 方法在设备旋转时调用两次。 (集成电路)

android - 在 Android 平台上使用 dlclose(...) 时出现段错误

java - Android Studio 1.2.2,如何更改新模块的默认包名称

android - Unity 项目作为 Gradle 中的依赖项

Facebook 分享。更改 "say something more about this",同一页面上的多个按钮

android - 如何允许用户使用 SDCard 文件夹在墙上张贴图像

facebook - 如何使用 Android SDK 将签到发布到 facebook