2017-03-15 72 views
1

我使用了一个导致应用程序崩溃的小错误。查询来自Firebase的数据时很可能发生错误(是的,是我的错)。这是当应用程序启动将要执行的第一个函数:为什么当应用程序崩溃时,Firebase不支持onDisconnect?

let currentUser = FIRAuth.auth()?.currentUser?.uid 
      let con = self.gameRef!.childByAutoId() 
      self.usersKey = con.key 
      let values = ["username": "test", "score": 0, "userID": currentUser!] as [String : Any] 
      con.updateChildValues(values) 
      con.onDisconnectRemoveValue() 

那么这个设置后,我查询例如从火力地堡一个数组,但我并设置一些值错什么导致应用程序崩溃。 onDisconnected函数从不执行。我等了一整天,我的信息仍然显示在实时数据库中。如果此代码在服务器端执行,那么服务器如何仍然认为我已连接?打开飞行模式关闭应用&将正确断开我的连接。

+0

耐心在这里是一种美德。当应用程序崩溃时,Firebase客户端没有时间明确指示断开连接。你的'onDisconnect()'处理程序仍然会触发,但是它需要几分钟的时间(套接字超时)。请参阅http://stackoverflow.com/questions/30668292/firebase-when-ondisconnect-event-fire/30670928#30670928 –

+0

我应该耐心等待多久?我已经在我的问题中说过,我等了一整天,相信我是24小时,而且还没有消失。 –

+0

正如我在回答中所说的那样,可能需要几分钟的时间。长于此,更可能是其他事情出错了。另外请记住,在您的示例中,重新启动应用程序将重写相同的值。 –

回答

0

发生这种情况是因为您的应用没有正确关闭。为了让该功能启动,它必须在应用程序关闭并清理其所有连接时启动。它崩溃时无法执行此操作,因为它不会执行比以前更多的代码。

你可以在代码的那一部分包装一个异常处理程序,然后执行你所需要的异常。

+1

* *实际上是一种方式。但这取决于服务器*检测*断开连接,这需要一些时间。看到我链接的答案。 –

+0

@FrankvanPuffelen谢谢我不知道这是一件事情。 –

+0

由于服务器上的功能继电器,服务器应检查连接。当我打开飞行模式时,它会正确处理断开连接。不是当应用程序崩溃。 –

相关问题