Код Firebase не выполняется на реальном устройстве iPhone, только на эмуляторах

#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. Спасибо! Решил это после тщательного перечитывания документов. Вы были правы. Текущий пользователь был равен нулю, когда пользователь никогда не входил в систему раньше.