2015-02-10 49 views
0

我正在使用脸书登录实施应用程序。我需要访问用户“公开个人资料”,以及“电子邮件ID”也。这里电子邮件ID是必须的。我可以登录,但在输入登录详细信息后,它会显示审查页面,在该审阅页面中显示“您提供的编辑信息”按钮,在这里我正面临问题。我在这里有2个疑问1)是否可以禁用“编辑您提供的信息”选项(或)2)是否可以禁用用户交互电子邮件字段,如公共配置文件。我的代码在下面。在iOS上使用最新的SDK登录Facebook的问题

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 

    [self toggleHiddenState:YES]; 
    self.lblLoginStatus.text = @""; 

    self.loginButton.delegate = self; 
    self.loginButton.readPermissions = @[@"public_profile",@"email"]; 
} 
#pragma mark - Private method implementation 

-(void)toggleHiddenState:(BOOL)shouldHide{ 
    self.lblUsername.hidden = shouldHide; 
    self.lblEmail.hidden = shouldHide; 
    self.profilePicture.hidden = shouldHide; 
} 


#pragma mark - FBLoginView Delegate method implementation 

-(void)loginViewShowingLoggedInUser:(FBLoginView *)loginView{ 
    self.lblLoginStatus.text = @"You are logged in."; 

    [self toggleHiddenState:NO]; 
} 


-(void)loginViewFetchedUserInfo:(FBLoginView *)loginView user:(id<FBGraphUser>)user{ 
    NSLog(@"%@", user); 
    self.profilePicture.profileID = user.id; 
    self.lblUsername.text = user.name; 
    self.lblEmail.text = [user objectForKey:@"email"]; 
} 


-(void)loginViewShowingLoggedOutUser:(FBLoginView *)loginView{ 
    self.lblLoginStatus.text = @"You are logged out"; 

    [self toggleHiddenState:YES]; 
} 


-(void)loginView:(FBLoginView *)loginView handleError:(NSError *)error{ 
    NSLog(@"%@", [error localizedDescription]); 
} 

enter image description here

回答

3

据我从文档中developers.facebook.com读的第一和第二疑问,答案是否定的,用户可以撤销的许可,甚至在他给了允许最初,它是从Facebook添加的安全功能。你可以做的是检查授予你什么许可:

[FBRequestConnection startWithGraphPath:@"/me/permissions" completionHandler:^(FBRequestConnection *connection, id result, NSError *error) { 
__block NSString *alertText; 
__block NSString *alertTitle; 
if (!error){ 
    // Walk the list of permissions looking to see if email has been granted 
    NSArray *permissions = (NSArray *)[result data]; 
    BOOL emailPermission = FALSE; 
    for (NSDictionary *perm in permissions) { 
     if ([[perm objectForKey:@"permission"] isEqualToString:@"email"] && 
      [[perm objectForKey:@"status"] isEqualToString:@"granted"]) { 
      emailPermission = TRUE; 
      NSLog(@"email granted."); 
      break; 
     } 
} 
+0

你能解释一下吗?我们如何在这里得到结果。我正在这样做。 – 2015-02-11 12:53:55

+0

[FBSession openActiveSessionWithReadPermissions:@ [@ “public_profile”,@ “电子邮件”,@ “user_friends”] allowLoginUI:YES completionHandler: ^(FBSession *会话,FBSessionState状态,NSError *错误){ //检索应用程序委托 AppDelegate * appDelegate =(AppDelegate *)[UIApplication sharedApplication] .delegate; [appDelegate sessionStateChanged:session state:state error:error]; }]; – 2015-02-11 13:01:07

+0

只需在'openActiveSessionWithReadPermissions'内添加'FBRequestConnection'块,然后在'FBRequestConnection'块内检查'if(emailPermission){//然后访问被授予} else {//显示一个alertview并告诉用户他应该给予权限到他的电子邮件地址}' – trimi 2015-02-11 13:13:15