使用Fabric注销活动Twitter会话

时间:2015-07-09 15:42:52

标签: ios twitter-bootstrap authentication session-cookies

我已经通过论坛阅读了有关如何使用Fabric在Xcode中注销IOS的论坛和建议,但我无法通过logOut方法调用并从当前会话中注销用户。这是我当前的登录视图控制器代码:

- (IBAction)TESTT:(id)sender {
[[Twitter sharedInstance] logInWithCompletion:^
 (TWTRSession *session, NSError *error) {
     if (session != nil) {
         NSLog(@"signed in as %@", [session userName]);
     } else {
         NSLog(@"error: %@", [error localizedDescription]);
     }
 }];
}

- (IBAction)LOGOUT:(id)sender {
[self logOut];
}

- (void)logOut{
[[Twitter sharedInstance] logOut];
}

我已经从Fabric教程导入并具有良好的登录功能。

我无法获得我使用LOGOUT操作从当前Twitter会话中注销用户的按钮。我甚至试图清除cookie,看看是否可以从内存中擦除Twitter会话并重置它 - 但没有。如果有人能帮助我,我会非常感激 - 谢谢!

仅供参考:不建议 [[Twitter sharedInstance] logOut]; 。这种方法本身并不能解决我的问题。如果有人可以告诉我如何成功注销使用此方法以及其他可能正常的过程。

2 个答案:

答案 0 :(得分:1)

经过一系列广泛的方法,清除cookie,数据,几乎你能想到的一切,我发现它实际上非常简单。

注销并清除之前用户会话的最简单方法如下:

  1. 转到设置
  2. 转到您的Twitter并禁止Twitter访问您的应用(它应该显示在此处)
  3. 返回应用并调用以下方法:

    - (void)twitterLogout:(id)sender {
        NSUserDefaults *twitterSession = [NSUserDefaults standardUserDefaults];
        [twitterSession setObject:0 forKey:@"TwitterSession"];
        [twitterSession synchronize];
    
        NSLog(@"Twitter session = %@", twitterSession);
    
        [[Twitter sharedInstance] logOut];
        [self.view insertSubview:_logoutTwitter atIndex:16];
    
    
        NSHTTPCookie *cookie;
         NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
        for (cookie in [storage cookies])
        {
            NSString* domainName = [cookie domain];
            NSRange domainRange = [domainName rangeOfString:@"Twitter"];
            if(domainRange.length > 0)
            {
                [storage deleteCookie:cookie];
            }
        }
    
        NSURL *url = [NSURL URLWithString:@"https://api.twitter.com"];
        NSArray *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:url];
        for (NSHTTPCookie *cookie in cookies)
        {
            [[NSHTTPCookieStorage sharedHTTPCookieStorage] deleteCookie:cookie];
        }  
    }
    
  4. 这种方法有很多,说实话,其中一些可能是无关紧要的,甚至不需要,但是任何需要这种方法的人都可以把应该和不应该留下的东西搞得一团糟。无论哪种方式,希望这有助于人们 - 它肯定帮助了我!

答案 1 :(得分:1)

您可以将此简单代码用于 Swift 3

let store = Twitter.sharedInstance().sessionStore
        if let userID = store.session()?.userID {
            store.logOutUserID(userID)
        }