我已将 facebook 集成到我的 ios 应用程序中,并且运行良好。但是当我将我的 FB 凭据存储在设置中时,它不起作用。它进入以下状态
- (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];
}
}];
}
提前致谢。