我正在尝试将用户图片保存到Firebase存储,检索它的downloadUrl
and将它全部保存到CoreData
。我打电话给上传功能,在它完成后我称之为CoreData
saving功能。除了一个小细节外,我完全正常工作:如果我从GID didSignInFor
调用它,则用户无权写入storage
yet因为没有登录,所以它失败了。我已经尝试调用我执行segue的函数,认为登录过程中已完成并且我有权写入Storage
but它没有看到user
。所以我试着在最后调用它,但结果却没有得到许可。你能发现我在didSignInFor
的错误吗?您可以通过注释掉的代码查看我的尝试。非常感谢一如既往。这是方法:
func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error?) {
// ...
print("User successfully signed in with Google",user)
guard let idToken = user.authentication.idToken else {return}
guard let accessToken = user.authentication.accessToken else {return}
let credentials = GoogleAuthProvider.credential(withIDToken: idToken, accessToken: accessToken)
Auth.auth().signInAndRetrieveData(with: credentials) { (user, error) in
if let error = error {
print("Failed to create user with Google account", error)
return
} else {
// here user in not accessible yet
print("Succesfully created new user in Firebase with Google account")
self.performSegue(withIdentifier: "continueSegue", sender: self)
}
}
// user details
UserDetails.shopId = user.userID
UserDetails.fullName = user.profile.name
UserDetails.givenName = user.profile.givenName
UserDetails.familyName = user.profile.familyName
UserDetails.email = user.profile.email
if user.profile.hasImage {
// UserDetails.logoUrl = String(describing: user.profile.imageURL(withDimension: 100)) // String // wrong.. use the downloadUrl from Firabase Storage
let data = try? Data(contentsOf: user.profile.imageURL(withDimension: 100))
if let imageData = data {
UserDetails.logo = UIImage(data: imageData)
// // Post image to Firebase Storage here it fails at first sign in because of storage rules
// Firebase.uploadImage(completed: { (true) in
// // Save user to CoreData
// User.saveUserDetails(shopId: UserDetails.shopId!, name: UserDetails.fullName!, address: UserDetails.address ?? "", phoneNumber: UserDetails.phoneNumber ?? "", latitude: UserDetails.latitude ?? "", longitute: UserDetails.longitude ?? "", logo: UserDetails.logo!, logoUrl: UserDetails.logoUrl!)
// }, UserDetails.logo!)
}
我决定在以下vc的viewWillAppear
上传。它现在按照需要工作。