在iOS应用程序中从Facebook注销

我正在创build一个简单的iOS应用程序,loginFacebook,取自我和朋友的详细信息,从Facebook注销。

现在从Facebooklogin和获取自我和朋友的细节工作正常,但我不能完全从Facebook注销。 每当我注销,然后login返回 – 我看到的授权屏幕,而不是(身份证)Facebook的身份validationlogin屏幕。

下面是我的代码 – 你可以看看在我从login执行的步骤中是否有错误,以获取自我和朋友的详细信息,并从脸书注销

1)使用下面的方法loginFacebook

- (void)openSession { if(FBSession.activeSession.isOpen) { [FBSession openActiveSessionWithReadPermissions:nil allowLoginUI:NO completionHandler: ^(FBSession *session, FBSessionState state, NSError *error) { [self sessionStateChanged:session state:state error:error]; }]; } else { [FBSession openActiveSessionWithReadPermissions:nil allowLoginUI:YES completionHandler: ^(FBSession *session, FBSessionState state, NSError *error) { [self sessionStateChanged:session state:state error:error]; }]; } } - (void)sessionStateChanged:(FBSession *)session state:(FBSessionState) state error:(NSError *)error { switch (state) { case FBSessionStateOpen: { // Connection is Open lblStatus.text = @"FBSessionStateOpen"; } break; case FBSessionStateClosed: case FBSessionStateClosedLoginFailed: { [FBSession.activeSession closeAndClearTokenInformation]; // Connection is Closed / Login Failed lblStatus.text = @"FBSessionStateClosed"; } break; default: break; } } 

2)使用下面的方法获取自己的细节和朋友的细节

 if (FBSession.activeSession.isOpen) { [[FBRequest requestForMe] startWithCompletionHandler: ^(FBRequestConnection *connection, NSDictionary<FBGraphUser> *user, NSError *error) { if (!error) { self.lblSelfDetails.text = user.name; self.profilePicture.profileID = user.id; } }]; } FBRequest *friendRequest = [FBRequest requestForGraphPath:@"me/friends?fields=name,birthday"]; [friendRequest startWithCompletionHandler:^(FBRequestConnection *connection, id result, NSError *error) { NSArray *data = [result objectForKey:@"data"]; for (FBGraphObject<FBGraphUser> *friend in data) { NSLog(@"%@:%@", [friend name],[friend birthday]); } }]; 

3)使用下面的方法注销

 - (IBAction)logout:(id)sender { [FBSession.activeSession closeAndClearTokenInformation]; } 

请使用此方法从Facebook成功注册

 - (void)logout:(id<FBSessionDelegate>)delegate { _sessionDelegate = delegate; NSMutableDictionary * params = [[NSMutableDictionary alloc] init]; [self requestWithMethodName:@"auth.expireSession" andParams:params andHttpMethod:@"GET" andDelegate:nil]; [params release]; [_accessToken release]; _accessToken = nil; [_expirationDate release]; _expirationDate = nil; NSHTTPCookieStorage* cookies = [NSHTTPCookieStorage sharedHTTPCookieStorage]; NSArray* facebookCookies = [cookies cookiesForURL: [NSURL URLWithString:@"https://m.facebook.com"]]; for (NSHTTPCookie* cookie in facebookCookies) { [cookies deleteCookie:cookie]; } if ([self.sessionDelegate respondsToSelector:@selector(fbDidLogout)]) { [_sessionDelegate fbDidLogout]; } } 

希望这可以帮助你!

在appdelegate.m中添加这个方法

 - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { return [FBSession.activeSession handleOpenURL:url]; } 

然后将这些方法添加到.m文件中

 - (void)sessionStateChanged:(FBSession *)session state:(FBSessionState) state error:(NSError *)error { switch (state) { case FBSessionStateOpen: { UIViewController *topViewController = [self.navController topViewController]; if ([[topViewController modalViewController] isKindOfClass:[SCLoginViewController class]]) { [topViewController dismissModalViewControllerAnimated:YES]; } } break; case FBSessionStateClosed: case FBSessionStateClosedLoginFailed: // Once the user has logged in, we want them to // be looking at the root view. [self.navController popToRootViewControllerAnimated:NO]; [FBSession.activeSession closeAndClearTokenInformation]; [self showLoginView]; break; default: break; } if (error) { UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error" message:error.localizedDescription delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; [alertView show]; } } - (void)openSession { [FBSession openActiveSessionWithReadPermissions:nil allowLoginUI:YES completionHandler: ^(FBSession *session, FBSessionState state, NSError *error) { [self sessionStateChanged:session state:state error:error]; }]; } 

接下来,创build一个新的方法来closures当前会话并logging一个人:

  -(void)logoutButtonWasPressed:(id)sender { [FBSession.activeSession closeAndClearTokenInformation]; }