0

下面的代碼根本不工作:火力地堡Facebook帳號登錄FIRUserInfo

if let rawProfile = user?.providerData["cachedUserProfile"] as? ...... 

Error: Cannot subscript a value of type '[FIRUserInfo]' with an index of type 'String'

我一直在努力從舊的火力地堡控制檯/文件到新的更新我的項目。

但是,新用戶似乎只允許在用戶註冊FIRUserInfo(如displayName,photoURL和電子郵件)時拉取某些內容。

任何想法如何我能夠拉我以前的東西,如性別?

列表項

static func createUser(viewController: UIViewController, completion: (success: Bool) -> Void) { 
    let ref = FIRDatabase.database().reference() 
    let facebookLogin = FBSDKLoginManager() 

    facebookLogin.logInWithReadPermissions(["public_profile", "email", "user_friends"], fromViewController: viewController, handler: {(facebookResult, facebookError) -> Void in 
     if facebookError != nil { 
      print("Facebook login failed. Error \(facebookError)") 
      completion(success: false) 
     } else if facebookResult.isCancelled { 
      print("Facebook login was cancelled.") 
      completion(success: false) 
     } else { 
      let credential = FIRFacebookAuthProvider.credentialWithAccessToken(FBSDKAccessToken.currentAccessToken().tokenString) 

      FIRAuth.auth()?.signInWithCredential(credential, completion: { (user, error) in 
       if error != nil { 
        print("Login failed. \(error)") 
        completion(success: false) 
       } else { 
        if let rawProfile = user?.providerData["cachedUserProfile"] as? [String: AnyObject] { 
         guard let firstName = rawProfile["first_name"] as? String else { return } 
         guard let gender = rawProfile["gender"] as? String else { return } 
         guard let uid = rawProfile["id"] as? String else { return } 
         guard let picture = rawProfile["picture"] as? [String : AnyObject] else { return } 
         guard let data = picture["data"] as? [String : AnyObject] else { return } 
         guard let url = data["url"] as? String else { print("failed in data") ; return } 

         let email = user?.providerData["email"] as! NSString as String 

         let newUser = User(firstName: firstName, gender: gender, email: email, imageURL: url) 

         FirebaseController.base.child("users").child(uid).updateChildValues(newUser.jsonValue) 

         self.currentUserID = uid 

編輯 越來越近,並能拉我的需要,但不能創建用戶數據...

static func createUser(viewController: UIViewController, completion: (success: Bool) -> Void) { 
    let facebookLogin = FBSDKLoginManager() 

    facebookLogin.logInWithReadPermissions(["public_profile", "email", "user_friends"], fromViewController: viewController, handler: {(facebookResult, facebookError) -> Void in 
     if facebookError != nil { 
      print("Facebook login failed. Error \(facebookError)") 
      completion(success: false) 
     } else if facebookResult.isCancelled { 
      print("Facebook login was cancelled.") 
      completion(success: false) 
     } else { 
      let credential = FIRFacebookAuthProvider.credentialWithAccessToken(FBSDKAccessToken.currentAccessToken().tokenString) 

      FIRAuth.auth()?.signInWithCredential(credential, completion: { (user, error) in 
       if error != nil { 
        print("Login failed. \(error)") 
        completion(success: false) 
       } else { 
        let userDetails = FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "id, first_name, email, gender, picture"]) 

        userDetails.startWithCompletionHandler({ (connection, result, error) in 
         if error != nil { 
          print("Error connecting FBSDKGraphRequest") 
         } else if let result = result { 
          guard let firstName = result["first_name"] as? String else {return} 
          guard let gender = result["gender"] as? String else {return} 
          guard let uid = result["id"] as? String else {return} 
          guard let imageURL = result["url"] as? String else {return} 
          guard let email = result["email"] as? String else {return} 

          let newUser = User(firstName: firstName, gender: gender, email: email, imageURL: imageURL) 

          FirebaseController.base.child("users").child(uid).updateChildValues(newUser.jsonValue) 

回答

0

幾個小時的搜索後,閱讀和升級到最新的Cocoapods,我解決了這個問題。

這是Info.plist設置,json解析和其他一些事情的混合。