Ray*_*ang 4 iphone networking reachability ipad ios
我有一个允许用户自动登录的应用程序.我的老板想要的是,当应用程序启动时,应用程序需要测试与我们服务器的连接(而不仅仅是测试是否有WiFi或3G网络).我借用了苹果的Reachability样本,它有效.
问题是需要太长时间,特别是在发布时.我在没有互联网连接的本地无线网络上尝试过,我花了将近半分钟的时间.因为自动登录在-ViewDidLoad()中调用了半分钟,所以ui没有加载.花费很长时间的时间是完全不可接受的.更糟糕的是,如果我的应用程序加载时间太长,iOS甚至可能会关闭应用程序.
此外,我的应用程序中有很多Web服务调用.我理解每个网络服务电话都有可能失败,因为即使用户从一个地方走到另一个地方,iPhone/iPad也可能很容易丢失或获得连接.我个人不喜欢它,但这就是我的老板要我做的事情,我可能不得不经常在应用程序中测试连接.
所以我在这里寻找的是一种非常快速(几秒钟内)检测连接的方法,或者是在幕后进行连接而不影响用户体验的方法.
有人有建议吗?
感谢您抽出宝贵时间阅读我的问题.
presentModalViewController在测试进行时呈现中间加载视图并使用执行实际测试performSelectorInBackground.然后用以下信号发回主线程performSelectorOnMainThread:
- (void)viewDidLoad
{
[super viewDidLoad];
// Make this a hidden member
loadingViewController = [LoadingViewController new];
[self presentModalViewController:loadingViewController animated:NO];
[self performSelectorInBackground:@selector(testConnectivity) withObject:nil];
}
- (void)testConnectivity
{
// Do expensive testing stuff
[self performSelectorOnMainThread:@selector(testCompleted) withObject:nil waitUntilDone:NO];
}
- (void)testCompleted
{
[loadingViewController dismissViewControllerAnimated:YES];
loadingViewController = nil;
}
Run Code Online (Sandbox Code Playgroud)
请注意,在您使用应用程序时,等待30秒使应用程序开始变得糟糕,并且连接经常发生变化的整体用户体验,因此即使您在每次启动时都进行测试,也不太可靠.但如果这是你的老板想要的,我会和你一起受苦.;)
对于它的价值,这是我使用的方法..
- (BOOL)checkServerAvailability {
bool success = false;
const char *host_name = [@"host" cStringUsingEncoding:NSASCIIStringEncoding];
SCNetworkReachabilityRef reachability =
SCNetworkReachabilityCreateWithName(NULL, host_name);
SCNetworkReachabilityFlags flags;
success = SCNetworkReachabilityGetFlags(reachability, &flags);
bool isAvailable = success && (flags & kSCNetworkFlagsReachable)
&& !(flags & kSCNetworkFlagsConnectionRequired);
CFRelease(reachability);
return isAvailable;
}
Run Code Online (Sandbox Code Playgroud)
这是我的服务器检查方法的记录结果......
2012-07-11 11:29:04.892 ASURecycles[1509:f803] starting server check...
2012-07-11 11:29:04.894 ASURecycles[1509:f803] creating reachability...
2012-07-11 11:29:04.894 ASURecycles[1509:f803] creating flags...
2012-07-11 11:29:04.913 ASURecycles[1509:f803] checking for success of reachability, assigning to flags..
2012-07-11 11:29:04.913 ASURecycles[1509:f803] checking our flags to determine network status...
2012-07-11 11:29:04.913 ASURecycles[1509:f803] not available
Run Code Online (Sandbox Code Playgroud)
如你所见,一秒钟.当然我们的服务器目前正在遇到麻烦,但我认为你的问题可能是服务器问题,而不是框架问题.您总是可以尝试在另一个线程上执行服务器检查.
| 归档时间: |
|
| 查看次数: |
4807 次 |
| 最近记录: |