Firebase身份验证FirebaseNetworkException:发生网络错误(例如超时,中断连接或无法访问的主机)

时间:2016-10-14 21:19:23

标签: java android firebase firebase-authentication

我正在为我的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库中吗?

17 个答案:

答案 0 :(得分:14)

<form></form>更改为<div></div>解决了这个问题:

&#34; HTML中的表单元素中出现网络错误(例如超时,中断连接或无法访问的主机)。小虫。&#34;

答案 1 :(得分:7)

当Google Play服务未运行时也会发生这种情况。尝试启动Play商店并检查它是否正常工作。如果没有重启设备问题。并且还比较了在项目中使用的google play服务和设备中的google play服务是否相同,如果没有更新google play服务。

这只是一个次要但可能的情况,它给出了例外。

答案 2 :(得分:3)

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

请勿将href属性放入标记a。这有助于解决我的案例

答案 3 :(得分:1)

我解决了修复我的手机日期迟到一年的问题,当我修复了日期,一切都运转良好,错误消失了,我跳这个帮助你

答案 4 :(得分:1)

我遇到了同样的问题。什么解决了我的问题,清除了API_KEY中的额外空间,所以我的建议是检查你的GoogleService-Info.plist

  1. API_KEY正确(没有额外的空格)
  2. GOOGLE_APP_ID
  3. CLIENT_ID
  4. 我认为这可能会对你有所帮助

答案 5 :(得分:1)

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

答案 6 :(得分:1)

如果您在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>
        )
    }
}

答案 7 :(得分:0)

检查firebase.json中的重写,确保您不重写身份验证提供者网址/__/

{
  "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"
      }
    ]
  }
}

也可能是服务工作者的问题。见statsmodels doc

答案 8 :(得分:0)

在我的情况下,问题是由于依赖项的版本不匹配,然后我更改了依赖项,如下所示

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

然后它开始完美运作。

答案 9 :(得分:0)

如果您的authDomain在Web项目的Firebase密钥中设置不正确,也会发生这种情况。

答案 10 :(得分:0)

我在访问Firebase时遇到类似的问题。就我而言,问题在于我是通过调试器在真实设备上执行此操作的。一旦我“正常”运行代码,错误就消失了。因此,检查调试器是否妨碍操作可能会有所帮助。

答案 11 :(得分:0)

如果您使用的是Genymotion,则可能是您未激活Open Gapps(位于右上角)

答案 12 :(得分:0)

我从firebase用户Object获取IdToken时遇到了这个问题。我不知道真正的错误源是什么,它只是显示FirebaseNetworkException,但我也无法捕获该错误,因此我只是使用General Exception Object来捕获此错误。

如下

<div><h1>Test</h1></div>

答案 13 :(得分:0)

  1. 原因很简单!检查设备是否可以连接互联网。
  2. 如果您启用了Google服务
  3. 电话时间设置
  4. firebase json文件错误。无法获取客户端ID或Google App ID或api键

答案 14 :(得分:0)

我也遇到了同样的错误,有时有些小事情我们忘记了 就像->启用Internet一样

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

这是FirebaseNetwordException 可能会出现Host不是如上所述的Reachabe的情况,因此请检查您的连通性

检查您是否已在清单中提供Internet权限的天气。

希望它将解决您的问题

答案 15 :(得分:0)

根据我的经验,我的建议可能是检查Firebase日志并从那里解决问题。

在我的情况下,我成功命中了端点,但是由于res.json({... response ...})上的变量 rowsCompany 无效,它产生了捕获错误 >

enter image description here

答案 16 :(得分:-1)

我搜索了很多后我遇到了这个问题我得到了解决方案,我的情况是由于背景数据的限制而发生