2

我正在使用 Facebook 的 Android API,一切都按预期工作,但有一个例外。当我将 Facebook 应用程序安装在设备上(这是独立的应用程序,与 API 或我的应用程序无关),并且我在 Facebook 对象上调用 logout() 时,它正确地使 Facebook 对象无效但是下次我启动该对象时,它会从 Facebook 应用程序中检索登录数据,并且登录仍然存在。

如果我没有在设备上安装 Facebook 应用程序,一切都会正常运行。

我很好奇是否有一些我忽略了强制 Facebook 应用程序不保持登录的机制,或者我是否不得不告诉我的客户(这是客户的定制应用程序,永远不会上市)当他们运行这个他们必须确保从他们运行这个的设备上卸载 Facebook 应用程序?

4

1 回答 1

4

当您说 Facebook Android API 时,您是指 Facebook Android SDK 吗?

如果是这样,当您调用授权时,您可以选择指定是单点登录 (SSO) 还是 OAuth 2.0 对话授权。默认为 SSO。如果您使用 SSO 进行授权,并且 Facebook 应用程序存在并已登录,则授权成功而无需靠近 Facebook 服务器。

如果您不使用 SSO,而使用 OAuth 2.0 对话授权,则用户最初会看到一个登录对话框和一个应用程序授权对话框,并且在成功登录/授权后,SDK 会保留一个访问令牌以供后续授权使用。

不幸的是,SDK 注销没有考虑 SSO。它会执行 OAuth 2.0 expiresession 并清除访问令牌,但不会告诉 Facebook 应用用户已注销。这意味着当您进行下一次授权(假设它是 SSO)时,Facebook 应用程序仍处于登录状态,然后授权成功而无需靠近 Facebook 服务器。

一种前进的方法是不使用 SSO 并需要 OAuth 2.0 对话授权(使用authorize(FORCE_DIALOG_AUTH))。即使 Facebook 应用程序存在并已登录,这也需要用户登录,但它会阻止登录持续存在。

于 2011-10-06T20:34:21.343 回答