ユーザーが自分のアプリにログインしたときに、Firebase Storageをチェックする際に問題が少しあります。ユーザがログインするとFirebaseデータベースとストレージに正常に保存されますが、ユーザがログアウトしてアプリにログインするたびに、(ファイルのURL文字列ではなく)profileImageファイルがFirebase Storageに新しい別のイメージファイル。新しいプロファイルを作成する前にFirebase Storageを確認するImage URL
ログイン時にappを使用して、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/fire-base-storage-file-exists-how-do-i-detect-existsが存在します。 – vira