使用 Xcode 10.1、Swift 4.2 和 Firebase ##
使用以下代码将数据上传到 firebase 后,我在实时数据库中看不到数据:
static func createUser(username: String, email: String, password: String, imageData: Data, onSuccess: @escaping () -> Void, onError: @escaping (_ error: String?) -> Void) {
Auth.auth().createUser(withEmail: email, password: password) { (data, error) in
if let err = error {
onError(err.localizedDescription)
return
}
// User erfolgreich erstellt
guard let uid = data?.user.uid else { return }
self.uploadUserData(uid: uid, username: username, email: email, imageData: imageData, onSuccess: onSuccess)
}
}
static func uploadUserData(uid: String, username: String, email: String, imageData: Data, onSuccess: @escaping () -> Void) {
let storageRef = Storage.storage().reference().child("profile_image").child(uid)
storageRef.putData(imageData, metadata: nil) { (metadata, error) in
if error != nil {
return
}
}
storageRef.downloadURL(completion: { (url, error) in
if error != nil {
print(error!.localizedDescription)
return
}
let profilImageURL = url?.absoluteString
let ref = Database.database().reference().child("users").child(uid)
ref.setValue(["username" : username, "email" : email, "profileImageURL": profilImageURL ?? "Kein Bild vorhanden"])
})
onSuccess()
}
firebase 中的设置:
应该以正确的方式工作。我已经查看了 firebase 文档,但没有找到更多信息。
最佳答案
图像是否上传到云存储?如果是,但下载 URL 没有写入数据库,我猜是因为在生成下载 URL 之前数据没有上传。由于上传函数是异步的,因此应该从闭包中调用 downloadURL 函数。
static func uploadUserData(uid: String, username: String, email: String, imageData: Data, onSuccess: @escaping () -> Void) {
let storageRef = Storage.storage().reference().child("profile_image").child(uid)
storageRef.putData(imageData, metadata: nil) { (metadata, error) in
if error != nil {
return
}
storageRef.downloadURL(completion: { (url, error) in
if error != nil {
print(error!.localizedDescription)
return
}
onSuccess()
}
}
关于 swift ,火力地堡 : No datas in realtime database after creating user,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53230887/
我正在使用firebase和angularfire。使用FirebaseApi进行CRUD的方法有很多实际上,我仍然不明白使用的具体区别是什么用$firebaseArray添加$.push()方法.set()方法我认为它们在技术上是相同的,我更喜欢在不知道确切原因的情况下使用.setmethod(),为什么我会使用它。有什么不使用它的具体原因吗?$firebaseArray到底做了什么?如果我们可以只声明基本引用变量。在这种情况下:varusersRef=Ref.child('users');$scope.createUser=function(){$scope.userRef.chi
我正在尝试为我的数据库客户端编写一些测试,这要求我首先对Firebase进行身份验证。我使用Jest作为我的测试运行器。我的测试看起来像:it('shouldsignin',async(done)=>{try{awaitauth.signInWithEmailAndPassword('testabc@test.com','testuser');}catch(e){console.log(e);}done();});我的firebase应用已初始化,我已验证APIkey是否正确。一些有趣的注意事项是,即使我得到:'Anetworkerror(suchastimeout,interrupt
我目前正在做一个ReactNative项目,想使用FirebaseJSSDK。为了熟悉它的所有API,我想用Jest编写一些学习测试。这是我的测试:importFirebasefrom'firebase';describe('Firebase',function(){it('shouldwork',function() {expect(null).toBeNull()})});不幸的是我收到了这个错误:●测试套件运行失败TypeError:Cannotreadproperty'defineProperties'ofundefinedatnode_modules/firebase/app
当我将time.Now()编码到JSON对象时,它给出的结果为"2009-11-10T23:00:00Z"但打印时间。现在给出2009-11-1023:00:00+0000UTC。他们为什么不同。什么是T和Z。另外,如何根据this将其转换为swiftNSDate对象?表? 最佳答案 这些值的含义无关紧要,它们是该格式(ISO8601)的一部分。有几种方法可以解决这个问题。一种是为时间或您的结构定义自定义MarshalJSON()方法并使用它来格式化日期,另一种是首先在您的结构中将其表示为字符串,以便当默认实现执行你得到你正在寻找的
在C/C++/Java/Go中,我们使用,来分隔参数:(aint,bint)在ObjectiveC中,我们使用:来表示参数::(int)a:(int)b在Swift中,我们必须同时使用:和,:(a:int,b:int)是否需要冗余? 最佳答案 Swift可能有外部和内部参数名称:(externalinternal:Int)如果没有独特的分隔符,会产生很多歧义。 关于objective-c-为什么Swift函数定义语法是多余的?,我们在StackOverflow上找到一个类似的问题:
我的Swift应用程序与用Go编写的服务器通信。我希望使用Zlib压缩传输的数据,但压缩结果似乎与Swift和Go不同。这是Go版本:sourceString:="A-t-ellebesoind'autrespreuves?Acceptez-lapourleplaisir.J'aitantfaitquedelacueillir,Etc'estpresqueunefleur-des-veuves."//Compressionvarbbytes.Bufferwriter:=zlib.NewWriter(&b)writer.Write([]byte(sourceString))writer.
我正在使用rsaEncryptionOAEPSHA256AESGCM在iOS上使用SecKeyCreateEncryptedData加密一些数据,然后在golang后端解密相同的数据。我正在使用3072位rsa公钥来加密对称key。当我从iOS获取数据到后端时,我能够成功解密对称key,但gcm标签验证失败。我使用的是与iOS相同的16字节IV,但不知道iOS在加密时是否使用任何aad(附加身份验证数据)。有谁知道rsaEncryptionOAEPSHA256AESGCMforiOS是否使用了一些aad?这适用于iOS10+。我已经尝试过使用nil、空的16字节数组、aeskey本身、
我使用swiftyJSON从apiurl消费OData。这里的apiurl与VPN连接。并且apiurl看起来像http://192.xxx.xx.xx:8000/sap/opu/odata/sap/Z_SRV/PRListSetSet?$format=json当我在模拟器中运行时,我可以从odataapiurl获取数据,但是在设备中运行时,没有从odataapiurl接收到数据。由于没有vpn连接到移动设备。我如何以编程方式对我的VPN进行硬编码以在移动设备中接收数据?这是我如何从ODataapiurl获取数据:typealiasServiceResponse=(JSON,Error
我正在开发一个涉及一些XML解析的自定义框架,使用Kanna框架。每当我尝试将我的框架导入playground时,playground就会崩溃并出现以下错误:Playgroundexecutionfailed:expressionfailedtoparse,unknownerror*thread#1:tid=0x4e9448,0x00000001074bf360com.apple.dt.Xcode.PlaygroundStub-macosx`executePlayground,queue='com.apple.main-thread',stopreason=breakpoint1.1*
我尝试在Windows10上的Ubuntu上的bash上安装Swift4我的Ubuntu版本:我@DESKTOP:~$lsb_release-a没有可用的LSB模块。经销商ID:Ubuntu描述:Ubuntu16.04.3LTS发布:16.04代号:xenial我做了apt-getupgrade和apt-getupdate我遵循Linux步骤here:安装Swift4最终我得到了错误:我@DESKTOP:~$swift/home/me/swift4/swift-4.0.2-RELEASE-ubuntu16.04/usr/bin/lldb:加载共享库时出错:libpython2.7.so