iOS ReachabilityはWifiで問題を検出

2281 ワード

アップルが公式に提供したReachabilityをテストしたところ、次のように使用されていました.
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に触れたばかりで、お互いに交流することを歓迎します.