繁体   English   中英

使用最新SDK的iOS中的Facebook登录问题

[英]Facebook login issue in iOS with latest SDK

我正在使用脸书登录实现应用程序。 我需要访问用户“公共资料”以及“电子邮件ID”。 这里的电子邮件ID是必须的。 我能够登录,但是输入登录详细信息后,它会显示评论页面,在该评论页面中,它会显示“编辑您提供的信息”按钮,这是我面临的问题。 我在这里有2个疑问1)是否可以禁用“您提供的编辑信息”选项(或)2)是否可以对电子邮件字段(如公共资料)禁用用户交互。 我的代码如下。

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

在此处输入图片说明

就我从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;
        }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM