2013-10-01 18 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]; 
    }]; 
    });