先說下facebook ios sdk中如何不跳到safari而在程式內登陸
// UIDevice *device = [UIDevice currentDevice];// if ([device respondsToSelector:@selector(isMultitaskingSupported)] && [device isMultitaskingSupported]) {// if (tryFBAppAuth) {// NSString *scheme = kFBAppAuthURLScheme;// if (_urlSchemeSuffix) {// scheme = [scheme stringByAppendingString:@"2"];// }// NSString *urlPrefix = [NSString stringWithFormat:@"%@://%@", scheme, kFBAppAuthURLPath];// NSString *fbAppUrl = [FBRequest serializeURL:urlPrefix params:params];// didOpenOtherApp = [[UIApplication sharedApplication] openURL:[NSURL URLWithString:fbAppUrl]];// }//// if (trySafariAuth && !didOpenOtherApp) {// NSString *nextUrl = [self getOwnBaseUrl];// [params setValue:nextUrl forKey:@"redirect_uri"];//// NSString *fbAppUrl = [FBRequest serializeURL:loginDialogURL params:params];// didOpenOtherApp = [[UIApplication sharedApplication] openURL:[NSURL URLWithString:fbAppUrl]];// }// }
在Facbook.m檔案中,注釋掉上面那段即可,我的版本是241到260行
然後說下無法登出的原因,先看下登出時調用的方法:
- (void)logout { [self invalidateSession]; if ([self.sessionDelegate respondsToSelector:@selector(fbDidLogout)]) { [self.sessionDelegate fbDidLogout]; }}
- (void)invalidateSession { self.accessToken = nil; self.expirationDate = nil; NSHTTPCookieStorage* cookies = [NSHTTPCookieStorage sharedHTTPCookieStorage]; NSArray* facebookCookies = [cookies cookiesForURL: [NSURL URLWithString:@"http://login.facebook.com"]]; for (NSHTTPCookie* cookie in facebookCookies) { [cookies deleteCookie:cookie]; }}
這時候我們發現他只是銷毀掉了http://login.facebook.com下的cookie,所以我們的帳號有時會無法正常登出,因為他沒銷毀https://login.facebook.com下的cookie!,所以我們需要在invalidateSession中加入如下代碼:
NSArray* facebookCookies1 = [cookies cookiesForURL: [NSURL URLWithString:@"https://login.facebook.com"]]; for (NSHTTPCookie* cookie in facebookCookies1) { [cookies deleteCookie:cookie]; }
簡單起見我就加了個1,大家起名不要這樣啊!