0

I have integrated the facebook in my ios app and it is working nice. But when i stored my FB credentials in setting it is not working. It goes in following state

    - (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;
    }

It goes in FBSessionStateClosedLoginFailed , and error occurs. And if I delete my account from phone setting it working fine i.e the session opens and it is logged in correctly. Here is my code

- (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];
                              }
                          }];
}

Thanks in advance.

Raj
  • 637
  • 13
  • 32
  • http://stackoverflow.com/questions/12661104/ios6-facebook-integration-login-always-fbsessionstateclosedloginfailed-never-ope – vin Oct 01 '13 at 07:04
  • Thanks for your reply but it is not working for me! – Raj Oct 01 '13 at 07:33
  • Have you tried including this method - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation – vin Oct 01 '13 at 09:47

1 Answers1

0

I used this to open session when FB credentials are available in phone settings

 // 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];
            }];

And once session is opened I have used following code to get FB friends data.

 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];
     }];
    });
Raj
  • 637
  • 13
  • 32