.NET8 MAUI iOS端使用AppCenter出现请求超时错误的解决咨询
我在.NET 8 MAUI应用中使用AppCenter,iOS平台运行时频繁出现AppCenter请求超时错误,错误日志如下:
2024-05-24 10:08:25.085720+0100 LanguageInUse[10807:123861] Task
<44699F05-B2FF-4151-B525-5430CEC98ED4>.<1> HTTP load failed, 0/0 bytes
(error code: -1001 [1:60])2024-05-24 10:08:25.097346+0100
LanguageInUse[10807:123861] Task
<44699F05-B2FF-4151-B525-5430CEC98ED4>.<1> finished with error [-1001]
Error Domain=NSURLErrorDomain Code=-1001 "The request timed out."
UserInfo={_kCFStreamErrorCodeKey=60, NSUnderlyingError=0x6000004a7b40
{Error Domain=kCFErrorDomainCFNetwork Code=-1001 "(null)"
UserInfo={_NSURLErrorNWPathKey=satisfied (Path is satisfied),
interface: en1[802.11], uses wifi, _kCFStreamErrorCodeKey=60,
_kCFStreamErrorDomainKey=1}}, _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask<44699F05-B2FF-4151-B525-5430CEC98ED4>.<1>,
_NSURLErrorRelatedURLSessionTaskErrorKey=(
"LocalDataTask <44699F05-B2FF-4151-B525-5430CEC98ED4>.<1>" ), NSLocalizedDescription=The request timed out.,
NSErrorFailingURLStringKey=https://in.appcenter.ms/logs?api-version=1.0.0,
NSErrorFailingURLKey=https://in.appcenter.ms/logs?api-version=1.0.0,
_kCFStreamErrorDomainKey=1}2024-05-24 10:08:25.110523+0100 LanguageInUse[10807:124203] [AppCenter] ERROR: -[MSACHttpClient
requestCompletedWithHttpCall:data:response:error:]/151 HTTP request
error with code: -1001, domain: NSURLErrorDomain, description: The
request timed out. 2024-05-24 10:08:25.110897+0100
LanguageInUse[10807:124203] [AppCenter] ERROR:
-[MSACChannelUnitDefault sendLogContainer:]_block_invoke/233 Log(s) sent with failure, batch Id:E48FF504-C463-43F6-951F-7F1BA3D6F0E0,
status code:0
已知AppCenter将于明年停用,但目前不想更换该服务,请问是否有修复该错误的方案,还是必须移除AppCenter?
修复方案
无需立即移除AppCenter,可尝试以下几种方法缓解超时问题:
延长请求超时时间
AppCenter iOS SDK默认超时较短,可在初始化时自定义超时配置。在MauiProgram.cs或iOS项目的AppDelegate.cs中添加:using Microsoft.AppCenter; using Microsoft.AppCenter.Http; // 初始化AppCenter时配置超时 AppCenter.Configure("你的AppSecret", new HttpConfiguration { Timeout = TimeSpan.FromSeconds(30) // 按需调整,比如30秒 });切换AppCenter服务节点
日志显示请求的是印度节点in.appcenter.ms,如果用户群体不在该区域,可切换到全局节点:AppCenter.SetServerUrl("https://api.appcenter.ms");优化日志发送策略
调整批量发送的日志数量和间隔,降低单次请求压力:using Microsoft.AppCenter.Analytics; Analytics.SetMaxBatchSize(50); // 减少单批日志数量 Analytics.SetBatchInterval(TimeSpan.FromMinutes(1)); // 延长发送间隔自定义超时重试逻辑
监听AppCenter错误事件,针对超时错误实现重试:AppCenter.Error += (sender, e) => { if (e.Exception != null && e.Exception.Message.Contains("timeout")) { // 这里可添加延迟重试逻辑,比如使用Task.Delay后重新触发日志发送 } };
另外,也可以检查iOS应用的网络权限配置,确保应用已获得蜂窝网络和WiFi的访问权限,同时测试不同网络环境下的请求情况,排除网络本身的问题。
内容的提问来源于stack exchange,提问作者Enrico

