Как «перепроверить» разрешение электронной почты с помощью 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? Есть ли специальный метод для этого?

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

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

[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"; } } 
  • Facebook SDK 4.0: просмотр публикаций
  • Сбросить ссылку на токен Facebook - Facebook SDK 4.0
  • Почему я получаю ошибку относительно рамки Bolts и FacebookSDK, когда я даже не использую болты?
  • React Native: libRCTFBSDKCore.a и libRCTFBSDK.a
  • Выполнить недействительный токен сеанса (код: 209, версия: 1.7.1)
  • React Native FBSDK непризнанный селектор, отправленный в экземпляр
  • Выход из Facebook программно iOS
  • Параметр результата метода делегата приложения приглашения не содержит идентификатора запроса
  • Facebook Login SDK в IOS 9
  • iOS 9 Facebook Access Token nil при запуске приложений в будущем
  • iOS facebookSDK получить полную информацию о пользователе
  • Interesting Posts

    Как рисовать линию дуги / кривой с помощью MKOverlayView на MKMapView

    Многоразовое расширение для воспроизведения звука без утечки памяти в iOS и Swift?

    Как можно начать соединение с NSURLConnection, а на переднем плане – в фоновом режиме?

    Бесплатный профилирующий профиль с Qt

    Не удается подключиться через bluetooth в межсетевом соединении iOS 10

    Установка user_version в sqlite

    Отображение пользовательских шрифтов в SVG для iOS Chrome и Safari

    Загрузите jpg на S3: «Тело запроса неожиданно прекращено»

    Каков наилучший способ получить текущую ориентацию для установки видов

    Проблема с отображением при использовании UISearchBar с контроллером табличного представления и переходом на другой вид

    Facebook iOS SDK v 4.1.0 в Swift с Cocoapods: невозможно импортировать модули

    Когда происходит сбой приложения, вызывается вызов «applicationWillTerminate» или «applicationDidEnterBackground»?

    Сделать прокрутку UIView с помощью UITableView, но вывести его сверху

    Проверьте, действительно ли файл Localizable.strings

    Снимок экрана, когда камера находится на -iOS

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.