离线

时间:2017-07-22 08:37:13

标签: firebase swift3 firebase-realtime-database firebase-authentication

我会在注册时将用户数据保存到firebase中,但是如果他创建了Auth帐户然后在保存他的信息之前丢失了连接,则会出现问题,这意味着他将获得没有任何电子邮件的密码个人资料信息。

所以问题是如果他失去连接或退出应用程序后如何再次设置值?

FIRAuth.auth()?.createUser(withEmail: self.emailTxt.text!, password: self.passTxt.text!, completion: {
        (user, error) in
        if error != nil {
            if let isError = error?.localizedDescription
            {
                print(isError)
            } else {
                print("Error: 33")
            }
        }
        else if user != nil
        {
            // Email and password created
            let userInfo: [String : Any] = ["timestamp": FIRServerValue.timestamp(),
                                            "uid" : user!.uid,
                                            "email" : self.emailTxt.text!,
              //  This info must be send again if its failed.
                                        ]
              self.ref.child("users").child("profile").child((user?.uid)!).setValue(userInfo) {
                (error, ref) in

                if error != nil {
                    print("error set profile info")
                    // What should i do if its failed? 
                } else {
                    print("done creating user's profile")
                }
        }
    }
    }// Completion end.

2 个答案:

答案 0 :(得分:2)

您需要启用磁盘持久性

Database.database().isPersistenceEnabled = true

Firebase应用自动处理临时网络中断。离线时可以使用缓存数据,Firebase会在网络连接恢复后重新发送任何写入内容。

这里是Firebase Offline Capabilities documentation.

答案 1 :(得分:0)

这里有两个选项:

  1. 使用磁盘持久性,这意味着当用户重新联机时将写入数据。这就是Pipiks的回答所解释的。

  2. 不要依赖客户端来创建注册信息,而是使用云功能。

  3. 对于第二个选项,您使用Cloud Functions for Firebase撰写JavaScript code that is executed on Google's servers when the user account is created。请参阅此example of sending a welcome email(您必须修改以写入数据)。