【问题标题】:How to handle Firebase Database error in iOS? #AskFirebase如何处理 iOS 中的 Firebase 数据库错误? #AskFirebase
【发布时间】:2017-12-21 18:43:24
【问题描述】:

我需要以不同于所有其他错误的方式处理“Permission Denied”错误。

在 Android 中我已经做到了:(Kotlin)

override fun onCancelled(error: DatabaseError) {
    if (error.code == DatabaseError.PERMISSION_DENIED) {
        // Warn user
    }
}

在 iOS 中我只有:

someDbReference.observe(.childAdded, with: { data in 
    // Do something
}, withCancel: { err in
    // err is Error
    print((err as NSError).code) // 1
    // Which error? O_o
})

如何判断错误类型?我已经阅读了整个文档,我认为err.localizedDescription == "Permission Denied" 是一个非常糟糕的方法。

【问题讨论】:

  • 我认为您可以查看 error.code 对于该特定错误是否是唯一的。然后检查该特定代码是否存在
  • @kathayatnk "Error 类型的值没有成员 code"
  • 嗯...你确定errNSError 而不是Error
  • @paper1111 是 Error,转换为 NSError,但 error.code 不等于 -3
  • 根据 FirebaseDatabase 上的源代码文档,它说The cancelBlock will be called if you will no longer receive new events due to no longer having permission. 所以我相信它只会在permission denied 上被调用。如果是这种情况,您不必检查那里的特定错误

标签: ios swift firebase firebase-realtime-database


【解决方案1】:

就像在 cmets 中已经提到的那样,我使用相同的方法来确定 Firebase 返回的错误类型。例如:

    someDbReference.observe(.childAdded, with: { data in 
        // Do something
    }, withCancel: { (returnedError: Error) in
        // Casting Error to NSError
        let testError: NSError = searchError as NSError

        // This is just random error from FB documentation, you can find all there
        if testError.code == FIRAuthErrorCode.errorCodeUserDisabled.rawValue {
          // User disabled
        }
      })

确保您将返回的错误对象(错误类型)转换为 NSError。使用其错误代码将其与 Firebase 错误代码进行比较。

【讨论】:

  • FIRAuthErrorCode 中,所有代码都以17000 开头,但我收到代码1,这将永远无法工作。但它看起来像 Firebase 错误,因为我应该收到代码 -3 以表示权限被拒绝
  • 哦,你是对的。它让我忘记了 - 我正在使用自定义错误类处理错误,因为我在应用程序中使用的语言很少并且需要本地化。因此该错误位于default switch case 下,并用作一般错误消息。会继续访问你的帖子,以防你发现任何新东西,希望你能想出办法。
  • 我希望#askfirebase 或者@FrankvanPuffelen 的人会回答=)
  • FIRAuthErrorCode 仅用于 Auth 错误。我还没有找到方法找到 DatabaseErrorCode 我正在寻找同样的东西。
猜你喜欢
  • 1970-01-01
  • 2018-04-18
  • 1970-01-01
  • 1970-01-01
  • 2021-04-06
  • 2014-12-05
  • 2021-02-06
  • 1970-01-01
  • 2019-10-16
相关资源
最近更新 更多