사용자가 내 응용 프로그램에 로그인 할 때 Firebase Storage를 확인하는 데 약간의 문제가 있습니다. 사용자가 로그인 할 때 이미지가 생성되어 Firebase 데이터베이스와 스토리지에 성공적으로 저장되지만 사용자가 로그 아웃하고 앱에 다시 로그인 할 때마다 (자식 값 URL 문자열이 아닌) profileImage 파일이 Firebase Storage에 새로운 것으로 복제됩니다 별도의 이미지 파일.새 프로필을 만들기 전에 Firebase 저장소를 확인하십시오. 이미지 URL
ProfileImage 파일에 대한 Firebase 저장소를 확인하기 위해 로그인 할 때 응용 프로그램을 사용하고 싶다면 저장소에 같은 이미지를 다시 만들지 마십시오. 나는 새로운 이미지를 만드는 것보다 Firebase가 이미지인지 아닌지를 확인하는 논리를 이해합니다. 구문에 문제가 있습니다. 미리 도움을 주셔서 감사합니다!
// login user with Facebook
func loginWithFacebook() {
let accessToken = FBSDKAccessToken.current()
guard let accessTokenString = accessToken?.tokenString else { return }
let credentials = FIRFacebookAuthProvider.credential(withAccessToken: accessTokenString)
FIRAuth.auth()?.signIn(with: credentials, completion: { (user, error) in
if error != nil {
print("Something went wrong with our FB user: ", error ?? "")
return
}
guard let uid = user?.uid else {
return
}
let imageName = NSUUID().uuidString
let storageRef = FIRStorage.storage().reference().child("profile_images").child("\(imageName).png")
let photoUrl = user?.photoURL
// check to see if current user already has stored image with URL
if FIRStorage.storage().reference().child("profile_images").child("\(imageName).png") == nil {
if let imageData = NSData(contentsOf: photoUrl!) {
storageRef.put(imageData as Data, metadata:nil) {
(metadata, error) in
if error != nil {
print(error!)
return
} else {
if let profileImageUrl = metadata?.downloadURL()?.absoluteString {
let values = ["name": user!.displayName!, "email": user!.email!, "profileImageUrl": profileImageUrl]
self.registerUserWithUID(uid: uid, values: values as [String : AnyObject])
}
}
}
}
} else {
print("image already exists")
}
print("Successfully logged in with our user: ", user ?? "")
self.delegate?.finishLoggingIn()
})
private func registerUserWithUID(uid: String, values: [String: AnyObject]) {
// create items in database upon creating user ---------------
let ref = FIRDatabase.database().reference()
let usersReference = ref.child("users").child(uid)
usersReference.updateChildValues(values, withCompletionBlock: { (err, ref) in
if err != nil {
print(err!)
return
}
print("user has been saved to Firebase database")
})
}
덕분에 - 의미가 있습니다. 하지만 여전히 오류가 발생하고 있습니다. "FIRStorageReference 타입의 값에는 'observeSingleEvent'멤버가 없습니다 ... 이유에 대한 의견이 있습니까? – user3708224
@ user3708224 죄송합니다. firebase 데이터베이스에 대해 생각했습니다. http : // stackoverflow .com/questions/38184900/firebase-storage-file-if-a-fire-storage-file-exists가 존재합니다. – vira