我正在使用Facebook的Android API,一切都按预期工作,只有一个例外。当我将Facebook应用程序安装在设备上时(这是独立的应用程序,它与API或我的应用程序无关),我在我的Facebook对象上调用logout(),它正确地使Facebook对象无效但是当我下次启动对象时,它会从Facebook应用程序中检索登录数据并且登录仍然存在。
如果我没有在设备上安装Facebook应用程序,一切都运行良好。
我很好奇是否有一些机制我忽略了强迫Facebook应用程序不能保持登录,或者我不得不告诉我的客户(这是一个客户的自定义应用程序,永远不会去市场)当他们运行这个时,他们必须确保从他们运行它的设备上卸载Facebook应用程序?
答案 0 :(得分:4)
当你说Facebook Android API时,你的意思是Facebook Android SDK吗?
如果是这样,当您调用authorize时,您可以选择指定是单点登录(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应用程序存在并登录,也需要用户登录,但这会阻止登录持续存在。