2013-05-22 113 views
2

我有facebook登錄問題。我將Facebook整合到了我的app.First用戶想要登錄時顯示登錄頁面,但從下一次它將頁「您有已經授權APP_NAME「。Facebook登錄您已經授權APP_NAME

我檢查了我從Facebook SDK獲得的樣本的美味教程,它的工作原理也一樣。

我想從不同的用戶登錄,我不希望每次都有該頁面「您已經授權APP_NAME」。

如何解決這個問題。

回答

0

在您的應用程序委託類中嘗試此代碼。

它會檢查會話是否打開,並在關閉連接時清除設備緩存中的登錄憑據。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    LoginVC *loginScreen=[[LoginVC alloc]initWithNibName:@"LoginVC" bundle:nil]; 

    navigationController=[[UINavigationController alloc]initWithRootViewController:loginScreen]; 

    self.navigationController.navigationBar.tintColor = [UIColor blackColor]; 
    self.window.rootViewController=self.navigationController; 
    self.window.backgroundColor = [UIColor whiteColor]; 
    [self.window makeKeyAndVisible]; 

    // See if we have a valid token for the current state. 
    if (FBSession.activeSession.state == FBSessionStateCreatedTokenLoaded) { 
     [self openSession]; 
     // To-do, show logged in view 
    } else { 
     // No, display the login page. 
     [self showLoginView]; 
    } 
    return YES; 


} 
- (void)sessionStateChanged:(FBSession *)session 
         state:(FBSessionState) state 
         error:(NSError *)error 
{ 
    switch (state) { 
     case FBSessionStateOpen: { 
      UIViewController *topViewController = 
      [self.navigationController topViewController]; 
      if ([[topViewController presentedViewController] 
       isKindOfClass:[LoginVC class]]) { 
       [topViewController dismissViewControllerAnimated:YES completion:nil]; 
      } 
     } 
      break; 
     case FBSessionStateClosed: 
     case FBSessionStateClosedLoginFailed: 
      // Once the user has logged in, we want them to 
      // be looking at the root view. 
      [self.navigationController 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]; 
    }]; 
} 

- (BOOL)application:(UIApplication *)application 
      openURL:(NSURL *)url 
    sourceApplication:(NSString *)sourceApplication 
     annotation:(id)annotation 
{ 
    return [FBSession.activeSession handleOpenURL:url]; 
} 
- (void)applicationDidBecomeActive:(UIApplication *)application 
{ 
    // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 
    // We need to properly handle activation of the application with regards to Facebook Login 
    // (e.g., returning from iOS 6.0 Login Dialog or from fast app switching). 
    [FBSession.activeSession handleDidBecomeActive]; 
} 

我希望這段代碼會有所幫助。

相關問題