Ограниченный вход позволяет разработчикам указать, что для вошедших пользователей ограничено отслеживание.
При успешном входе создается и заполняется глобальный экземпляр AuthenticationToken
, содержащий информацию о попытке входа. Эта информация используется для подтверждения аутентификации на серверах клиента. Также создается и заполняется общий экземпляр объекта Profile, содержащий основную информацию о пользователе: ID пользователя внутри приложения, имя и фото профиля пользователя.
Доступные разрешения, которые вы можете запросить:
public_profile
;email
;gaming_profile
;gaming_user_picture
;user_age_range
;user_birthday
;user_friends
;user_gender
;user_hometown
;user_link
;user_location
;user_messenger_contact
.При ограниченном входе разработчики могут передавать одноразовый код для подтверждения попытки аутентификации на своих серверах. Подробнее об использовании одноразовых кодов для проверки маркера см. в статье Проверка маркера OIDC для ограниченного входа.
Переключение между приложениями, при котором диалог входа показывается пользователю в приложении Facebook для iOS, уже вошедшему в него, не поддерживается для ограниченных процессов входа.
В Facebook SDK для iOS представлено новое перечисление для FBSDKLoginTracking
. Возможные значения: enabled
и limited
. Для ограниченного входа используйте limited
.
enum LoginTracking {
case enabled
case limited
}
При ограниченном входе механизм входа по умолчанию изменяется с помощью FBSDKLoginConfiguration
. Эту конфигурацию нужно создавать со свойствами по умолчанию, явно заданными свойствами (только в Swift) или с одним из этих инициализаторов:
init?(
permissions: Set
Свойство | Описание |
---|---|
| Разрешения, запрошенные для попытки входа. По умолчанию является пустым набором. |
| Разрешения, запрошенные для попытки входа. По умолчанию является пустым набором. |
| Параметр отслеживания входа. Значение по умолчанию — |
| Случайное значение, указанное при создании конфигурации. Если оно не предоставлено фабричному методу, будет создано уникальное значение. |
Создание конфигурации завершится ошибкой, если не выполнены следующие условия:
Случайное значение должно быть непустой строкой без пробелов.
Разрешения, ненужные для отслеживания, не запрашиваются. Например, нельзя запросить разрешение user_likes
, если для отслеживания задано значение .limited
.
Чтобы реализовать в приложении ограниченный вход напрямую с помощью класса loginManager, обновите Facebook SDK для iOS до последней версии и используйте следующий код:
let loginManager = LoginManager()
// Ensure the configuration object is valid
guard let configuration = LoginConfiguration(
permissions:["email", "user_friends", "user_birthday", "user_age_range", "user_gender", "user_location", "user_hometown", "user_link"],
tracking: .limited,
nonce: "123"
)
else {
return
}
loginManager.logIn(configuration: configuration) { result in
switch result {
case .cancelled, .failed:
// Handle error
break
case .success:
// getting user ID
let userID = Profile.current?.userID
// getting pre-populated email
let email = Profile.current?.email
// getting pre-populated friends list
let friendIDs = Profile.current?.friendIDs
// getting pre-populated user birthday
let birthday = Profile.current?.birthday
// getting pre-populated age range
let ageRange = Profile.current?.ageRange
// getting user gender
let gender = Profile.current?.gender
// getting user location
let location = Profile.current?.location
// getting user hometown
let hometown = Profile.current?.hometown
// getting user profile URL
let profileURL = Profile.current?.linkURL
// getting id token string
let tokenString = AuthenticationToken.current?.tokenString
}
}
Чтобы реализовать в приложении ограниченный вход с помощью кнопки входа, обновите Facebook SDK для iOS до последней версии и используйте следующий код:
override func viewDidLoad() {
super.viewDidLoad()
setupLoginButton()
}
func setupLoginButton() {
loginButton.delegate = self
loginButton.permissions = ["email"]
loginButton.loginTracking = .limited
loginButton.nonce = "123" as NSString
}
func loginButton(
_ loginButton: FBLoginButton,
didCompleteWith potentialResult: LoginManagerLoginResult?,
error potentialError: Error?
) {
if let error = potentialError {
// Handle Error
}
guard let result = potentialResult else {
// Handle missing result
}
guard !result.isCancelled else {
// Handle cancellation
}
// Handle successful login
let userID = Profile.current?.userID
let email = Profile.current?.email
let tokenString = AuthenticationToken.current?.tokenString
}