0
我的應用程序允許進行Facebook身份驗證。當用戶登錄時,我想建立一個名爲用戶的節點,其中包含用戶的一些信息。具體而言,我希望從Facebook獲取用戶的UID,姓名和個人資料圖片。從firebase存儲檢索圖像url到數據庫
這是到目前爲止我的代碼:
let credential = FIRFacebookAuthProvider.credential(withAccessToken: FBSDKAccessToken.current().tokenString)
// using the credentials above, sign in to firebase to create a user session
FIRAuth.auth()?.signIn(with: credential) { (user, error) in
print("User logged in the firebase")
// adding a reference to our firebase database
let ref = FIRDatabase.database().reference(fromURL: "https://gsignme-14416.firebaseio.com/")
// guard for user id
guard let uid = user?.uid else {
return
}
// create a child reference - uid will let us wrap each users data in a unique user id for later reference
let usersReference = ref.child("users").child(uid)
// performing the Facebook graph request to get the user data that just logged in so we can assign this stuff to our Firebase database:
let graphRequest = FBSDKGraphRequest(graphPath: "me", parameters: nil).start{
(connection, result, err) in
if let user = FIRAuth.auth()?.currentUser{
let name = user.displayName! as String
let newImage = UIGraphicsGetImageFromCurrentImageContext()
let data: Data = UIImageJPEGRepresentation(newImage!, 0.5)!
let storage = FIRStorage.storage()
let storageRef = storage.reference(forURL: "gs://gsignme-14416.appspot.com")
let profilePicRef = storageRef.child(user.uid+"/profile_pic.jpg")
let metadata = FIRStorageMetadata()
metadata.contentType = "image/jpg"
// Upload the file
let uploadTask = profilePicRef.put(data, metadata: metadata) { metadata, error in
if (error == nil) {
self.downloadurl = metadata!.downloadURL()!.absoluteString
} else {
print("there was an error uploading the profile pic!")
}
let postObject: Dictionary<String, Any> = [
"uid": uid,
"username" : name,
"userpic" : self.downloadurl
]
if ((error) != nil) {
// Process error
print("Error: \(String(describing: error))")
} else {
print("fetched user: \(String(describing: result))")
let values: [String:AnyObject] = result as! [String : AnyObject]
// update our database by using the child database reference above called usersReference
usersReference.updateChildValues(postObject, withCompletionBlock: { (err, ref) in
// if there's an error in saving to our firebase database
if err != nil {
print(err!)
return
}
// no error, so it means we've saved the user into our firebase database successfully
print("Save the user successfully into Firebase database")
})
}
}}}
}
沒有實現從火力存儲檢索用戶的照片URL,它完美的作品通過輸出的名稱和UID。但是,當我嘗試從Firebase存儲中檢索圖像URL時,它會崩潰並且無法輸出。我不確定我做錯了什麼。