用户凭据-使用Apple(SwiftUI)登录

用户凭据-使用Apple(SwiftUI)登录,swift,google-cloud-firestore,firebase-authentication,swiftui,sign-in-with-apple,Swift,Google Cloud Firestore,Firebase Authentication,Swiftui,Sign In With Apple,我正在测试通过登录苹果向Firebase注册一名用户。我有可以查看的基本设置 在我的Auth.Auth().sign(:)with credential方法中,我试图从appleIDCredential中提取.fullName,以便稍后用于识别用户 以下是我的:didCompleteWithAuthorization委托方法中的代码,该方法位于功能授权控制器(:): 我使用.fullName上的.descriptionget only方法来获取返回凭证的文本表示,该凭证是身份验证时用户的全名 但

我正在测试通过登录苹果向Firebase注册一名用户。我有可以查看的基本设置

在我的
Auth.Auth().sign(:)
with credential方法中,我试图从
appleIDCredential
中提取
.fullName
,以便稍后用于识别用户

以下是我的
:didCompleteWithAuthorization
委托方法中的代码,该方法位于
功能授权控制器(:)

我使用
.fullName
上的
.description
get only方法来获取返回凭证的文本表示,该凭证是身份验证时用户的全名

但是最后的
displayName
包括文字givenName和familyName前缀,即:


givenName: David familyName: Example

我尝试将字符串拆分为四个元素的数组,并进行过滤,但没有成功

我想从凭证返回
davidexample
,凭证是身份验证点处的用户名

解决方案


    if let _ = authResult?.user {
                    let changeRequest = authResult?.user.createProfileChangeRequest()
                    
                    if let givenName = appleIDCredential.fullName?.givenName,
                       let familyName = appleIDCredential.fullName?.familyName {

                       changeRequest?.displayName = "\(givenName) \(familyName)"
                    }
                                    
                    changeRequest?.commitChanges(completion: { (error) in

                        if let error = error {
                            print(error.localizedDescription)
                        } else {
                            print("Updated display name: \(changeRequest?.displayName ?? "")")
                        }
                    })
                }


您可以分别提取
givenName
familyName
并将它们重新组合为
displayName
,如下所示:

if let givenName = appleIDCredential.fullName?.givenName,
   let familyName = appleIDCredential.fullName?.familyName {

   changeRequest?.displayName = "\(givenName) \(familyName)"
}

就这样。非常感谢。
if let givenName = appleIDCredential.fullName?.givenName,
   let familyName = appleIDCredential.fullName?.familyName {

   changeRequest?.displayName = "\(givenName) \(familyName)"
}