Swift Firebase-如何处理不同的Auth.auth()。currentUser?.linkAndRetrieveData错误消息

时间:2019-02-25 23:25:57

标签: ios swift firebase error-handling firebase-authentication

我使用电子邮件注册将用户登录到他们的帐户,然后使用Auth.auth().currentUser?.linkAndRetrieveData让用户将他们的电话号码链接到他们的帐户。

在回调中有一个Error对象,如果出现问题,该对象可以产生3个(或可能更多)不同的错误。我已经能够制作下面的3个了。

如果userA已经将他们的电话号码链接到他们的帐户,然后他们尝试再次将其链接,我会得到:

  

[ERROR_PROVIDER_ALREADY_LINKED]-用户只能链接到给定提供者的一个身份。

如果userA尝试链接已经链接到userB的电话号码,我将得到:

  

此凭据已与其他用户帐户关联。

如果短信验证码不正确:

  

用于创建电话身份验证凭证的SMS验证码为   无效。请重新发送验证码SMS并确保使用   用户提供的验证码。

现在,我只显示一个警告,提示“未知错误”。 我的问题是如何确定产生哪个错误,以便我做出相应的反应?

例如,如果用户为一个已经使用的号码输入了错误的电话号码,我需要告诉他们,而不是说“未知错误”。或者,如果用户输入了无效的短信代码,我只需要告诉他们“无效的短信代码”即可。

Auth.auth().currentUser?.linkAndRetrieveData(with: credential, completion: {
      (authDataResult, error) in

      if let error = error {
          print(error.localizedDescription)
          // alert user Unknown Error
          return
      }
})

我想出了两个想法:

  1. 在警报中,我可以向他们显示error.localizedDescription上打印的内容,但对于一般人而言,这些响应并不完全是用户友好的响应。我的母亲不会知道“用户只能链接到给定提供者的一个身份”,这意味着她的电话号码已被注册

  2. 我可以使用已经准备好响应的switch语句,如果其中任何一个匹配,我都可以进行相应调整

    switch error.localizedDescription {
    
        case "[ERROR_PROVIDER_ALREADY_LINKED] - User can only be linked to one identity for the given provider.":
    
        // alert user their phone is already registered
    
        case "This credential is already associated with a different user account.":
    
        // alert user this phone number is already in use
    
        case "The SMS verification code used to create the phone auth credential is invalid. Please resend the verification code SMS and be sure to use the verification code provided by the user.":
    
       // alert user the sms is invalid
    
        default:
       // alert user unknown error
    }
    

上述情况的问题是,如果Firebase曾经更改任何这些响应,我的switch语句将始终设置为默认值。以响应本身为基础是不切实际的,因为它们可以通过pod更新进行更改。

0 个答案:

没有答案