1

最近appleAuthProvider()、iOS で Swift を使用して FirebaseUI に追加しました。AppleFirebase コンソールでサインイン方法を有効にし、 Sign in with AppleCapability を追加しました。

これまでのところすべて問題ありませんがauthUI(_ authUI: FUIAuth, didSignInWith authDataResult: AuthDataResult?, error: Error?)、 がデリゲートから呼び出された場合、 からのユーザーauthDataResult、およびからのユーザーAuth.auth().currentUserの値displayNameが設定されていないか、またはnil.

皆さん、それを機能させるための解決策または回避策はありますか? Firebase はユーザーからのメールのみを提供します。これdisplayNameは私にとって必須です。

コードを以下に示します。

        let authUI = FUIAuth.defaultAuthUI()
        authUI?.shouldHideCancelButton = true
        authUI?.delegate = delegate
        authUI?.tosurl = Constants.Url.kFirebaseTermsOfService
        authUI?.privacyPolicyURL = Constants.Url.kFirebasePrivacyPolicy
        
        let emailAuth = FUIEmailAuth()
        let facebookAuth = FUIFacebookAuth(permissions: ["public_profile", "email"])
        let googleAuth = FUIGoogleAuth()
        
        var providers: [FUIAuthProvider] = [emailAuth, facebookAuth, googleAuth]
        if useAnonymous {
            let anonymousAuth = FUIAnonymousAuth()
            providers.append(anonymousAuth)
        }

        if #available(iOS 13.0, *) {
            let appleAuth = FUIOAuth.appleAuthProvider()
            providers.append(appleAuth)
        }
        
        authUI?.providers = providers

これが firebase デリゲート メソッドです。

func authUI(_ authUI: FUIAuth, didSignInWith authDataResult: AuthDataResult?, error: Error?) {
        
        if let error = error {
            print(error)
            return
        }
        
        if let result = authDataResult, let userInfo = result.additionalUserInfo {
            if userInfo.isNewUser {
                let username: String
                if result.user.isAnonymous {
                    let usernameNumber = String(Int(Date().timeIntervalSince1970) * Int.random(in: 1...9)).suffix(6)
                    username = "Guest\(usernameNumber)"
                } else {
                    username = result.user.displayName ?? "" // displayName is nil here
                }
                var data = [
                    "username" : username
                ]

                // Do something here
            }
       }
}
4

0 に答える 0