Kes*_*lme 0 nsurlrequest reachability ios nsurlsession nsurlsessionconfiguration
在我的应用程序中,我只想在可以访问互联网的情况下拨打网络电话。
注意:我连接到没有互联网的 WiFi 点
我想测试互联网是否可用。我尝试使用这里描述的可达性,我也尝试了一个更简单的解决方案,如这里描述
问题在于 Reachability 会返回 Internet 可达的信息,而当它不可达时。另一种解决方案需要太多时间才能做出响应。我试图为请求和会话设置超时间隔,但它被忽略了。
如果我连接到没有互联网的 wifi,如何测试互联网可达性?
这是我使用的一些代码:
- (void) postAsyncTaskWithUrl:(NSString*)urlString
andType:(NSString*)requestType
andToken:(NSString*)token
andPropertiesObject:(id)propObject
urlEncoded:(BOOL)isUrlEncoded
withSuccess:(nullable void(^)(id _Nullable))success
andFailure:(nullable void(^)(id _Nullable))failure
{
internetReachableFoo = [Reachability reachabilityWithHostname:@"www.google.com"];
__weak typeof(self) weakSelf = self;
// Internet is reachable
internetReachableFoo.reachableBlock = ^(Reachability*reach)
{
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:urlSt];
[request setTimeoutInterval:20]; //Ignored ... WHY?
NSURLSessionConfiguration *sessionConfigurations = [NSURLSessionConfiguration defaultSessionConfiguration];
[sessionConfigurations setTimeoutIntervalForRequest:20]; //Ignored ... WHY?
[sessionConfigurations setTimeoutIntervalForResource:20]; //Ignored ... WHY?
// NSURLSession *session = [NSURLSession sharedSession];
NSURLSession *session = [NSURLSession sessionWithConfiguration:sessionConfigurations];
[[session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
}
}
}
Run Code Online (Sandbox Code Playgroud)
尽管这是过去在历史上做过的事情,但我不认为值得尝试检查网络是否可访问,因为它不是可靠的事情,或者在几乎所有情况下发出请求之前都应该做的事情现在的情况。
根据苹果官方文档:
始终尝试建立连接。不要试图猜测网络服务是否可用,也不要缓存该决定
Jared Sinclair 关于这个主题的类似博客文章,使用SCNetworkReachability(这是 Reachability 库在幕后使用的):
SCNetworkReachability 应仅用于影响您对已失败的网络请求执行的操作,而不是尚未尝试的初始请求。使用否定状态来确定您是否尝试自动重试,或调整警报的面向用户的语言。使用肯定状态来考虑重试较早失败的请求。永远不要仅仅因为 SCNetworkReachability 认为没有可访问的网络而阻止尝试用户发起的请求
可达性是 iOS 世界中的一个或“这些主题”。互联网可达是什么意思?即使您检查网络接口,您也可能无法访问 apple.com 或 google.com。即使您访问 Google,您也可能无法访问您的本地服务器或云。如果您检查是否可以访问您感兴趣的服务器,为什么不立即发送请求?
| 归档时间: |
|
| 查看次数: |
394 次 |
| 最近记录: |