4

如何在不向用户显示授权对话框的情况下检测用户是否先前授权了选项卡应用程序?这是一个用户体验问题。我们不想在没有行动号召的情况下将用户扔到授权对话框中,但如果用户先前授权了应用程序,我们不希望显示行动号召以使用户登录。

这是场景。选项卡应用程序托管在具有多个其他应用程序的页面上。在 Facebook 中,“Like”按钮在标签级别而不是在页面级别上工作,因此用户可能在没有看到当前应用程序的情况下喜欢了不同的应用程序。因此,如果在标签应用程序的登陆页面上使用了任何“Like Gate”,并且需要授权才能使用该应用程序,那么当我们登录用户时,用户将立即显示授权屏幕,而不需要采取行动,除非我们可以检测到用户之前授权了这个应用程序。

4

2 回答 2

2

您可以使用 javascript SDK 并检查登录状态以查看他们是否已授权您的应用程序。如果有,您可以在其他地方使用 javascript 重定向或拨打您需要的电话。如果他们没有,那么您可以在您的页面上显示号召性用语。就像是:

FB.getLoginStatus(function(response){
  if(!response.authResponse){
    // redirect to authorization page
    top.location.href="http://www.facebook.com/dialog/oauth?client_id=appid&redirect_uri=http://facebook.com/somefanpage";
    // or instead show a call to action div
  } else {
   //load fan page specific content
 }
});

但这只会告诉您他们当前是否已登录并通过您的应用程序进行身份验证。您能够判断这是返回用户还是全新用户的唯一方法是 Facebook 是否像 ifaour 提到的那样通过 signed_request 中的 userId 发送(然后您可以使用您的应用访问令牌调用 /userId/permissions 或查找在您的数据库中),但 Facebook 很可能不会发送 userId,因为您的用户可能没有使用您的个人标签应用程序进行身份验证,而是使用不同的共享应用程序密钥。

于 2011-09-26T23:00:07.603 回答
1

signed_request 只有当用户授权您的应用程序时,Facebook 才会发送用户 ID 。因此,只要缺少该信息,这意味着用户尚未授权您的应用程序,即显示身份验证对话框(或重定向到身份验证屏幕)!

页面选项卡教程中有关此内容的更多信息:

与 Facebook API 集成

当用户导航到 Facebook 页面时,他们将看到您的页面标签添加到下一个可用标签位置。从广义上讲,页面选项卡的加载方式与画布页面完全相同。在 Canvas 教程中阅读有关此内容的更多信息。当用户选择您的页面选项卡时,您将收到带有一个附加参数 page 的 signed_request 参数。这个参数包含一个带有 id(当前页面的页面 id)、admin(如果用户是页面的管理员)和 like(如果用户喜欢该页面)的 JSON 对象。与 Canvas 页面一样,在用户授权您的应用之前,您不会在 signed_request 中收到您的应用可访问的所有用户信息。

于 2011-09-26T19:38:31.503 回答