Исключение Firebase Authentication Исключение FirebaseNetworkException: произошла сетевая ошибка (например, тайм-аут, прерванное соединение или недоступный хост)

#java #android #firebase #firebase-authentication

# #java #Android #firebase #firebase-аутентификация

Вопрос:

Я создаю рабочий процесс аутентификации для своего приложения для Android. Я разрешаю пользователям входить в систему с помощью имени пользователя / пароля и различных поставщиков OAuth. Я проверяю электронную почту и пароль, чтобы быть уверенным, что информация, которую я передаю в Firebase, является действительной. Я использую com.google.firebase:firebase-auth:9.6.1

Когда я выполняю следующий код, я получаю обратный вызов, который сообщает, что операция не выполнена успешно с ошибкой.

 mFirebaseAuth.signInWithEmailAndPassword(username,password).addOnCompleteListener(this);
 

Функция обратного вызова или прослушиватель завершения сообщают мне

 com.google.firebase.FirebaseNetworkException: A network error (such as timeout, interrupted connection or unreachable host) has occurred.
 

Имя пользователя, которое я передаю, еще не существует. Итак, я бы предположил, что вижу какую-то ошибку, указывающую, что пользователь не существует. Я передаю что-то неправильно или я неправильно предполагаю? Я также вижу, что в документации Firebase библиотека iOS содержит различные коды ошибок, общие для всех разделов методов API, где, поскольку раздел Android этого не показывает. Одним из таких исключений является FIRAuthErrorCodeUserNotFound . Итак, существует ли эта функциональность в библиотеке Android?

Комментарии:

1. Я бы определенно не сказал, что в нем указано, что пользователь не существует. Я думаю, это означает, что что-то не так с подключением -> телефон отключен, сервер не работает, сервер не отвечает и т.д.

2. Сейчас я сталкиваюсь с той же проблемой. у кого-нибудь есть идея, у которой уже есть решение? Спасибо

3. Я получаю аналогичное сообщение об ошибке

4. Я получаю аналогичное сообщение об ошибке (2)

5. Из приведенных ниже ответов это выглядит как обработчик ошибок по умолчанию для всех необработанных ошибок. Хорошая работа, Google!

Ответ №1:

Это также может произойти, когда службы Google Play не запущены. Попробуйте запустить play Store и проверьте, работает ли он. Если не проблема с перезагрузкой устройства.А также сравните сервисы Google Play, используемые в проекте, и сервисы Google Play на устройстве одинаковы, если не обновлять сервисы Google Play.

Это всего лишь незначительный, но возможный случай, когда он выдает исключение.

Ответ №2:

переход от <form></form> к к <div></div> решил эту проблему:

«Сетевая ошибка (например, тайм-аут, прерванное соединение или недоступный хост) произошла в элементе формы в HTML. Маленький жучок.»

Комментарии:

1. Это сделало это за меня. У меня была форма, но я сам управлял нажатием кнопки вместо того, чтобы делать сообщение или что-то в этом роде.

2. Решил ее. Спасибо. Есть идеи, почему?

3. Это решило проблему для меня, спустя 3 года после публикации этого ответа. Эхо @danh, кто-нибудь знает почему?

Ответ №3:

В вашем AndroidManifest.xml добавь, у меня это работает

 <uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
 

Ответ №4:

 <a (click)="login()" class="nav-link">Login</a>
 

Не помещайте href атрибут в тег a . Это помогло решить мой случай

Ответ №5:

Я столкнулся с той же проблемой. что решило мою проблему, очистив дополнительное пространство в API_KEY, поэтому я предлагаю проверить ваш GoogleService-Info.plist на

  1. API_KEY является правильным (без лишних пробелов)
  2. GOOGLE_APP_ID GOOGLE_APP_ID
  3. CLIENT_ID

Я думаю, это может вам помочь

Ответ №6:

Если вы выполняете эту проверку в форме onSumbit handler, вам необходимо preventDefault перед отправкой запроса.

Это фрагмент (реакция), который работает:

 class LoginComponent extends React.Component {
    constructor(props) {
        super(props);
        this.state = {
            email: '',
            password: '',
        };
        this.login = this.login.bind(this);
        this.handleLoginChange = this.handleLoginChange.bind(this);
        this.handlePasswordChange = this.handlePasswordChange.bind(this);
    }

    handleLoginChange(event) {
        this.setState({
            email: event.target.value,
            password: this.state.password,
        });
    }

    handlePasswordChange(event) {
        this.setState({
            email: this.state.email,
            password: event.target.value,
        });
    }

    login(event) {
        event.preventDefault();
        firebase.auth()
            .signInWithEmailAndPassword(this.state.email, this.state.password)
            .then(function(user) {
                      window.alert('OK'   user);
                  },
                  function(error) {
                      window.alert('ERR'   error);
                  });
    }

    render() {
        return (
            <form onSubmit={this.login}>
                <TextField hintText="login" value={this.state.email} onChange={this.handleLoginChange} /><br/>
                <TextField hintText="password" type="password" value={this.state.password} onChange={this.handlePasswordChange} /><br/>
                <RaisedButton type="submit" label="Login" primary={true} />
            </form>
        )
    }
}
 

Ответ №7:

  1. Причина проста! Проверьте, есть ли у устройства подключение к Интернету.
  2. если у вас включены службы Google
  3. настройки времени телефона
  4. файл firebase json неверен. не удается получить идентификатор клиента, идентификатор приложения Google или ключ api

Комментарии:

1. Спасибо за это. Моя проблема заключалась в том, что физическое устройство, с которым я тестировал, не было подключено к Интернету.

Ответ №8:

Я решаю проблему, исправляя дату моего мобильного телефона с опозданием на один год, когда я установил дату, все снова работало хорошо, и ошибка исчезла, я помогу вам

Ответ №9:

Проверьте свои перезаписи firebase.json , убедитесь, что вы не переписали URL-адрес поставщика авторизации /__/

 {
  "database": {
    "rules": "database.rules.json"
  },
  "storage": {
    "rules": "storage.rules"
  },
  "hosting": {
    "public": "public",
    "rewrites": [
      {
        "source": "!/__/**",
        "destination": "/index.html"
      },
      {
        "source": "**/!(*.js|*.html|*.css|*.json|*.svg|*.png|*.jpg|*.jpeg)",
        "destination": "/index.html"
      }
    ]
  }
}
 

Также это может быть проблемой работника службы. См. https://github.com/Polymer/polymer-cli/issues/290

Ответ №10:

В моем случае проблема связана с несоответствием версий зависимостей, затем я изменил зависимости, как показано ниже

 implementation 'com.google.firebase:firebase-auth: '
implementation 'com.google.firebase:firebase-core: '
implementation 'com.google.android.gms:play-services-auth: '
implementation 'com.firebaseui:firebase-ui-auth: '
 

затем он начал работать отлично.

Ответ №11:

Также может произойти, если ваш authDomain неправильно установлен в ваших ключах firebase для веб-проектов.

Ответ №12:

У меня была аналогичная проблема с доступом к firebase. В моем случае проблема заключалась в том, что я делал это на реальном устройстве через отладчик. Как только я запустил код «нормально», ошибка исчезла. Таким образом, может быть полезно проверить, не мешает ли отладчик.

Ответ №13:

Если вы используете Genymotion, возможно, вы не активировали открытые Gapps (в правом верхнем углу)

Ответ №14:

Я также получил ту же ошибку, и иногда есть очень маленькие вещи, о которых мы забываем, например, -> Включить Интернет как

  com.google.firebase.FirebaseNetworkException: A network error (such as timeout, interrupted connection or unreachable host) has occurred
 

Это исключение FirebaseNetwordException
может быть случай, когда хост недоступен, как указано выше, поэтому проверьте подключение

также проверьте, указали ли вы разрешения на доступ в Интернет в манифесте или нет.

надеюсь, это решит вашу проблему

Ответ №15:

Это может быть миллион вещей, мой совет, основанный на моем опыте, — проверить журналы firebase и решить проблему оттуда.

В моем случае я успешно достиг конечной точки, но она генерировала ошибку catch из-за недопустимой переменной rowsCompany в res.json({…ответ …} )

введите описание изображения здесь

Комментарии:

1. как просмотреть эти журналы?

Ответ №16:

Я столкнулся с этой проблемой после долгих поисков, я получил решение, в моем случае это происходило из-за ограничения фоновых данных.


Если вы отключите фоновые данные Google Service Framework. Проверьте и включите его. Это сработало для меня.