【问题标题】:Calling cloud function in applicationWillTerminate在 applicationWillTerminate 中调用云函数
【发布时间】:2020-06-25 03:00:00
【问题描述】:

当应用程序即将关闭时,我想从我的实时数据库中删除一些数据。

我是这样定义函数的(稍后会添加逻辑):

exports.removeAllAssignedTeams = functions.https.onCall((data, context) => {
  const judgeId = data.judgeId;
  console.log("Will unassign all teams assigned to judge id: ", judgeId);
});

我从我的应用程序委托中调用它:

func applicationWillTerminate(_ application: UIApplication) {
    print("Application will terminate")
    functions.httpsCallable("removeAllAssignedTeams").call(["judgeId": getUserPhoneNumber()]) { (_, _) in }
}

但在我的云函数控制台中,我从未看到此函数的任何日志,甚至没有看到函数开始执行的迹象。我做错了什么?

【问题讨论】:

    标签: ios swift firebase firebase-realtime-database google-cloud-functions


    【解决方案1】:

    我怀疑你没有做错什么。应用程序进程更有可能在请求实际到达函数之前终止。根据documentation for applicationWillTerminate

    您实施此方法的时间大约为 5 秒 执行任何任务并返回。如果方法之前没有返回 时间到了,系统可能会干脆杀掉这个进程。

    我建议在 applicationWillTerminate 之外测试您的代码,看看它是否按您期望的方式工作。如果是这样,那么您可以假设它只是没有及时完成,以便在进程终止之前调用函数。

    还请记住,调用可调用函数是异步的,call() 将在收到结果之前立即返回。因此,您的实现会立即返回,这可能是向 iOS 发出信号,表明您已完成工作。即使您设法在调用完成之前阻止您的实现,它仍然可能在您大约 5 秒结束之前无法完成。

    【讨论】:

      【解决方案2】:

      如果您想在用户断开连接时从实时数据库中删除数据,请考虑using an onDisconnect handler。使用这样的处理程序,服务器将在检测到客户端消失时删除数据。这可能需要几分钟(取决于应用程序的关闭方式),但通常比在应用程序关闭时尝试进行任何网络调用更可靠,因为当您执行操作时会立即将操作说明发送到服务器拨打onDisconnect

      如果您使用onDisconnect 处理程序,您可以applicationWillTerminate 中执行的操作是通过调用goOffline() method 主动告诉客户端关闭连接。虽然这也有可能不起作用,但在这种情况下,服务器仍然会在几分钟后检测到客户端已经消失,而在离线调用使其通过的情况下,将执行 onDisconnect 处理程序马上。

      如果删除数据的代码很复杂,请考虑在您使用onDisconnect 处理程序删除的数据库中有一个简单的值。然后通过附加一个云函数来删除那个简单的值,云函数代码将在服务器检测到客户端消失时运行。

      【讨论】:

      • 我如何从这里调用云函数?它只讨论将值写入数据库。
      • 我正在按照您的建议进行设置。 onUpdate 的监听器。但我注意到离线写入有时不会触发。我已经添加了Database.database().goOffline(),但它有时会立即写入真/假。
      • 是的,我今天打算接受它。昨天超级晚了。一旦我的用户按照您的建议登录,我就会注册离线写入。之前我是在willTerminate写的,导致写不一致。
      • 正确,您需要尽快注册onDisconnect处理程序。它本质上是立即向服务器发送延迟的写入操作,这也是为什么您必须能够预先计算写入数据的原因(您可以)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-18
      • 2011-11-17
      • 1970-01-01
      • 1970-01-01
      • 2011-05-18
      相关资源
      最近更新 更多