转: 关于在IOS平台下使用ARFoundation+UnityWebRequest无响应的解决方法最近发现unity在ios平台使用UnityWebRequest会偶尔出现无响应的情况,明明发送了webRequest请求但一直卡住在请求的协程或者开异步进程的请求中...
转:
关于在IOS平台下使用ARFoundation+UnityWebRequest无响应的解决方法
最近发现unity在ios平台使用UnityWebRequest会偶尔出现无响应的情况,明明发送了webRequest请求但一直卡住在请求的协程或者开异步进程的请求中,不会继续执行下去。而且这个问题只会在ios出现,在android或者pc平台是复现不了,一开始以为是自己代码的原因,但把请求从头到尾都debug输出过一遍后,发现代码是没错的,但web请求偶尔还是会卡住,即使设置了超时时间也一样。而且只要一出现这种情况,之后的webrequest请求都会卡在同一个地方。
附上代码:
public async UniTask DownloadSceneJsonRequest(string sceneId, string path)
{
Debug.Log("=========enter DownloadSceneJsonRequest");
var uri = new Uri(_domain + SceneApi + sceneId);
var uwr = new UnityWebRequest(uri, UnityWebRequest.kHttpVerbGET)
{
downloadHandler = new DownloadHandlerFile(path),
timeout=10,
useHttpContinue=false
};
Debug.Log("========= SendWebRequest+"+ _domain + SceneApi + sceneId);
await uwr.SendWebRequest();
//并没有以下输出
Debug.Log("========= complete SendWebRequest");
if (uwr.isNetworkError || uwr.isHttpError)
{
Debug.Log(uwr.error);
}
uwr.Dispose();
}
总的来概括这个问题就是:只在ios平台,使用unitywebrequest请求时,会偶发出现卡住webrequest请求无响应的情况,但没有必现规律,而且一旦出现,则后面的请求都会被阻断无响应。而且这跟unity的版本无关,在unity2019.3.0 unity2019.3.13 unity2019.4.19 unity2020.1.13都会出现一样的情况。
后面总算在unity的官方论坛中找到了一样的情况,而且都是使用了ARFoundation与UnityWebrequest,附上帖子的链接:https://forum.unity.com/threads/unitywebrequests-on-ios-sometimes-get-stuck-indefinitely-even-with-timeout-set.1012276/
原来是两个原因导致了这种情况:
1.使用了ARFoundation
2.在高于ios14.1(不包括)版本上使用app
根据外国网友的反馈,ARFoundation的ARSession脚本也发送unitywebrequest请求,当AR在Tracking lost -> recovering这状态瞬间时就会出现webrequest无响应的状态,而且最重要的是:
这是Unity的一个Bug。
具体导致的原因牵扯到unity打开出xcode工程后里面UnityWebRequest.mm类的代码逻辑,因为我对xcode的webrequest请求原理不太熟悉,感兴趣的可以查看原帖里面其他开发者的讨论。
下面来说下解决方案:
在生成的XCode工程中找到UnityWebRequest.mm类,对里面的UnityCreateWebRequestBackend函数增加一行代码:
webOperationQueue?=?[[NSOperationQueue alloc]?init];
webOperationQueue.name?=?@"com.unity3d.WebOperationQueue";
webOperationQueue.qualityOfService?=?NSQualityOfServiceUserInteractive;
同时对于使用Unity2018.4以下的版本的解决方案:
因为unity2018版还没有UnityWebRequest,使用的还是WWW,找到输出的Xcode工程中的WWWConnection.mm类,在第392行添加下面的代码:
webOperationQueue.qualityOfService = NSQualityOfServiceUserInteractive;
总结:虽然是找到了解决方案,但毕竟这是Unity的bug而且还比较致命,每次发布都需要在对应的类里面进行修改,希望Unity能早日修复这个bug。
转:
关于在IOS平台下使用ARFoundation+UnityWebRequest无响应的解决方法
本文标题为:关于在IOS平台下使用ARFoundation+UnityWebRequest无响应的解决方法
基础教程推荐
- iOS Crash常规跟踪方法及Bugly集成运用详细介绍 2023-01-18
- Android实现短信验证码输入框 2023-04-29
- Android开发Compose集成高德地图实例 2023-06-15
- Flutter进阶之实现动画效果(三) 2022-10-28
- MVVMLight项目Model View结构及全局视图模型注入器 2023-05-07
- iOS开发使用XML解析网络数据 2022-11-12
- Android Compose自定义TextField实现自定义的输入框 2023-05-13
- iOS开发 全机型适配解决方法 2023-01-14
- IOS获取系统相册中照片的示例代码 2023-01-03
- iOS中如何判断当前网络环境是2G/3G/4G/5G/WiFi 2023-06-18