我知道这个问题似乎是许多其他问题的愚蠢,但是,我觉得这个简单的案例并没有得到很好的解释.来自Android和BlackBerry背景,HTTPUrlConnection如果没有可用连接,立即发出请求失败.这似乎是完全理智的行为,我很惊讶地发现NSURLConnection在iOS中没有效仿它.
我知道Apple(以及其他扩展它的人)提供了一个Reachability帮助确定网络状态的类.我很高兴第一次看到这一点并完全期望看到类似的内容bool isNetworkAvailable(),但令我惊讶的是,我发现了一个复杂的系统,需要通知注册和回调,以及一堆看似不必要的细节.肯定有更好的办法.
我的应用程序已经优雅地处理连接失败,包括没有连接.用户会收到失败通知,然后应用程序继续运行.
因此我的要求很简单:我可以在所有HTTP请求之前调用单个同步函数来确定我是否应该打扰实际发送请求.理想情况下,它不需要设置,只返回一个布尔值.
这在iOS上真的不可能吗?
我使用下面的代码在服务器中发出HTTP请求.现在我想知道它是否连接到互联网.以下是我的代码
let request = Alamofire.request(completeURL(domainName: path), method: method, parameters: parameters, encoding: encoding.value, headers: headers)
.responseJSON {
let resstr = NSString(data: $0.data!, encoding: String.Encoding.utf8.rawValue)
print("error is \(resstr)")
if $0.result.isFailure {
self.failure("Network")
print("API FAILED 4")
return
}
guard let result = $0.result.value else {
self.unKnownError()
self.failure("")
print("API FAILED 3")
return
}
self.handleSuccess(JSON(result))
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试在我的项目中使用可达性.我添加了Reachability.h和Reachability.m文件.但在构建项目之后,xCode显示了奇怪的错误:
Undefined symbols for architecture i386:
"_SCNetworkReachabilityCreateWithName", referenced from:
+[Reachability reachabilityWithHostname:] in Reachability.o
"_SCNetworkReachabilityCreateWithAddress", referenced from:
+[Reachability reachabilityWithAddress:] in Reachability.o
"_SCNetworkReachabilitySetCallback", referenced from:
-[Reachability startNotifier] in Reachability.o
-[Reachability stopNotifier] in Reachability.o
"_SCError", referenced from:
-[Reachability startNotifier] in Reachability.o
"_SCErrorString", referenced from:
-[Reachability startNotifier] in Reachability.o
"_SCNetworkReachabilitySetDispatchQueue", referenced from:
-[Reachability startNotifier] in Reachability.o
-[Reachability stopNotifier] in Reachability.o
"_SCNetworkReachabilityGetFlags", referenced from:
-[Reachability isReachable] in Reachability.o
-[Reachability isReachableViaWWAN] in Reachability.o
-[Reachability isReachableViaWiFi] in Reachability.o
-[Reachability connectionRequired] in Reachability.o
-[Reachability isConnectionOnDemand] in Reachability.o
-[Reachability …Run Code Online (Sandbox Code Playgroud) 我想知道如何检查用户是通过WIFI还是蜂窝数据3G或4G连接到互联网.
此外,我不想检查网站是否可访问,我想检查设备上是否有互联网.我试图查看互联网所有我看到的是他们检查网站是否可以访问或不使用Rechability该类.
我想在打开我的应用程序时检查用户是否有互联网.
我正在使用带有Objective-C的Xcode6.
哪个是使用iOS SDK检查Internet连接的最佳方法?
我有一个完全基于网络的应用程序,需要互联网连接才能导航.基本上是通过UIWebView查看的网站.
我需要能够告诉用户如果没有互联网连接,则无法加载任何页面.有一种简单的方法可以做到这一点.也许检查NSURLRequest是否失败?
干杯
我有一个Unity项目,我为Android和iOS平台构建.我想检查桌面,Android和iOS设备上的互联网连接.我读过三个不同的解决方案:
Ping一些东西(例如谷歌) - 我完全不喜欢这样的决定,而且我已经读过关于Android的错误.
Application.internetReachability - 根据Unity的文档,此功能仅确定我具有连接到Internet的可能性(它不保证真正的连接).
Network.TestConnection() - 如果我没有Internet连接,我的应用程序将失败.所以这也不正确.
如何确定我是否在Unity内部具有互联网连接?
在Mac OS X上,当网络接口(en0,en1)状态发生变化时,有没有办法获得异步通知,例如网络接口处于活动状态,非活动状态等?
而不是轮询状态,我想知道有没有办法获得异步通知,以便每当有更改,通知被触发,应用程序可以处理它.
这可能吗?
谢谢,
我使用html在我的iPhone应用程序中使用Skype集成.当我加载页面时,它将显示用户是在线还是离线.当我按ONLINE按钮时,我的应用程序将关闭,Skype将打开.但是,当我按下OFFLINE按钮时,它会发生与上面相同的事情.我使用以下代码在webview中设计skype按钮,以显示用户和skype呼叫的Skype在线状态.
<a href="skype:arafa_futbal?call">
<img src="http://mystatus.skype.com/smallclassic/arafa_futbal" style="border: none;"
width="114" height="20" alt="My status" />
</a>
Run Code Online (Sandbox Code Playgroud)
我的问题是如何在用户离线时禁用webview?
即,如果我按离线按钮,它不应该做任何事情..
我在严格识别iPhone的网络访问类型方面遇到了很多麻烦.我在StackOverflow上看过很多像这样的问题,但没有一个对我有帮助.例如,我已经看到过:如何检查iOS或OSX上的活动Internet连接?
但我想确切地知道以下3个案例何时发生:
Wifi 和 3G被禁用
启用了Wifi 或 3G,但没有互联网连接.这可能是由于3G没有真正起作用,即使它出现在状态栏上,或者WiFi是一个热点,要求在让您访问互联网或最后一个场景之前登录:WiFi源是本地网络但是不提供任何Internet连接.
一切正常
当然我尝试过各种各样的东西,例如:
// Allocate a reachability object
Reachability* reach = [Reachability reachabilityWithHostname:@"www.google.com"];
// Set the blocks
reach.reachableBlock = ^(Reachability*reach)
{
/* NOT REACHABLE */
dispatch_async(dispatch_get_main_queue(), ^{
iarcSBInternetWarning.visible = NO;
});
};
reach.unreachableBlock = ^(Reachability*reach)
{
/* REACHABLE */
iarcSBInternetWarning.visible = YES;
};
// Start the notifier, which will cause the reachability object to retain itself
[reach startNotifier];
Run Code Online (Sandbox Code Playgroud)
但这似乎只是说Wifi或3G是启用的,并没有检查可能的互联网限制.对于帮助我确定三种情景的任何答案,我都会非常高兴.
当然,从返回特定字节序列的个人服务器API分析直接HTTP请求输出可以工作,但这不是我想要做的.我更喜欢使用任何类型的Reachability API.
我使用过Apple的可访问性API,它似乎无法识别热点重定向.
如果使用Reachability API无法做到这一点,那么向服务器发出简单请求的最低资源消耗方法是什么,检查它是否在指定的超时之前是可达的,并且URL未被重定向到热点登录页面(可能只检查标题,而不是整个服务器字节序列输出)?每15秒运行一次这样的脚本是一个好主意,还是会使用过多的电池和/或网络数据?
ios ×7
objective-c ×7
reachability ×3
ipad ×2
iphone ×2
uiwebview ×2
alamofire ×1
android ×1
c ×1
c# ×1
c++ ×1
cocoa-touch ×1
connection ×1
html ×1
nsurlrequest ×1
skype ×1
swift ×1