2010-05-18 77 views
1

我正在嘗試在我正在開發的iPhone應用程序中編寫Facebook集成。我已經登錄了,但我不喜歡在不能關閉的情況下打開某個功能的想法。所以,在註銷功能方面,我陷入了困境。Facebook連接iPhone API註銷不起作用

- (IBAction) logoutClicked:(id)sender { 
    if (fbLoggedIn) 
    { 
     FBSession * mySession = [FBSession session]; 

     [mySession logout]; 
    } 
} 

- (void)sessionDidLogout:(FBSession*)session 
{ 
    NSLog(@"Session logged out."); 
    [theLoginButton setTitle:@"Facebook Time!" forState:UIControlStateNormal]; 
    fbLoggedIn = FALSE; 
    theLogoutButton.enabled = NO; 
    theLogoutButton.alpha = 0; 
} 

logoutClicked方法響應我的xib中的按鈕。委託方法沒有被調用。我曾嘗試在我的ViewController中將Facebook會話設置爲屬性,以便跨方法存儲/訪問數據,但這似乎也不起作用。任何人有任何解決方案?

回答

0

sessionDidLogout是否在實現FBSessionDelegate的類中實現? 而且它是在使用方法[FBSession sessionForApplication:@「XXX」secret:@「YYY」delegate:(DELEGATE)]創建會話時作爲委託傳遞的那個類的實例?

0

將此代碼用於註銷。我從這個link得到了這個。

- (void) fbDidLogout { 
    NSLog(@"Log out"); 
    // Remove saved authorization information if it exists 
    if ([userDefaults objectForKey:@"FBAccessTokenKey"]) { 
     [userDefaults removeObjectForKey:@"FBAccessTokenKey"]; 
     [userDefaults removeObjectForKey:@"FBExpirationDateKey"]; 
     [userDefaults synchronize]; 
    } 
    NSHTTPCookie *cookie; 
    NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage]; 
    for (cookie in [storage cookies]) 
    { 
     NSString* domainName = [cookie domain]; 
     NSRange domainRange = [domainName rangeOfString:@"facebook"]; 
     if(domainRange.length > 0) 
     { 
      [storage deleteCookie:cookie]; 
     } 
    } 
} 
0

這工作對我來說:

(void)logout { 

//self.sessionDelegate = delegate; 

appDelegate.facebook.accessToken = nil; 
appDelegate.facebook.expirationDate = nil; 

NSHTTPCookieStorage* cookies = [NSHTTPCookieStorage sharedHTTPCookieStorage]; 
NSArray* facebookCookies = [cookies cookiesForURL:[NSURL URLWithString:@"http://login.facebook.com"]]; 

for (NSHTTPCookie* cookie in facebookCookies) { 
    [cookies deleteCookie:cookie]; 
} 


NSLog(@"Log out"); 
// Remove saved authorization information if it exists 
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; 
if ([userDefaults objectForKey:@"FBAccessTokenKey"]) { 
    [userDefaults removeObjectForKey:@"FBAccessTokenKey"]; 
    [userDefaults removeObjectForKey:@"FBExpirationDateKey"]; 
    [userDefaults synchronize]; 
} 
NSHTTPCookie *cookie; 
NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage]; 
for (cookie in [storage cookies]) 
{ 
    NSString* domainName = [cookie domain]; 
    NSRange domainRange = [domainName rangeOfString:@"facebook"]; 
    if(domainRange.length > 0) 
    { 
     [storage deleteCookie:cookie]; 
    } 
} 

}