2015-02-10 4 views
0

Я реализую приложение с регистрацией лицевой книги. Мне нужно получить доступ к «общедоступному профилю пользователя», а также «идентификатор электронной почты». Здесь требуется идентификатор электронной почты. я могу войти в систему, но после ввода данных для входа в нее отображается страница просмотра, на этой странице обзора отображается кнопка «Редактировать информацию, которую вы предоставляете», здесь я столкнулся с проблемой. у меня есть 2 сомнения здесь 1) можно ли отключить опцию «редактировать информацию, которую вы предоставляете» (или) 2) можно ли отключить взаимодействие пользователя для поля электронной почты, такого как общедоступный профиль. мой код ниже.Ошибка входа в Facebook в iOS с последним SDK

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

вы можете это объяснить. как мы можем получить результат здесь. я делаю так. –

+0

[FBSession openActiveSessionWithReadPermissions: @ [@ "public_profile", @ "электронная почта", "@"] user_friends allowLoginUI: ДА completionHandler: ^ (FBSession * сессия, FBSessionState состояние, NSError * ошибка) { // Получить приложение делегата AppDelegate * appDelegate = (AppDelegate *) [UIApplication sharedApplication] .delegate; [appDelegate sessionStateChanged: состояние сеанса: ошибка состояния: ошибка]; }]; –

+0

Просто добавьте блок «FBRequestConnection» внутри вашего «openActiveSessionWithReadPermissions», а затем внутри блока «FBRequestConnection» отметьте «if (emailPermission) {// затем предоставлен доступ} else {// Показывает предупреждение и сообщает пользователю, что он должен дать разрешение на его адрес электронной почты} ' – trimi

Смежные вопросы