2011-05-12 53 views
7

你好,我在我的android手机上使用facebook sdk for android,并使用单一登录。它在我登录Facebook应用程序时正常工作,我的应用程序也登录了。 对于注销,我遇到了困惑。Android:facebook sdk注销问题?

我实现的方式是从应用程序的用户首选项中恢复访问令牌和过期日期,并检查会话的有效性。如果过期,应用程序会调用facebook.authorized函数,一旦授权访问令牌和过期日期将再次更新。

处理注销时,我发现有些事情有点混乱。

1)当我从Facebook应用程序注销时,我的应用程序仍然可以通过并请求用户详细信息。尽管我的应用程序上保存的访问令牌与facebook应用程序没有任何关系,但我认为在请求数据时至少会给我一个错误。但它没有给我错误。

它假设是这样的。从Facebook应用程序注销不会影响我存储在我的应用程序中的访问令牌。

2)当我从我的应用程序注销而不是Facebook应用程序时,Facebook应用程序不会自动注销。

回答

9

Facebook访问令牌和您的应用程序访问令牌是分开的和独特的,因此完全有可能一个人可以有效并允许访问,而另一个无效且需要重新授权。

如果Facebook应用程序已登录但您的应用程序没有登录,那么Facebook SDK将使用现有的Facebook应用程序登录名为您的应用程序获取新的访问令牌而无需进行身份验证,但这仍未链接到Facebook应用程序以任何方式登录令牌。

如果Facebook应用程序未安装或未登录,那么Facebook SDK将带您前往Facebook网站进行初始身份验证,但由于您的Facebook帐户之间没有连接,因此不会登录Facebook应用程序访问令牌和Facebook访问令牌。

因此,总之 - 你的理解是正确的。除了您的应用程序尝试对用户进行身份验证之外,这两个应用程序之间没有任何交互,那么Facebook应用程序将充当代理,只要Facebook登录就可以在没有身份验证的情况下获得访问权限。之后,就没有进一步的了互动和你观察到的是预期的和预期的行为。

+0

因此,如果用户授予[我]应用程序的访问权限,他将永远通过身份验证,如果他登录到[官方] Facebook应用程序?即使我尝试在[my]应用程序中调用facebook.logout(上下文)?对不起,但我有点困惑。 – harsimranb 2012-01-09 19:34:40

+0

是的 - 只要您的应用程序有权访问Facebook帐户,使用Facebook API,并且官方Facebook应用程序仍然登录,那么下次您启动应用程序时,它将使用Facebook应用程序获取新的应用程序访问令牌,并将默认验证。这就是单点登录应该如何工作。 – RivieraKid 2012-01-10 00:40:09

+0

因此,是facebook.isSessionValid()检查用户是否实际登录的正确方法?因为即使用户登录,facebook.isSessionValid()也会返回true。 – harsimranb 2012-01-10 01:56:05

0

我有同样的问题。我正在考虑创建一个“isLogged”变量并存储它,以便当某人注销并重新启动应用程序时,它甚至不会验证用户是否绕过了Facebook的会话验证。