android - 带有 SDK 的 WebView 中的 Facebook 点赞按钮

标签 android facebook facebook-like

我正在尝试使用 WebView 实现 Facebook Like 按钮,它不是 Android Facebook SDK 的一部分。这个想法很简单。我使用 SDK 通过 SSO 登录用户帐户,因此如果用户已经登录到 android FB 应用程序,则用户无需再次输入登录名/密码。然后我想使用 WebView 来插入标准的 Like Button。
我已经拥有用户身份验证 token 、在墙上发送状态的权限等。问题是如何告诉 WebView 用户已经登录。我试图通过 FB 生成的这个 URL (webview.loadURL()) 使用 WebView(启用 JS):

http://www.facebook.com/plugins/like.php?href=myurl&send=false&layout=button_count&width=450&show_faces=true&action=like&colorscheme=light&font&height=21&appId=myId"
            + "&token=" + mFacebook.getAccessToken()+"&expires="+mFacebook.getAccessExpires(); //(or auth_token instead)<br>

显然这是错误的/或者不足以以这种方式发送授权,因为在点击“赞”按钮后,用户将被重定向到 Web 浏览器中的登录页面。
所以问题是如何编辑此 URL 或如何在 WebView 中设置 cookie(在 CookieManager 中为 URL 设置什么以及哪些 cookie)以登录用户。
感谢您的帮助!

最佳答案

我不太确定 FB 应用程序访问 token 对于使用网络 API 是否有效,但让我们尝试一下。

首先,确保您确实为 WebView 实例使用了 cookie:

CookieManager.getInstance().setAcceptCookies(true);

我不确定 facebook 重定向页面是否会尝试设置 cookie,所以试试看它是否有效:

webview.setWebViewClient(new WebViewClient() {  
  @Override  
  public boolean shouldOverrideUrlLoading(WebView view, String url)  
  {  
    view.loadUrl(url);  
    return true;
  }  
});

这将强制您的 WebView 在其内部打开链接,因此 cookie(如果有)不会丢失,以防类似页面发出重定向。

如果问题仍然存在,您也可以在将 url 加载到 WebView 之前尝试手动设置 cookie:

// This just initializes the sync manager, do it once
CookieSyncManager.createInstance(this);

CookieManager.getInstance().setCookie("facebook.com", "token="
        + mFacebook.getAccessToken() + "; domain=facebook.com");
CookieSyncManager.getInstance().sync();

关于android - 带有 SDK 的 WebView 中的 Facebook 点赞按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12464570/

相关文章:

html - 应该是一个简单的 IE7 css 修复,但我无法弄清楚

android - 如何将多个 ViewPagers 放到一个 ScrollView 中?

android - 使用 Android intents 在 facebook 和 twitter 上发布不同的文本

ios - Facebook 应用程序评论 iOS - 无法选择 "Download it from the Apple App Store"

java - 尝试添加 Facebook 登录 fragment 时出错

facebook - 如何获取某个帖子的所有点赞的创建时间?

css - 大 Facebook 分享按钮

android - Multidex 抛出 java.lang.NoClassDefFoundError、RxJava、Retrolambda

android - 安卓锁屏定制

java - 如何让我在EditText中输入的数据插入到数据库中并显示在recyclerview上而不需要像ajax那样刷新?