【问题标题】:Facebook like button in WebView with SDK带有 SDK 的 WebView 中的 Facebook 按钮
【发布时间】:2012-09-09 23:35:15
【问题描述】:

我正在尝试使用 WebView 实现不属于 Android Facebook SDK 的 Facebook Like 按钮。这个想法很简单。我使用 SDK 使用 SSO 登录用户帐户,因此如果用户已经登录 android FB 应用程序,则用户无需再次输入登录名/密码。然后我想用 WebView 插入标准的 Like Button。
我已经拥有用户身份验证令牌、在墙上发送状态的权限等。问题是如何告诉 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)以登录用户。
感谢您的帮助!

【问题讨论】:

标签: android facebook facebook-like


【解决方案1】:

我想这就是你要找的东西:https://developers.facebook.com/docs/authentication/server-side/

如果我没看错的话,一旦你实现了 OAuth,你就可以使用 Graph API 来实现你正在寻找的“Like”按钮,因为你可以验证设备 - 而不仅仅是用户。

【讨论】:

【解决方案2】:

我不太确定 FB 应用访问令牌对于使用 Web 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(如果有)不会丢失,以防类似页面发出重定向。

如果问题仍然存在,您还可以尝试手动设置 cookie,方法是在加载 WebView 中的 url 之前执行此操作:

// 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();

【讨论】:

  • 很遗憾,它不起作用。我可以看到,如果我使用 WebView 登录到 FB,则在 WebView 中有不同的 cookie 集(不同的名称)。所以令牌/auth_token(我不知道哪个应该是正确的,但都试过了)没有被FB使用或检查。
  • 哦,那一定是 FB 的 web api 故意有一个单独的身份验证过程...尝试寻找与 FB 集成的开源项目,看看它们是如何解决这个特定问题的。
  • 这就是为什么,我在这里问。我没有找到任何为什么可以处理 Like 按钮。现在我正在尝试在 WebView 中完成整个过程,因此用户必须写下他的登录名/密码。
  • 是的,很遗憾我们无法让它以这种方式工作。很好的问题。我现在有很多事情要做,但我稍后会回到这个,它有点考虑到我现在正在做的项目,也是。如果你能以某种方式通过 cookie 解决它,请告诉我。
  • 现在我正在尝试使用 Open Graph API 和我自己的 Like 按钮来解决这个问题。但我遇到了类似的问题:stackoverflow.com/questions/12655662/…
猜你喜欢
  • 2011-07-03
  • 1970-01-01
  • 2014-01-14
  • 1970-01-01
  • 1970-01-01
  • 2021-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多