Swift中如何获取Firebase本地化错误的特定消息?
获取Firebase Auth本地化错误的特定消息
你遇到的问题是因为localizedDescription返回的是系统默认的完整错误描述,包含了较多技术细节。要获取更简洁、特定的Firebase错误消息,可以通过以下两种方式处理:
方法一:精准匹配Firebase错误码(推荐)
Firebase Auth提供了AuthErrorCode枚举,覆盖了所有可能的认证错误类型。你可以通过错误码精准判断错误类型,返回自定义或Firebase提供的本地化消息:
func handlelogout() { do { try Auth.auth().signOut() // 登出成功后再跳转登录页,避免失败时也跳转 let loginController = LoginController() present(loginController, animated: true, completion: nil) } catch let logoutError as NSError { // 确认是Firebase Auth的错误 guard logoutError.domain == AuthErrorDomain else { print("非认证错误:\(logoutError.localizedDescription)") return } let errorCode = AuthErrorCode(rawValue: logoutError.code) let errorMessage: String switch errorCode { case .userNotFound: errorMessage = "未找到该用户账号" case .userDisabled: errorMessage = "账号已被禁用,请联系管理员" case .invalidEmail: errorMessage = "邮箱格式不正确" // 根据你的需求,添加更多需要处理的错误类型 default: // 用Firebase提供的本地化描述,或设置默认消息 errorMessage = logoutError.userInfo[NSLocalizedDescriptionKey] as? String ?? "登出失败,请稍后重试" } print(errorMessage) } }
方法二:直接提取Firebase的简洁错误描述
如果你不需要精准匹配错误类型,只想获取Firebase内置的简洁本地化消息,可以从错误的userInfo字典中提取NSLocalizedFailureReasonErrorKey对应的值,这个值通常比localizedDescription更友好:
func handlelogout() { do { try Auth.auth().signOut() let loginController = LoginController() present(loginController, animated: true, completion: nil) } catch let logoutError as NSError { if logoutError.domain == AuthErrorDomain { // 获取简洁的错误消息 let errorMessage = logoutError.userInfo[NSLocalizedFailureReasonErrorKey] as? String ?? logoutError.localizedDescription print(errorMessage) } else { print(logoutError.localizedDescription) } } }
注意事项
- 记得把跳转登录页的代码放在
do块内,只有登出成功时才执行,避免错误情况下也跳转到登录页。 - 如果需要适配多语言,可以用
NSLocalizedString替换硬编码的错误消息,比如:NSLocalizedString("user_not_found", comment: "未找到用户")。
内容的提问来源于stack exchange,提问作者Kevin Munui
相关产品推荐
相关产品推荐

