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

Я создаю рабочий процесс аутентификации для своего приложения 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?

10 ответов


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

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


изменение с <form></form> до <div></div> решить проблему: Сетевая ошибка (например, тайм-аут, прерванное соединение или недостижимый хост) произошла в элементе формы в HTML. Небольшая ошибка.


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

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

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


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

не ставить href атрибут в tag a. Это поможет решить мой случай


в вашем AndroidManifest.xml add, он работает для меня

<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"/>

Проверьте свои перезаписи в 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


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

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

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>
        )
    }
}

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


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

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:+'

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


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