【问题标题】:How to handle Firebase auth errors on Unity如何处理 Unity 上的 Firebase 身份验证错误
【发布时间】:2017-08-09 10:13:31
【问题描述】:

我在 doc 之后在我的 Unity 应用程序中创建了一个简单的密码登录,它工作正常,但是我想处理不同类型的错误,因为 task.Exception 不返回错误代码我不知道如何进行。

我找到了this,但它似乎不是同一个 Firebase 版本,因为登录方法不同......

【问题讨论】:

  • 您似乎指的是旧版文档。 Firebase 现在是 google 的一部分,新文档可在 firebase.google.com/docs/auth 获得
  • 我确实遵循了新文档,但我没有找到与 Unity 中的错误处理相关的任何内容:firebase.google.com/docs/auth/unity/password-auth ios 有类似的东西,但统一没有(ios:firebase.google.com/docs/auth/ios/errors)错过了什么?
  • 没错,唯一暴露的是 task.Exception ,它包含导致问题的异常列表,但它真的很混乱。 Firebase 在 4.0.3 sdk 中做了一些与任务 dll 文件相关的更改。我还没有检查过,但你可能想看看。
  • 所以没有办法得到 FirebaseException 原始错误,除了来自 task.Exception 的混乱消息,好的:/ 感谢您的反馈。
  • 为什么不向 firebase 或 github 页面提出支持请求。他们在这两个地方都非常敏感,也在这里为我们提供答案。

标签: firebase unity3d firebase-authentication


【解决方案1】:

Firebase 有一个 AuthError 枚举,它告诉你 FirebaseException 中每个 ErrorCode 的含义,文档在这里:https://firebase.google.com/docs/reference/unity/namespace/firebase/auth

要获得西班牙语的错误消息,我这样做:

public static string GetErrorMessage(Exception exception)
{
    Debug.Log(exception.ToString());
    Firebase.FirebaseException firebaseEx = exception as Firebase.FirebaseException;
    if (firebaseEx != null)
    {
        var errorCode = (AuthError)firebaseEx.ErrorCode;
        return GetErrorMessage(errorCode);
    }

    return exception.ToString();
}

private static string GetErrorMessage(AuthError errorCode)
{
    var message = "";
    switch (errorCode)
    {
        case AuthError.AccountExistsWithDifferentCredentials:
            message = "Ya existe la cuenta con credenciales diferentes";
            break;
        case AuthError.MissingPassword:
            message = "Hace falta el Password";
            break;
        case AuthError.WeakPassword:
            message = "El password es debil";
            break;
        case AuthError.WrongPassword:
            message = "El password es Incorrecto";
            break;
        case AuthError.EmailAlreadyInUse:
            message = "Ya existe la cuenta con ese correo electrónico";
            break;
        case AuthError.InvalidEmail:
            message = "Correo electronico invalido";
            break;
        case AuthError.MissingEmail:
            message = "Hace falta el correo electrónico";
            break;
        default:
            message = "Ocurrió un error";
            break;
    }
    return message;
}

【讨论】:

  • 啊!完美,这是我正在寻找的列表
【解决方案2】:

我终于找到了一种只显示错误消息的方法:

FirebaseException error = task.Exception.InnerExceptions[0] as FirebaseException;
string errorMsg = error.ToString();

但是它并没有解决最初的问题,因为这似乎是 Firebase for Unity 中缺少的东西(至少现在是这样)。

【讨论】:

    【解决方案3】:

    对我来说,你们帮了很多忙,但我只完成了一部分。我只是想从 F​​irebase.FirebaseException 获取特定消息,例如,当电子邮件无效或未提供时 - 只是我希望将响应转到屏幕而不是仅发送到控制台。

    这为我解决了问题:

    announcements.text = regTask.Exception.InnerExceptions[0].InnerException.Message;
    

    这个“regTask”是注册用户任务:“auth.CreateUserWithEmailAndPasswordAsync(email, password)”。

    【讨论】:

      【解决方案4】:
      FirebaseAuth.DefaultInstance.CreateUserWithEmailAndPasswordAsync (Email.text, Password.text).
      ContinueWith (task => {
              if (task.IsCanceled) 
              {
                  Debug.LogError ("CreateUserWithEmailAndPasswordAsync was canceled");
                  return;
              }
              if (task.IsFaulted) 
              {
                  Debug.LogError ("SignInWithEmailAndPasswordAsync encountered an error: " + task.Exception);
                  //      
                  ErrorText.text = "Error: " + task.Exception.InnerExceptions[0].Message;
                  //
                  return;
              }
      });
      

      我认为这可能是您想要的。这将显示“错误:”,然后显示消息是什么并且非常干净。

      【讨论】:

      • 感谢您的回答,但我们的想法是显示与默认 Firebase 日志不同的日志,以便处理多种语言。这就是为什么我更喜欢每种错误类型的 ID 列表,而不是分析消息字符串来检测错误类型,然后向用户显示我自己的版本。
      • 但也许我的问题是一个功能请求而不是一个“错误”
      猜你喜欢
      • 1970-01-01
      • 2021-07-11
      • 2016-06-12
      • 1970-01-01
      • 2021-05-10
      • 2019-09-30
      • 2018-01-19
      • 1970-01-01
      相关资源
      最近更新 更多