首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在应用程序终止时发送web请求?

如何在应用程序终止时发送web请求?
EN

Stack Overflow用户
提问于 2019-09-04 16:41:23
回答 1查看 1.4K关注 0票数 2

我的探索是关于一个统一游戏引擎,但可能适用于所有游戏或所有应用程序在一般情况下。

我正在为统一编写一个插件,需要在游戏会话中的某些时候使用yield return UnityWebRequest.SendWebRequest()。理想情况下,如果用户关闭游戏,我也需要发送这样的请求(例如,关闭游戏运行的操作系统的窗口)。

统一的onApplicationQuit预定义回调可以,但是我似乎不能在那里启动协同线(异步操作),因为在应用程序终止时,所有的gameObjects都会被销毁,而且根本没有足够的时间来处理web请求:没有一个框架,即使在应用程序关闭时有“宽限期”,也不能在几个帧中启动。

游戏如何解决这些问题?一般情况下,应用程序如何解决这个问题?这是关于在所有东西都被破坏时启动异步操作,操作系统不会等待应用程序接收结果,甚至从一开始就发送请求。

想到的一个解决方案是尝试定期发送数据。不过,我已经这么做了。因此,问题在于最后一个请求没有被发送,因为应用程序正在突然关闭。

我可以想到的另一个解决方案是存储需要发送的数据(例如发送到PlayerPrefs,或者简单地以我自己的格式发送到某个自定义文件),并在下一个应用程序启动时检查是否有任何待发送的数据。但是,这并不总是适用于我的情况,因为:

  1. 这款游戏可能再也不会推出了。用户可以直接卸载它。所以,数据就会丢失
  2. 我的服务器有一个最大的允许时间,在此之后请求将被拒绝,因此它必须在游戏期间内发送,或者在游戏结束后不久发送,而不是在一个月后发送。

还有一个解决方案:下载一个executalbe文件,当游戏关闭时,在onApplicationQuit中使用System.Diagnostics.Process运行该可执行文件,并在后台执行请求。所以,基本上,在游戏窗口关闭后,我会有另一个过程进行清理和报告。然而,这在两个方面是不好的:

  1. 不能跨平台工作( Windows、Mac、Linux和其他平台都需要单独的可执行文件--理想情况下,我希望这个插件能够运行在任何一个平台上,而这些平台都是联合构建的)
  2. 每个可执行文件都需要以自己的方式处理网络逻辑--与简单、统一的接口统一提供的工作相比,这是一种工作开销。

还有其他解决办法吗?

(顺便说一句,我已经放弃了应用程序崩溃时的情况-除了我已经定期发送的请求之外,我不希望在那个时候发送任何东西)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-04 19:06:21

另一个可能的解决方案是https://docs.unity3d.com/ScriptReference/Application-wantsToQuit.html

当播放机应用程序想退出时,统一会引发此事件。 向此事件添加事件处理程序,以接收应用程序试图退出的通知。 引发此事件时,退出进程已经启动,但可以取消。这意味着玩家不能保证退出。对于一个有保证的退出事件,请看一下Application.quitting。 返回true,退出过程将继续。返回false,退出进程将取消。

你会抓住想退出的用户,发送你的网络请求,当它完成后,你自己打电话给Application.Quit

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57792640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档