iOS Facebook SDK - 强制用户输入凭据

时间:2013-01-25 16:18:24

标签: ios facebook

在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                   
             }];

2 个答案:

答案 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帐户是否已登录,所以我认为应该有一种方法可以做相反的事,抱歉