4

我遇到了与此处所述相同的问题Facebook OAuth login for iframe canvas apps 显示徽标图像和转到 Facebook.com 标题而不是登录- 我已经能够使用接受的答案中提供的解决方法来确保用户正确请参阅第一次使用该应用程序的权限框。

然而,我的问题是,在应用程序的初始“安装”之后这种形式的重定向对用户来说是非常具有破坏性的——在被重定向回来之前,他们明显地被从 Facebook 网站带走了。它确实破坏了用户体验。如果我使用我正在使用的 CodeIgniter 库(http://www.haughin.com/code/facebook/)提供的标准登录方法,那么应用程序的登录/加载是无缝的 - 但我有上述问题首次使用该应用程序。

有没有一种方法可以检测用户是否安装了应用程序,以便我可以对除应用程序“安装”以外的每个实例使用主要登录方法?

4

1 回答 1

2

在您的 iframe 画布应用中,如果用户已经授权您的应用,则 signed_request 将包含 user_id 和 oauth_token,因此无需将用户重定向到“授权”页面。以下是 signed_request 可能包含的几个示例:

用户尚未授权应用程序:

signed_request = 
                {
                    "algorithm":"HMAC-SHA256",
                    "issued_at":1299083443,
                    "user":{"country":"ca","locale":"en_US","age":{"min":21}
                }

用户已经授权应用:

signed_request =   {
                    "algorithm":"HMAC-SHA256",
                    "expires":1299092400,
                    "issued_at":1299085507,
                    "oauth_token":access_token,
                    "user":{"country":"ca","locale":"en_US","age":{"min":21}},
                    "user_id":user_id
                }

如果您没有看到 user_id 和 oauth_token,那么您可以使用 JavaScript window.top.location.href 技术。如果您确实看到了 user_id 和 oauth_token,则无需要求用户对您的应用进行身份验证,因为他/她已经这样做了。换句话说,如果用户在 1 月 1 日授权您的应用程序,然后在 1 月 10 日返回,那么在 1 月 10 日访问时,signed_request 将已经包含 user_id 和 oauth_token。

这是我使用的技术。我希望这有帮助。

更新于 2011 年 3 月 7 日,以回应 BrynJ 在下面的评论。

要获得signed_request,您必须确保在您的应用程序设置中启用“OAuth 2.0 for Canvas”(可以在此处编辑设置时在“高级”选项卡中找到http://www.facebook.com /developers/apps.php)。所有新应用程序默认启用此功能,但如果您有旧应用程序,则需要自己启用它。另外,请注意同一“高级”选项卡中的“POST for Canvas”设置。如果启用此功能,则 signed_request 将在 POST 正文中传递(例如 signed_request=12345)。如果它被禁用,那么 signed_request 会在查询字符串中传递。

一旦你有了signed_request,你需要验证和解码它以获得user_id和oauth_token。Facebook在这里有一个很好的例子:

http://developers.facebook.com/docs/authentication/signed_request/

顺便说一句,您需要启用“POST for Canvas”,因为 Facebook 将在 3 月 12 日将所有 iframe 应用程序切换到此。更多信息请点击此处:http: //developers.facebook.com/docs/canvas/post/

于 2011-03-07T07:50:04.853 回答