Ios 在applicationWillTerminate中调用云函数
我想在应用程序即将关闭时从实时数据库中删除一些数据 我这样定义了函数(稍后将添加逻辑): 我从我的应用程序代表处调用它:Ios 在applicationWillTerminate中调用云函数,ios,swift,firebase,firebase-realtime-database,google-cloud-functions,Ios,Swift,Firebase,Firebase Realtime Database,Google Cloud Functions,我想在应用程序即将关闭时从实时数据库中删除一些数据 我这样定义了函数(稍后将添加逻辑): 我从我的应用程序代表处调用它: func applicationWillTerminate(_ application: UIApplication) { print("Application will terminate") functions.httpsCallable("removeAllAssignedTeams").call(["judgeId": getUserPhoneNumb
func applicationWillTerminate(_ application: UIApplication) {
print("Application will terminate")
functions.httpsCallable("removeAllAssignedTeams").call(["judgeId": getUserPhoneNumber()]) { (_, _) in }
}
但在我的云函数控制台中,我从未看到该函数的任何日志,甚至没有该函数开始执行的迹象。我做错了什么?我怀疑你没有做错什么。应用程序进程更有可能在请求实际到达函数之前终止。根据报告: 此方法的实现大约需要五秒钟的时间 执行任何任务并返回。如果该方法在之前未返回 时间到期时,系统可能会完全终止进程 我建议在applicationWillTerminate之外测试您的代码,看看它是否按照您期望的方式工作。如果是这样,那么您可以假设它只是没有及时完成,以便在进程结束之前调用函数
还要记住,调用可调用函数是异步的,
call()
将在收到结果之前立即返回。因此,您的实现将立即返回,这可能是在向iOS发出信号,表明您已经完成了工作。即使您设法实现您的实现块,直到调用完成,它仍然可能在您的大约5秒之前完成。 < P>如果您想在用户断开时从实时数据库中删除数据,请考虑。有了这样一个处理程序,当is检测到客户机消失时,服务器将删除数据。这可能需要几分钟(取决于应用程序是如何关闭的),但通常比在应用程序关闭时尝试进行任何网络呼叫更可靠,因为当您调用onDisconnect
时,有关如何操作的指令会直接发送到服务器
如果您使用的是onDisconnect
处理程序,那么您可以在应用程序willterminate
中通过调用。虽然这也有可能不起作用,但在这种情况下,服务器仍会在几分钟后检测到客户端已离开,而在离线调用成功的情况下,onDisconnect
处理程序将立即执行
如果删除数据的代码比较复杂,请考虑在数据库中用一个<代码> OnDeStult< /Cuff>处理程序删除一个简单的值。然后,通过将一个云函数附加到删除该简单值,当服务器检测到客户端已离开时,云函数代码将运行。
我如何从这里调用云函数?它只涉及向数据库写入值。我正在按照您的建议进行设置。onUpdate的侦听器。但我注意到离线写入有时不会触发。我已经添加了Database.Database().goOffline()
,但有时它会立即写入true/false。是的,我今天打算接受它。昨天太晚了。一旦我的用户按照您的建议登录,我将注册脱机写入。以前,我是在willTerminate
中编写的,这导致写入不一致。正确,您需要尽快注册onDisconnect
处理程序。实际上,它会直接向服务器发送一个延迟的写操作,这也是为什么您必须能够为写操作预先计算数据的原因(您可以这样做)。
func applicationWillTerminate(_ application: UIApplication) {
print("Application will terminate")
functions.httpsCallable("removeAllAssignedTeams").call(["judgeId": getUserPhoneNumber()]) { (_, _) in }
}