iOS ReachabilityはWifiで問題を検出
2281 ワード
アップルが公式に提供したReachabilityをテストしたところ、次のように使用されていました.
Reachability* reach=[ReachabilityreachabilityWithHostName:url];
現在wifi状態に接続するとreachになる.CurrentReachabilityStatusは常にReachableViaWiFiであり、urlリンクがアクセス可能なドメイン名であるかどうかにかかわらず、これはアップルがこの関数を書く際のメカニズムによるものであり、WIFI状態ではHostNameに接続できるかどうかにかかわらずReachableViaWiFiに戻るため、この関数を使用してpingが通じるかどうかを識別することはできないことが分かった.もちろん、aftnetworkingなど、この機能を実現するために多くの他のライブラリがありますが、筆者はここで最も簡単なオリジナルpingパステスト方法を共有します.
pingHostを呼び出す:pingパステストを完了することができます.以上は簡単なPing方法です.間違いがあれば、iOSに触れたばかりで、お互いに交流することを歓迎します.
Reachability* reach=[ReachabilityreachabilityWithHostName:url];
現在wifi状態に接続するとreachになる.CurrentReachabilityStatusは常にReachableViaWiFiであり、urlリンクがアクセス可能なドメイン名であるかどうかにかかわらず、これはアップルがこの関数を書く際のメカニズムによるものであり、WIFI状態ではHostNameに接続できるかどうかにかかわらずReachableViaWiFiに戻るため、この関数を使用してpingが通じるかどうかを識別することはできないことが分かった.もちろん、aftnetworkingなど、この機能を実現するために多くの他のライブラリがありますが、筆者はここで最も簡単なオリジナルpingパステスト方法を共有します.
-(void)pingHost:(NSString*)url{
//
NSURL*urlString = [NSURLURLWithString:url];
//
NSURLRequest*urlRequest = [NSURLRequestrequestWithURL:urlStringcachePolicy:NSURLRequestReloadIgnoringLocalCacheDatatimeoutInterval:1];
//
NSURLSession*urlSession = [NSURLSessionsharedSession];
//
NSURLSessionDataTask*urlSessionDataTask = [urlSessiondataTaskWithRequest:urlRequest
completionHandler:^(NSData*_Nullabledata,
NSURLResponse*_Nullableresponse,
NSError*_Nullableerror) {
//
if(error ==nil&& data !=nil) {
dispatch_async(dispatch_get_main_queue(), ^{
[selfcheckNetwork:YES];
});
}
else{
dispatch_async(dispatch_get_main_queue(), ^{
[selfcheckNetwork:NO];
});
}
}];
//
[urlSessionDataTaskresume];
}
-(void)checkNetwork:(BOOL)ping{
Reachability* reach=[ReachabilityreachabilityWithHostName:urlInTxf];
//[reach startNotifier];
switch(reach.currentReachabilityStatus) {
caseNotReachable:
if(!ping)
[selfshowAlert:@" "];
else
[selfshowAlert:@" : ping "];
break;
caseReachableViaWiFi:
if(!ping)
[selfshowAlert:@" wifi, host"];
else
[selfshowAlert:@" wifi, host"];
caseReachableViaWWAN:
if(!ping)
[selfshowAlert:@" wwan, host"];
else
[selfshowAlert:@" wwan, host"];
default:
break;
}
}
-(void)showAlert:(NSString*) msg{
UIAlertController* alertCtl=[UIAlertControlleralertControllerWithTitle:@"alert"message:msgpreferredStyle:UIAlertControllerStyleAlert];
UIAlertAction* alertAction=[UIAlertActionactionWithTitle:@" "style:UIAlertActionStyleDefaulthandler:^(UIAlertAction*_Nonnullaction) {
}];
[alertCtladdAction:alertAction];
[selfpresentViewController:alertCtlanimated:YEScompletion:nil];
}
pingHostを呼び出す:pingパステストを完了することができます.以上は簡単なPing方法です.間違いがあれば、iOSに触れたばかりで、お互いに交流することを歓迎します.