在iOS应用中工作,其中有一个中央用户和许多访客用户。我希望访客用户能够在应用程序上登录他们的Facebook帐户,而无需注销中央用户。我已经尝试使用FBSessionLoginBehaviorForcingWebView设置一个新的FBSession并设置我自己的令牌缓存策略(其中令牌实际上根本没有缓存),但它仍然使用默认的应用程序用户的凭据而不显示登录Web查看窗口。
根据FB iOS sdk文档,将行为设置为FBSessionLoginBehaviorForcingWebView应该强制Web视图显示用户必须输入其凭据的位置,但在我的应用程序中它只是自动授权当前登录的中央用户。
我从FB提供的Switch Users样本中复制了大部分代码,只是我取出了'slots',因为它对访客用户数量设置了上限。这是问题的一部分吗?
FBSessionLoginBehavior behavior = FBSessionLoginBehaviorForcingWebView;
FacebookCustomerTokenCachingStrategy *tokenCachingStrategy = [[FacebookCustomerTokenCachingStrategy alloc] init];
self.session = [[FBSession alloc] initWithAppID:nil
permissions:nil
urlSchemeSuffix:nil
tokenCacheStrategy:tokenCachingStrategy];
[self.session openWithBehavior:behavior
completionHandler:^(FBSession *session,
FBSessionState status,
NSError *error) {
//do whatever
}];
答案 0 :(得分:1)
找到解决方案。基本上,请致电以下内容:
[FBSession.activeSession closeAndClearTokenInformation];
[FBSession.activeSession close];
[FBSession setActiveSession:nil];
仅清除本地FB会话信息,但不清除Safari cookie。因此,在我登录用户后,我清除了Safari cookie:
NSHTTPCookie *cookie;
NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (cookie in [storage cookies]) {
[storage deleteCookie:cookie];
}
[[NSUserDefaults standardUserDefaults] synchronize];
它不是很优雅,但它有效。现在,当下一个用户尝试登录时,它会强制他们输入凭据。
答案 1 :(得分:0)
您是否尝试点击已注册Facebook帐户的帐户设置,然后点击应用并删除授权的应用程序?
修改
我知道一些应用程序也这样做,但我个人不确定如何做到这一点。在我看来,我认为该应用程序需要强制Facebook会话自动注销应用程序。 Cuz有一种方法可以检测用户的facebook帐户是否已登录,所以我认为应该有一种方法可以做相反的事,抱歉