1

在有一个中心用户和许多访客用户的 iOS 应用程序上工作。我希望来宾用户能够在应用程序上登录他们的 Facebook 帐户,而无需注销中央用户。我尝试使用 FBSessionLoginBehaviorForcingWebView 设置新的 FBSession 并设置我自己的令牌缓存策略(实际上根本没有缓存令牌),但它仍然使用默认应用程序用户的凭据并且不显示登录网络查看窗口。

根据 FB iOS sdk 文档,将行为设置为 FBSessionLoginBehaviorForcingWebView 应该强制 Web 视图显示用户必须输入其凭据的位置,但在我的应用程序中,它只是自动授权当前登录的中央用户。

我从 FB 提供的 Switch Users 示例中复制了大部分代码,只是我取出了“插槽”,因为它对来宾用户的数量设置了上限。这是问题的一部分吗?

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

2 回答 2

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

它不是很优雅,但它确实有效。现在,当下一个用户尝试登录时,它会强制他们输入凭据。

于 2013-01-30T05:31:57.607 回答
0

您是否尝试单击您注册的 Facebook 帐户的帐户设置,然后单击应用程序并删除授权的应用程序?

编辑

我知道一些应用程序也这样做,但我个人不知道该怎么做。在我看来,我认为应用程序需要强制 facebook 会话自动注销应用程序。因为有一种方法可以检测用户 facebook 帐户是否已登录,所以我认为也应该有一种相反的方法,对不起

于 2013-01-25T16:23:44.660 回答