2013-10-01 19 views
0

我已经将facebook集成到了我的ios应用程序中,它工作的很好。 但是,当我存储我的FB凭据设置它不起作用。 它将出现在以下状态FB集成在ios应用程序问题

- (void)sessionStateChanged:(FBSession *)session 
         state:(FBSessionState) state 
         error:(NSError *)error 
{ 
    switch (state) { 
     case FBSessionStateOpen: 
      NSLog(@"case open session"); 
      // if([sharePref returnFbName].length==0) 
      [self listFriendsFB]; 
      break; 
     case FBSessionStateClosed: 
      NSLog(@"case FBSessionStateClosed session"); 
     case FBSessionStateClosedLoginFailed: 
      // Once the user has logged in, we want them to 
      // be looking at the root view. 
      //[viewController popToRootViewControllerAnimated:NO]; 
      [FBSession.activeSession closeAndClearTokenInformation]; 
      NSLog(@"case close or fail session"); 
      break; 
     default: 
      break; 
    } 

它去在FBSessionStateClosedLoginFailed,并发生错误。 如果我从手机中删除我的帐户,设置它工作正常,即会话打开并且它已正确登录。 这里是我的代码

- (void)openSession 
{ 
    //[self syncFacebookAccount]; 
    NSArray *permissions=[[NSArray alloc]initWithObjects:@"email,publish_actions",nil]; 
    dispatch_async(dispatch_get_main_queue(), ^{ 

    [FBSession openActiveSessionWithReadPermissions:permissions 
             allowLoginUI:YES 
            completionHandler: 
    ^(FBSession *session, 
     FBSessionState state, NSError *error) { 
     NSLog(@"fb open session"); 
     [self sessionStateChanged:session state:state error:error]; 
    }]; 
    }); 

} 

- (void)sessionStateChanged:(FBSession *)session 
         state:(FBSessionState) state 
         error:(NSError *)error 
{ 
    switch (state) { 
     case FBSessionStateOpen: 
      NSLog(@"case open session"); 
      // if([sharePref returnFbName].length==0) 
      [self fourthViewInitialization]; 
      [self getFacebookInfo]; 
      break; 
     case FBSessionStateClosed: 
      NSLog(@"case FBSessionStateClosed session"); 
     case FBSessionStateClosedLoginFailed: 
      // Once the user has logged in, we want them to 
      // be looking at the root view. 
      //[viewController popToRootViewControllerAnimated:NO]; 
      [FBSession.activeSession closeAndClearTokenInformation]; 
      NSLog(@"case close or fail session"); 

      break; 
     default: 
      break; 
    } 

    if (error) { 
     UIAlertView *alertView = [[UIAlertView alloc] 
            initWithTitle:AlertTitle 
            message:@"We are currently facing facebook connectivity issues. Please try again later!" 
            delegate:nil 
            cancelButtonTitle:@"OK" 
            otherButtonTitles:nil]; 
     NSLog(@"error facebook : %@",error); 
     [alertView show]; 
     [self hideActivityIndicator]; 
    } 
} 


#pragma facebook methods 
-(void)getFacebookInfo 
{ 
    // [NSThread detachNewThreadSelector:@selector(startLoader) toTarget:self withObject:nil]; 
    NSString *query =[NSString stringWithFormat:@"Select name,uid,pic_square from user where uid=me()"]; 
    // Set up the query parameter 
    my_info=[[NSMutableDictionary alloc]init]; 
    my_info_array=[[NSMutableArray alloc ]init]; 
    NSDictionary *queryParam = 
    [NSDictionary dictionaryWithObjectsAndKeys:query, @"q", nil]; 
    // Make the API request that uses FQL 
    [FBRequestConnection startWithGraphPath:@"/fql" 
           parameters:queryParam 
           HTTPMethod:@"GET" 
          completionHandler:^(FBRequestConnection *connection, 
               id result, 
               NSError *error) { 
           if (error) { 
            NSLog(@"Error: %@", [error localizedDescription]); 
            [self hideActivityIndicator]; 
           } else { 
            // NSLog(@"Result: %@", result); 
            // [self hideActivityIndicator]; 


            my_info_array=(NSMutableArray *)[result objectForKey:@"data"]; 
            my_info=[my_info_array objectAtIndex:0]; 
            //NSLog(@"my info array %@",my_info_array); 
            NSLog(@"my info from fb %@",my_info); 
            //return my_info; 
            [firstView removeFromSuperview]; 
            [self.view addSubview:fourthView]; 
            displayNameLabel.text=[NSString stringWithFormat:@"%@%@",displayNameLabel.text,[my_info objectForKey:@"name"]]; 
            [registerRequest setObject:[my_info objectForKey:@"name"] forKey:@"displayName"]; 
            //[registerRequest setObject:[my_info objectForKey:@"email"] forKey:@"emailId"]; 
            [registerRequest setObject:[my_info objectForKey:@"uid"] forKey:@"uid"]; 

            [SharedPreferenceClass setFBUID:[my_info objectForKey:@"uid"]];// 30 sept 

            [registerRequest setObject:[my_info objectForKey:@"pic_square"] forKey:@"profilePic"]; 
            NSString* picPath = [my_info objectForKey:@"pic_square"]; 
            if (picPath.length>0) { 
             [SharedPreferenceClass setUserProfilePictureDefault:picPath]; 
            }else{ 
             [SharedPreferenceClass setUserProfilePictureDefault:@""]; 
            } 

            //displayName.text=[my_info objectForKey:@"name"]; 
            [self hideActivityIndicator]; 
           } 
          }]; 
} 

在此先感谢。

+0

http://stackoverflow.com/questions/12661104/ios6-facebook-integration-login-always-fbsessionstateclosedloginfailed-never-ope – vin

+0

感谢您的答复,但它不是为我工作! – Raj

+0

您是否尝试过使用这种方法 - (BOOL)应用程序:(UIApplication *)应用程序 openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation – vin

回答

0

我使用这个打开的会话当FB凭证在手机设置

// Initialize a session object 
    FBSession *session = [[FBSession alloc] init]; 
    // Set the active session 
    [FBSession setActiveSession:session]; 

    [session openWithBehavior:FBSessionLoginBehaviorWithFallbackToWebView 
      completionHandler:^(FBSession *session, 
           FBSessionState status, 
           NSError *error) { 
       // Respond to session state changes, 
       NSLog(@"fb open session %@",error); 
       [self sessionStateChanged:session state:status error:error]; 
      }]; 

可一旦会话打开我用下面的代码获取FB好友资料。

NSArray *permissions=[[NSArray alloc]initWithObjects:@"email,publish_actions",nil]; 
    dispatch_async(dispatch_get_main_queue(), ^{ 

    [FBSession openActiveSessionWithReadPermissions:permissions 
             allowLoginUI:YES 
            completionHandler: 
    ^(FBSession *session, 
     FBSessionState state, NSError *error) { 
     NSLog(@"fb open session"); 
     [self sessionStateChanged:session state:state error:error]; 
    }]; 
    });