Firebase Authentication FirebaseNetworkException:发生网络错误(如超时、连接中断或无法访问主机)

Posted

技术标签:

【中文标题】Firebase Authentication FirebaseNetworkException:发生网络错误(如超时、连接中断或无法访问主机)【英文标题】:Firebase Authentication FirebaseNetworkException: A network error (such as timeout, interrupted connection or unreachable host) has occurred 【发布时间】:2017-02-24 10:00:34 【问题描述】:

我正在为我的 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 库中是否存在该功能?

【问题讨论】:

我绝对不会说用户不存在。我认为这意味着连接有问题 -> 手机离线、服务器关闭、服务器没有响应等。 我现在遇到了同样的问题。有人知道有解决方案吗?谢谢 我收到类似的错误消息 我收到了类似的错误信息(2) 从下面的答案来看,它看起来像是所有未处理错误的默认错误处理程序。干得好,谷歌! 【参考方案1】:

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

    API_KEY 正确(没有多余的空格) GOOGLE_APP_ID CLIENT_ID

我想这可能对你有帮助

【讨论】:

【参考方案2】:

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

这只是一个小但可能的例外情况。

【讨论】:

【参考方案3】:

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

html 中的表单元素发生网络错误(例如超时、中断连接或无法访问的主机)。小错误。”

【讨论】:

这是为我做的。我有一个表单,但我自己处理按钮单击而不是发帖或其他任何事情。 解决了。谢谢。知道为什么吗? 在发布此答案 3 年后,这为我解决了这个问题。回应@danh,有人知道为什么吗?【参考方案4】:
<a (click)="login()" class="nav-link">Login</a>

不要将href 属性放入标签a。这有助于解决我的问题

【讨论】:

【参考方案5】:

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


如果您关闭 Google Service Framework 的后台数据。检查并打开它。它对我有用。

【讨论】:

【参考方案6】:

检查您在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"
      
    ]
  

也可能是服务人员问题。见https://github.com/Polymer/polymer-cli/issues/290

【讨论】:

【参考方案7】:

如果您在表单 onSumbit 处理程序中执行此检查,则需要在发送请求之前阻止默认。

这是一个有效的 sn-p (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>
        )
    

【讨论】:

【参考方案8】:

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

【讨论】:

【参考方案9】:

我解决了我手机的日期晚了一年的问题,当我确定日期后,一切又正常了,错误消失了,我跳这个对你有帮助

【讨论】:

【参考方案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 在 Web 项目的 Firebase 密钥中设置不正确,也会发生这种情况。

【讨论】:

【参考方案12】:

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

【讨论】:

【参考方案13】:

如果您使用 Genymotion,可能是您没有激活 Open Gapps(在右上角)

【讨论】:

【参考方案14】:
    原因很简单!检查设备是否有互联网连接。 如果您启用了 Google 服务 电话时间设置 firebase json 文件错误。无法获取客户端 ID 或谷歌应用 ID 或 API 密钥

【讨论】:

谢谢。我的问题是 - 我正在测试的物理设备没有连接到互联网。【参考方案15】:

我也遇到了同样的错误,有时我们会忘记一些非常小的事情 喜欢 -> 以身份打开互联网

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

这是 FirebaseNetwordException 可能存在主机无法达到上述情况的情况,因此请检查您的连接性

还要检查您是否在清单中提供了 Internet 权限。

希望它能解决你的问题

【讨论】:

【参考方案16】:

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

在我的情况下,我成功地到达了端点,但是由于 res.json(...response...) 上的变量 rowsCompany 无效,它产生了一个 catch 错误。 p>

【讨论】:

以上是关于Firebase Authentication FirebaseNetworkException:发生网络错误(如超时、连接中断或无法访问主机)的主要内容,如果未能解决你的问题,请参考以下文章

firebase phone authentication “由于异常活动,我们已阻止来自此设备的所有请求。稍后再试。”

Expo react-native app with firebase phone authentication在web上工作,在ios模拟器上出错,在Android上崩溃而没有警告

Flutter/Firebase:管理功能是应用内功能还是云功能?

在 iframe 中嵌入 Firebase 社交登录

Firebase的优势都有哪些?

使用 apollo graphql 对 firebase 身份验证做出反应