#ios #swift #firebase #firebase-authentication
#iOS #swift #firebase #firebase-аутентификация
Вопрос:
В моем приложении есть обычный код аутентификации, код отлично работает на эмуляторе. После тестирования на устройстве он даже не запускается. Ниже приведены фрагменты для входа в Facebook, то же самое касается входа в Twitter или электронной почты / pass.
if let fbLoginResult : FBSDKLoginManagerLoginResult = result {
if (fbLoginResult.grantedPermissions.contains("email")){
print("Facebook Token received!")
FBSDKAccessToken.setCurrent(fbLoginResult.token)
let token = FBSDKAccessToken.current().tokenString!
let credential = FIRFacebookAuthProvider.credential(withAccessToken: token)
print("Token : (token)")
FIRAuth.auth()?.currentUser?.link(with: credential, completion: { (currentUser, linkingError) in
if linkingError != nil {
print("Linking error: (linkingError?.localizedDescription)")
FIRAuth.auth()?.signIn(with: credential, completion: { (user, error) in
if error == nil {
self.loginSucceeded(user: user!)
}else{
print("Error : (error?.localizedDescription)")
}
})
}else{
self.loginSucceeded(user: currentUser!)
}
})
}
}
Я попытался переключить битовый код в настройках сборки на NO
. По-прежнему не может работать.
Как это сделать? Очень признателен!
Ответ №1:
по «даже не запускается», какая часть здесь не запускается? Вы настроили отладчик, чтобы определить, какая строка кода не выполняется? Просто взглянув на предоставленный вами фрагмент, я предполагаю:
FIRAuth.auth()?.currentUser?.link(with: credential, completion: { (currentUser, linkingError) in
Я полагаю, что эта строка, скорее всего, завершится с ошибкой на устройстве, которое ранее не проходило проверку подлинности currentUser
nil
. Я бы убедился, что эта переменная не равна нулю, поскольку именно это, вероятно, вызывает эту проблему.
Комментарии:
1. Да, вы правы. Эта строка не выполняется. Как это исправить? На нескольких устройствах действительно не работает, только на эмуляторах. Извините, все еще новичок в xcode. Спасибо @BHendricks
2. firebase.google.com/docs/auth/ios/… должно вам помочь — вам нужно создать учетную запись для
Firebase
пользователя, прежде чем вы сможете аутентифицировать его.3. Я немного потерялся, некоторое время просматривал документы, проблема в том, что я попытался связать учетную запись пользователя при входе в систему, в документах сказано, что я не должен входить в систему, а сначала ссылаться, однако текущий пользователь может быть нулевым. Не могли бы вы подробнее рассказать? Спасибо.
4. Это в документах… если у вас есть пользователь, уже прошедший проверку подлинности в вашем приложении Firebase на другом устройстве, и вам не нужно создавать, тогда вам нужно использовать
signIn
метод, где параметры — это учетные данные для аутентификации, а параметрcurrentUser
не используется. В документах, на которые я ссылался, есть пример реализации метода этого точного метода.5. Спасибо! Решил это после тщательного перечитывания документов. Вы были правы. Текущий пользователь был равен нулю, когда пользователь никогда не входил в систему раньше.