Как «перепроверить» разрешение электронной почты с помощью Facebook iOS SDK 4.x?

Я интегрирую интеграцию FacebookSDK 4.x с пользовательским интерфейсом и используя следующий метод для входа в систему, а также получение электронной почты от пользователя.

FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init]; [login logInWithReadPermissions:@[@"email"] handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) { if (error){ NSLog(@"%@",[error localizedDescription]); } else if (result.isCancelled){ NSLog(@"Cancled"); } else { if ([result.grantedPermissions containsObject:@"email"]) { NSLog(@"Granted all permission"); if ([FBSDKAccessToken currentAccessToken]) { [[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:nil] startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { if (!error) { NSLog(@"%@",result); } }]; } } else { NSLog(@"Not granted"); } } }]; 

Это отлично работает, если пользователь не отказывается от доступа к «электронной почте». Я вижу в документах FacebookSDK, что я могу повторно запросить доступ к электронной почте пользователя один раз. Согласно документам FB: как указано в этой ссылке

 If someone has declined a permission for your app, the login dialog won't let your app re-request the permission unless you pass auth_type=rerequest along with your request. 

Включение повторной аутентификации

Во время выбранного вами потока входа мы показали вам, как использовать диалоговое окно Login и OAuth для проверки подлинности и получения разрешений от них. Чтобы повторно аутентифицировать, вы можете использовать эти же шаги с дополнительными параметрами, чтобы заставить его:

auth_type: этот параметр указывает запрашиваемые функции аутентификации (в виде списка, разделенного запятыми). Допустимыми параметрами являются: https – проверяет наличие секретного сеанса Facebook и запрашивает повторную аутентификацию, если он отсутствует повторно аутентифицирован, – просит, чтобы человек повторно аутентифицировался безоговорочно

 auth_nonce: includes an app generated alphanumeric nonce which can be used to provide replay protection. See how to check an auth_nonce 

для большего.

Вот пример использования JavaScript SDK, который запускает повторную аутентификацию с использованием auth_type reauthenticate:

FB.login (function (response) {// Исходный код FB.login}, {auth_type: 'reauthenticate'})

Обратите внимание, что тело ответа содержит параметр auth_type, который вы указали, например:

access_token = USER_ACCESS_TOKEN & истекает = SECONDS_UNTIL_TOKEN_EXPIRES & auth_type = повторной аутентификации

Как передать «auth_type = rerequest» на серверы Facebook через SDK iOS? Есть ли специальный метод для этого?

Я решил проблему, вызвав метод:

[login logInWithReadPermissions: @ [@ "email"] обработчик: ^ (FBSDKLoginManagerLoginResult * result, ошибка NSError *)

Мне нужно передать auth_type: «rerequest» при повторном запросе, и я получу его в документации этого метода. Я получаю описание:

Используйте этот метод при запросе разрешений на чтение. Вы должны только запрашивать разрешения, когда они необходимы, и объяснять значение для пользователя. Вы можете проверить результат.declinedPermissions, чтобы предоставить дополнительную информацию пользователю, если они отклоняют разрешения.

Если [FBSDKAccessToken currentAccessToken] не равен нулю, он будет рассматриваться как повторная авторизация для этого пользователя и передаст флаг «перепросмотр» в диалоговое окно входа в систему.

просто проблема заключалась в том, что я вызывал метод выхода из класса FbSDKLoginManager. Это очистит токен, и оно будет восприниматься как прежнее разрешение, не запрашиваемое повторно.

Вам не нужно передавать или вызывать auth_type: rerequest. Это уже сделано в facebook. Если вы проверите FBSDKLoginManager, код сделает это за вас.

 -(NSDictionary *)logInParametersWithPermissions:(NSSet *)permissions { if ([FBSDKAccessToken currentAccessToken]) { loginParams[@"auth_type"] = @"rerequest"; } } 
  • Почему я получаю ошибку относительно рамки Bolts и FacebookSDK, когда я даже не использую болты?
  • FBSDKProfile currentProfile имеет значение nil, но FBSDKAccessToken currentAccessToken имеет значение
  • Выход из Facebook программно iOS
  • Замена для FBFriendPickerViewController для Facebook iOS SDK 4
  • Получение «Неподдерживаемое приложение FBSDKGraphRequest» при публикации фотографии с тегами
  • Как обновить FBRequest.requestForMe () на facebookdk v4.0.1?
  • Facebook Login SDK в IOS 9
  • FBSDKAccessToken.currentAccessToken (). UserID иногда возвращает Nil
  • Facebook sdk не работает, если я размещаю папку sdk внутри проекта, отвечающего за реакцию?
  • React Native FBSDK непризнанный селектор, отправленный в экземпляр
  • ios facebook sdk 4.0 код ошибки входа 304
  • Давайте будем гением компьютера.