0

我无法获取用户的谷歌个人资料图片并将其保存到Firebase数据库。它只是将空的图片保存到Firebase数据库。我的代码如下所示:将Google个人资料图片保存到Firebase中

Appdelegate.swift

func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error!) { 
    if let err = error { 
     print ("Failed to log in with Google: ", err) 
     return 
    } 

    print ("Successfully logged in with Google", user) 


    guard let idToken = user.authentication.idToken else { return } 
    guard let accessToken = user.authentication.accessToken else { return } 

    let credentials = FIRGoogleAuthProvider.credential(withIDToken: idToken, accessToken: accessToken) 
    FIRAuth.auth()?.signIn(with: credentials, completion: { (user, error) in 
     if let err = error { 
      print("Failed to create a Firebase User with Google: ", err) 
      return 
     } else { 


     guard let uid = user?.uid else { return } 
     print("Sucessfully logged in to Firebase with Google", uid) 
      //sends user to homepage VC after a successful login 
      let myStoryboard:UIStoryboard = UIStoryboard(name: "Main", bundle: nil) 
      let homePage = myStoryboard.instantiateViewController(withIdentifier: "homePageVC") as! homePageViewController 


      let appDelegate:AppDelegate = UIApplication.shared.delegate as! AppDelegate 
      appDelegate.window?.rootViewController = homePage 

     } 

    }) 

homepageViewController.swift

@IBOutlet weak var profilePic: UIImageView! 

func firebaseStorage() { 

    let user = FIRAuth.auth()?.currentUser 
    if let user = user { 

     let name = user.displayName 

     self.profileName.text = name 

    } 
    // Get a reference to the storage service using the default Firebase App 
    let storage = FIRStorage.storage() 

    // Create a storage reference 
    let storageRef = storage.reference() 

    //points to the child directory where the profile picture will be saved on firebase 
    let profilePicRef = storageRef.child("/User Profile Pictures/"+(user?.uid)!+"/profile_pic.jpg") 

if (GIDSignIn.sharedInstance().currentUser != nil) { 


      let data = Data() 

      //upload image to storage 
      let uploadTask = profilePicRef.put(data, metadata: nil) { (metadata, error) in 
       guard let metadata = metadata else { 
        // Uh-oh, an error occurred! 
        return 
       } 
       // Metadata contains file metadata such as size, content-type, and download URL. 
       let downloadURL = metadata.downloadURL 
      } 

      self.profilePic.image = UIImage(data: Data) 

     } 

    } 

回答

0

没关系家伙!我设法通过修改视图控制器代码来实现它,如下所示:

if (GIDSignIn.sharedInstance().currentUser != nil) { 

      let imageUrl = GIDSignIn.sharedInstance().currentUser.profile.imageURL(withDimension: 400).absoluteString 
      let url = NSURL(string: imageUrl) as! URL 
      let data = NSData(contentsOf: url) 

      //upload image to storage 
      let uploadTask = profilePicRef.put(data as! Data, metadata: nil) { (metadata, error) in 
       guard let metadata = metadata else { 
        // Uh-oh, an error occurred! 
        return 
       } 
       // Metadata contains file metadata such as size, content-type, and download URL. 
       let downloadURL = metadata.downloadURL 
      } 

      self.profilePic.image = UIImage(data: data as! Data) 

     } 


    } 
相关问题