İOS və ya MacOS-da aktiv internet bağlantısını necə idarə etmək olar?

Cocoa Touch kitabxanalarından və ya MacCo-da Cocoa kitabxanalarından istifadə edərək iOS-də İnternet bağlantısı olub olmadığını yoxlamaq istərdim.

NSURL ilə bunu etmək üçün bir yol düşündüm. Mən bunu bir az etibarsız hesab edirəm (hətta Google bir gün inoperable ola bilər və bir üçüncü şirkətə güvənmək pisdir) və mən digər saytlardan cavab olub-olmadığını yoxlaya bilsəm də, Google cavab verməsə, Mənim müraciətim üçün sərfəli və lazımsız yerüstü kimi görünür.

 - (BOOL) connectedToInternet { NSString *URLString = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://www.google.com"]]; return ( URLString != NULL ) ? YES : NO; } 

Bu, pis əməllərimdir ( stringWithContentsOfURL haqqında iOS 3.0 və macOS 10.4- stringWithContentsOfURL köhnəlmiş stringWithContentsOfURL ) və əgər varsa, necə yaxşıdır?

1264
05 июля '09 в 11:45 2009-07-05 11:45 Brock Woolf , 05 iyul '09 saat 11:45 'da 2009-07-05 11:45 ' a sorulur
@ 40 cavab
  • 1
  • 2

Vacib : bu çek həmişə asynchronously həyata keçirilməlidir. Aşağıdakı cavabların əksəriyyəti sinxrondur, buna görə diqqətli olun, aksi hallarda tətbiqinizi dondurursunuz.


sürətlə

1) CocoaPods və ya Kartof vasitəsilə qurun: https://github.com/ashleymills/Reachability.swift

2) Bağlana bilən çatışmazlıq testi

 let reachability = Reachability()! reachability.whenReachable = { reachability in if reachability.connection == .wifi { print("Reachable via WiFi") } else { print("Reachable via Cellular") } } reachability.whenUnreachable = { _ in print("Not reachable") } do { try reachability.startNotifier() } catch { print("Unable to start notifier") } 

Məqsəd c

1) Layihəyə SystemConfiguration çərçivəsi əlavə edin, ancaq bununla əlaqədar narahat olmayın

2) Tony Milyon üçün Reachability.hReachability.m bir versiyasını əlavə edin (bax: https://github.com/tonymillion/Reachability ).

3) interface bölməsini yeniləyin

 #import "Reachability.h" // Add this to the interface in the .m file of your view controller @interface MyViewController () { Reachability *internetReachableFoo; } @end 

4) Sonra bu metodu daxil edə bilərsiniz ki, görünüşü nəzarətçi fayl.m

 // Checks if we have an internet connection or not - (void)testInternetConnection { internetReachableFoo = [Reachability reachabilityWithHostname:@"www.google.com"]; // Internet is reachable internetReachableFoo.reachableBlock = ^(Reachability*reach) { // Update the UI on the main thread dispatch_async(dispatch_get_main_queue(), ^{ NSLog(@"Yayyy, we have the interwebs!"); }); }; // Internet is not reachable internetReachableFoo.unreachableBlock = ^(Reachability*reach) { // Update the UI on the main thread dispatch_async(dispatch_get_main_queue(), ^{ NSLog(@"Someone broke the internet :("); }); }; [internetReachableFoo startNotifier]; } 

Önemli not: Reachability sınıfı, projelerdeki en sık kullanılan sınıflardan biridir, bu Reachability diğer projelerle ad çakışmalarına rast gəlinir. Bu olarsa, Reachability.hReachability.m cütlərindən birini bu problemi həll etmək üçün başqa bir şeyə dəyişmək lazımdır.

Qeyd: Siz istifadə etdiyiniz domain əhəmiyyətli deyil. Bu yalnız hər hansı bir domen üçün bir ağ geçidi üçün test edir.

1241
30 авг. Cavab 30 avqustda iwasrobbed verilir . 2010-08-30 02:58 '10 at 2:58 2010-08-30 02:58

Mən şeyi sadə saxlamaq istəyirəm. Mən bunu necə edirəm:

 //Class.h #import "Reachability.h" #import <SystemConfiguration/SystemConfiguration.h> - (BOOL)connected; //Class.m - (BOOL)connected { Reachability *reachability = [Reachability reachabilityForInternetConnection]; NetworkStatus networkStatus = [reachability currentReachabilityStatus]; return networkStatus != NotReachable; } 

Sonra mən bir əlaqəm olub-olmadığını görmək istəyəndə onu istifadə edirəm:

border=0
 if (![self connected]) { // Not connected } else { // Connected. Do some Internet stuff } 

Bu üsul, şəbəkə statusu dəyişikliklərinin bir şey etməsini gözləmir. Ona soruşduğunuzda vəziyyətini yoxlayır.

304
26 авг. Cannyboy tərəfindən verilmiş cavab 26 Avqust 2011-08-26 16:34 '11 at 4:34 pm 2011-08-26 16:34

Apple Reachability kodunu istifadə edərək, hər hansı bir sinif daxil etmədən, bunu düzgün bir şəkildə yoxlayacaq bir funksiya yaratdım.

Layihənizə SystemConfiguration.framework əlavə edin.

Bəzi idxal olun:

 #import <sys/socket.h> #import <netinet/in.h> #import <SystemConfiguration/SystemConfiguration.h> 

İndi yalnız bu funksiyanı zəng edin:

  +(BOOL)hasConnectivity { struct sockaddr_in zeroAddress; bzero( sizeof(zeroAddress)); zeroAddress.sin_len = sizeof(zeroAddress); zeroAddress.sin_family = AF_INET; SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault, (const struct sockaddr*) if (reachability != NULL) { //NetworkStatus retVal = NotReachable; SCNetworkReachabilityFlags flags; if (SCNetworkReachabilityGetFlags(reachability,  { if ((flags  kSCNetworkReachabilityFlagsReachable) == 0) { // If target host is not reachable return NO; } if ((flags  kSCNetworkReachabilityFlagsConnectionRequired) == 0) { // If target host is reachable and no connection is required // then we'll assume (for now) that your on Wi-Fi return YES; } if ((((flags  kSCNetworkReachabilityFlagsConnectionOnDemand ) != 0) || (flags  kSCNetworkReachabilityFlagsConnectionOnTraffic) != 0)) { // ... and the connection is on-demand (or on-traffic) if the // calling application is using the CFSocketStream or higher APIs. if ((flags  kSCNetworkReachabilityFlagsInterventionRequired) == 0) { // ... and no [user] intervention is needed return YES; } } if ((flags  kSCNetworkReachabilityFlagsIsWWAN) == kSCNetworkReachabilityFlagsIsWWAN) { // ... but WWAN connections are OK if the calling application // is using the CFNetwork (CFSocketStream?) APIs. return YES; } } } return NO; } 

Və bu iOS 5 sizin üçün doğrulandı.

144
28 окт. Cavab 28 oktyabrda Andrew Zimmerə verildi 2011-10-28 23:37 '11 11:37 pm 2011-10-28 23:37

Doğru cavab idi, lakin köhnəlmişdi, çünki əvəzinə nailiyyətiniz barədə xəbərdarlıqlara abunə olmaq lazımdır. Bu üsul sinxron şəkildə yoxlayır:


Siz Apple Reachability sınıfını istifadə edə bilərsiniz. Wi-Fi aktivləşdiyini yoxlamaq üçün də imkan verir:

 Reachability* reachability = [Reachability sharedReachability]; [reachability setHostName:@"www.example.com"]; // Set your host name here NetworkStatus remoteHostStatus = [reachability remoteHostStatus]; if (remoteHostStatus == NotReachable) { } else if (remoteHostStatus == ReachableViaWiFiNetwork) { } else if (remoteHostStatus == ReachableViaCarrierDataNetwork) { } 

Ulaşılabilirlik sinfi SDK ilə gəlmir, əksinə hissəsi Apple tətbiqinin nümunəsidir . Yalnız onu yükləyin və Reachability.h / m kopyalayın layihə. Ayrıca, SystemConfiguration altyapısını projenize əlavə etməlisiniz.

118
05 июля '09 в 13:58 2009-07-05 13:58 Cavab Daniel Rinser tərəfindən verilib. 05 iyul '09 13:58 2009-07-05 13:58

Burada çox sadə bir cavab:

 NSURL *scriptUrl = [NSURL URLWithString:@"http://www.google.com/m"]; NSData *data = [NSData dataWithContentsOfURL:scriptUrl]; if (data) NSLog(@"Device is connected to the Internet"); else NSLog(@"Device is not connected to the Internet"); 

URL çox kiçik bir web saytına istinad etməlidir. Burada Google mobil saytını istifadə edirəm, amma etibarlı bir web server olsaydım, maksimum sürət üçün bir xarakterli kiçik bir fayl yükləyərdim.

Cihazın Internetə necə bir şəkildə bağlı olduğunu yoxlayırsan, bunu etmək istədiyiniz bütün şeylərdir, mən bu sadə həlli istifadə etməyi məsləhət görürəm. Bir istifadəçinin necə əlaqəli olduğunu bilmək istəsəniz, Reachability xüsusiyyətinin istifadəsi yoludur.

Diqqət: veb səhifəni yükləyərkən bu qısa müddətdə axını blok edəcək. Mənim vəziyyətimdə bu bir problem deyil, amma bunu nəzərə almalıyıq (Bradin kreditləri bunu göstərir).

79
15 мая '12 в 1:25 2012-05-15 01:25 may ayının 15-də saat 12: 00-da Erik Wegenerə cavab verərək, 2012-05-15 01:25

Mənim ərizələrimdə bunu necə edirəm: vəziyyətin cavab kodu 200 heç bir şeyə zəmanət vermir, baxmayaraq ki, mənim üçün sabitdir. Bu, buraya yerləşdirilən NSData cavabları kimi bir yükləməni tələb etmir, çünki mina yalnız HEAD cavabını yoxlayır.

Swift kodu

 func checkInternet(flag:Bool, completionHandler:(internet:Bool) -> Void) { UIApplication.sharedApplication().networkActivityIndicatorVisible = true let url = NSURL(string: "http://www.appleiphonecell.com/") let request = NSMutableURLRequest(URL: url!) request.HTTPMethod = "HEAD" request.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringLocalAndRemoteCacheData request.timeoutInterval = 10.0 NSURLConnection.sendAsynchronousRequest(request, queue:NSOperationQueue.mainQueue(), completionHandler: {(response: NSURLResponse!, data: NSData!, error: NSError!) -> Void in UIApplication.sharedApplication().networkActivityIndicatorVisible = false let rsp = response as! NSHTTPURLResponse? completionHandler(internet:rsp?.statusCode == 200) }) } func yourMethod() { self.checkInternet(false, completionHandler: {(internet:Bool) -> Void in if (internet) { // "Internet" aka Apple region universal URL reachable } else { // No "Internet" aka Apple region universal URL un-reachable } }) } 

Objective-C Kodu

 typedef void(^connection)(BOOL); - (void)checkInternet:(connection)block { NSURL *url = [NSURL URLWithString:@"http://www.appleiphonecell.com/"]; NSMutableURLRequest *headRequest = [NSMutableURLRequest requestWithURL:url]; headRequest.HTTPMethod = @"HEAD"; NSURLSessionConfiguration *defaultConfigObject = [NSURLSessionConfiguration ephemeralSessionConfiguration]; defaultConfigObject.timeoutIntervalForResource = 10.0; defaultConfigObject.requestCachePolicy = NSURLRequestReloadIgnoringLocalAndRemoteCacheData; NSURLSession *defaultSession = [NSURLSession sessionWithConfiguration:defaultConfigObject delegate:self delegateQueue: [NSOperationQueue mainQueue]]; NSURLSessionDataTask *dataTask = [defaultSession dataTaskWithRequest:headRequest completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { if (!error  response) { block([(NSHTTPURLResponse *)response statusCode] == 200); } }]; [dataTask resume]; } - (void)yourMethod { [self checkInternet:^(BOOL internet) { if (internet) { // "Internet" aka Apple region universal URL reachable } else { // No "Internet" aka Apple region universal URL un-reachable } }]; } 
71
30 нояб. Cavab noyabrın 30-da klcjr89 verilir 2012-11-30 06:26 '12 saat 06:26 'da 2012-11-30 06:26

Apple müxtəlif şəbəkələrin növlərini yoxlamaq üçün nümunə kodu verir. Bundan əlavə, bir iPhone geliştirici kitab var.

Qeyd . Apple Erişilebilirlik Kodunun istifadəsi ilə bağlı @KHG şərhinə diqqət yetirin.

55
05 июля '09 в 11:59 2009-07-05 11:59 Cavabına cavab 05 iyul '09 saat 11:59 'da 2009-07-05 11:59

Siz  ( mövcuddur ) istifadə edərək, Reachability istifadə edə bilərsiniz.

 #import "Reachability.h" - (BOOL)networkConnection { return [[Reachability reachabilityWithHostName:@"www.google.com"] currentReachabilityStatus]; } if ([self networkConnection] == NotReachable) {  } else {  } //Use ReachableViaWiFi / ReachableViaWWAN to get the type of connection. 
45
25 апр. Apr 25-də Aleksander Azizi tərəfindən verilmiş cavab 2012-04-25 15:20 '12 at 15:20 2012-04-25 15:20

Apple tam olaraq tətbiq edən bir tətbiq nümunəsi təqdim edir:

Reachability

39
05 июля '09 в 11:58 2009-07-05 11:58 cavab 05 iyul 2009 - cu il tarixində saat 11: 58-da verilmişdir

Yalnızca Ulaşılabilirlik sinfi yeniləndi. İndi istifadə edə bilərsiniz:

 Reachability* reachability = [Reachability reachabilityWithHostName:@"www.apple.com"]; NetworkStatus remoteHostStatus = [reachability currentReachabilityStatus]; if (remoteHostStatus == NotReachable) { NSLog(@"not reachable");} else if (remoteHostStatus == ReachableViaWWAN) { NSLog(@"reachable via wwan");} else if (remoteHostStatus == ReachableViaWiFi) { NSLog(@"reachable via wifi");} 
32
27 авг. Ben Groot tərəfindən verilmiş cavab Aug 27 2010-08-27 12:41 '10 at 12:41 2010-08-27 12:41

İOS 5 forması / Reachability.h üçün Reachability versiyası. Bu mənim deyil! =)

27
07 нояб. Cavab verilir 07 noyabr. 2011-11-07 23:17 '11 at 11:17 pm 2011-11-07 23:17

Gözəl, ARC və GCD-lə yenilənmiş Ulaşılabilirlik var:

Reachability

25
10 апр. Apr 10-da JK Laiho tərəfindən verilmiş cavab 2012-04-10 10:12 '12 saat 10:12 'da 2012-04-10 10:12

AFNetworking istifadə AFNetworking , internet əlçatanlıq statusu üçün öz tətbiqini istifadə edə bilərsiniz.

AFNetworking istifadə etmək üçün ən yaxşı yolu, AFHTTPClient sinifini alt sinif etmək və şəbəkə əlaqələri üçün bu sinfi istifadə etməkdir.

Bu yanaşmanın istifadəsinin üstünlüklərindən biri, əlçatmazlıq vəziyyətinin dəyişdiyi zaman istənilən davranışı müəyyən etmək üçün blocks istifadə edə bilərsiniz. Mən AFHTTPClient bir singleton alt sinfi AFHTTPClient ( BKHTTPClient adlı BKHTTPClient şəbəkə Sənədlərində "Subclass Qeydlər" də qeyd edildiyi kimi), bir şey etmək istərdim:

 BKHTTPClient *httpClient = [BKHTTPClient sharedClient]; [httpClient setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { if (status == AFNetworkReachabilityStatusNotReachable) { // Not reachable } else { // Reachable } }]; 

Ayrıca, AFNetworkReachabilityStatusReachableViaWWANAFNetworkReachabilityStatusReachableViaWiFi ( burada ) ilə Wi-Fi və ya WLAN əlaqələrini AFNetworkReachabilityStatusReachableViaWWAN bilərsiniz .

22
30 мая '13 в 4:18 2013-05-30 04:18 Cavab Bruno Koga tərəfindən mayın 30-da saat 4: 18-də verilir. 2013-05-30 04:18

Bu mübahisədə kodu istifadə etdim və gözəl işləyirəm (bütün mövzunu oxuyun!).

Mən mümkün olan bütün əlaqələrin (məsələn, ad hoc Wi-Fi) növləri ilə tamamilə yoxlamadım.

18
05 июля '09 в 12:10 2009-07-05 12:10 Cavab 05 iyul 2009- cu il saat 12:10 Fəlsəfə tərəfindən verilmişdir 2009-07-05 12:10

Çox sadə ... Aşağıdakıları cəhd edin:

Addım 1: SystemConfiguration quruluşunu SystemConfiguration əlavə edin.


Addım 2: Aşağıdakı kodu header dosyanıza verin.

 #import <SystemConfiguration/SystemConfiguration.h> 

Addım 3: Aşağıdakı üsuldan istifadə edin

  • Tip 1:

     - (BOOL) currentNetworkStatus { [UIApplication sharedApplication].networkActivityIndicatorVisible = NO; BOOL connected; BOOL isConnected; const char *host = "www.apple.com"; SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithName(NULL, host); SCNetworkReachabilityFlags flags; connected = SCNetworkReachabilityGetFlags(reachability,  isConnected = NO; isConnected = connected  (flags  kSCNetworkFlagsReachable)  !(flags  kSCNetworkFlagsConnectionRequired); CFRelease(reachability); return isConnected; } 

  • Tip 2:

    idxal başlığı : #import "Reachability.h"

     - (BOOL)currentNetworkStatus { Reachability *reachability = [Reachability reachabilityForInternetConnection]; NetworkStatus networkStatus = [reachability currentReachabilityStatus]; return networkStatus != NotReachable; } 

Adım 4: Nasıl istifadə olunur:

 - (void)CheckInternet { BOOL network = [self currentNetworkStatus]; if (network) { NSLog(@"Network Available"); } else { NSLog(@"No Network Available"); } } 
14
15 апр. Cavab svmrajesh tərəfindən verilir 15 Apr 2014-04-15 15:42 '14 də 15:42 2014-04-15 15:42
 -(void)newtworkType { NSArray *subviews = [[[[UIApplication sharedApplication] valueForKey:@"statusBar"] valueForKey:@"foregroundView"]subviews]; NSNumber *dataNetworkItemView = nil; for (id subview in subviews) { if([subview isKindOfClass:[NSClassFromString(@"UIStatusBarDataNetworkItemView") class]]) { dataNetworkItemView = subview; break; } } switch ([[dataNetworkItemView valueForKey:@"dataNetworkType"]integerValue]) { case 0: NSLog(@"No wifi or cellular"); break; case 1: NSLog(@"2G"); break; case 2: NSLog(@"3G"); break; case 3: NSLog(@"4G"); break; case 4: NSLog(@"LTE"); break; case 5: NSLog(@"Wifi"); break; default: break; } } 
12
03 июня '13 в 14:43 2013-06-03 14:43 Cavab Mutawe tərəfindən 03 İyun 2013 tarixində 14:43 2013-06-03 14:43
 - (void)viewWillAppear:(BOOL)animated { NSString *URL = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://www.google.com"]]; return (URL != NULL ) ? YES : NO; } 

Və ya Reachability sınıfını istifadə edin.

IPhone SDK istifadə edərək internetin mövcudluğunu yoxlamaq üçün iki yol var:

1. Google səhifəsinin açıq olub olmadığını yoxlayın.

2. Sınıfı çatdırın

Daha ətraflı məlumat üçün baxın ( Əlçatımlılıq ).

11
22 нояб. Cavab noyabrın 22-də IOS Rocks tərəfindən verilir . 2012-11-22 14:46 '12 at 2:46 2012-11-22 14:46

Birincisi : CFNetwork.framework əlavə edin

Kodu : ViewController.m

 #import "Reachability.h" - (void)viewWillAppear:(BOOL)animated { Reachability *r = [Reachability reachabilityWithHostName:@"www.google.com"]; NetworkStatus internetStatus = [r currentReachabilityStatus]; if ((internetStatus != ReachableViaWiFi)  (internetStatus != ReachableViaWWAN)) { /// Create an alert if connection doesn't work UIAlertView *myAlert = [[UIAlertView alloc]initWithTitle:@"No Internet Connection" message:NSLocalizedString(@"InternetMessage", nil)delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil]; [myAlert show]; [myAlert release]; } else { NSLog(@"INTERNET IS CONNECT"); } } 
10
05 апр. Cavab Paresh Hirpara tərəfindən verilib 05 Aprel. 2014-04-05 14:16 '14 'da 14:16' də 2014-04-05 14:16

Http://huytd.github.io/datatify/ saytından istifadə edin . Kitabxanalar əlavə etmək və özünüzü yazma kodundan daha asandır.

10
31 авг. 31 avqust Huy Tran tərəfindən verilmiş cavab . 2013-08-31 20:13 '13 saat 20:13 'də 2013-08-31 20:13

Bunu etmək çox sadədir. Aşağıdakı üsul çalışacaq. Yalnız HTTP, HTTPS və s. Kimi hostname protokolunu köçürməyi unutmayın. Adı ilə.

 -(BOOL)hasInternetConnection:(NSString*)urlAddress { SCNetworkReachabilityRef ref = SCNetworkReachabilityCreateWithName(kCFAllocatorDefault, [urlAddress UTF8String]); SCNetworkReachabilityFlags flags; if (!SCNetworkReachabilityGetFlags(ref,  { return NO; } return flags  kSCNetworkReachabilityFlagsReachable; } 

Tez və ağrısızdır.

8
04 дек. Cavab Tony 04 dekabr verilir. 2013-12-04 21:17 '13 at 9:17 pm 2013-12-04 21:17

Əvvəldən çatışmazlıq sinifini yükləyin və faylın accessibility.h və Xcode-də accessabilty.m- lər .

Ən yaxşı yol, hər hansı bir sinifdə istifadə edə biləcək bir ümumi funksiya sinifi (NSObject) yaratmaqdır. Bunlar şəbəkə mövcudluğunu yoxlamaq üçün iki üsuldur:

 +(BOOL) reachabiltyCheck { NSLog(@"reachabiltyCheck"); BOOL status =YES; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:kReachabilityChangedNotification object:nil]; Reachability * reach = [Reachability reachabilityForInternetConnection]; NSLog(@"status : %d",[reach currentReachabilityStatus]); if([reach currentReachabilityStatus]==0) { status = NO; NSLog(@"network not connected"); } reach.reachableBlock = ^(Reachability * reachability) { dispatch_async(dispatch_get_main_queue(), ^{ }); }; reach.unreachableBlock = ^(Reachability * reachability) { dispatch_async(dispatch_get_main_queue(), ^{ }); }; [reach startNotifier]; return status; } +(BOOL)reachabilityChanged:(NSNotification*)note { BOOL status =YES; NSLog(@"reachabilityChanged"); Reachability * reach = [note object]; NetworkStatus netStatus = [reach currentReachabilityStatus]; switch (netStatus) { case NotReachable: { status = NO; NSLog(@"Not Reachable"); } break; default: { if (!isSyncingReportPulseFlag) { status = YES; isSyncingReportPulseFlag = TRUE; [DatabaseHandler checkForFailedReportStatusAndReSync]; } } break; } return status; } + (BOOL) connectedToNetwork { // Create zero addy struct sockaddr_in zeroAddress; bzero( sizeof(zeroAddress)); zeroAddress.sin_len = sizeof(zeroAddress); zeroAddress.sin_family = AF_INET; // Recover reachability flags SCNetworkReachabilityRef defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *) SCNetworkReachabilityFlags flags; BOOL didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability,  CFRelease(defaultRouteReachability); if (!didRetrieveFlags) { NSLog(@"Error. Could not recover network reachability flags"); return NO; } BOOL isReachable = flags  kSCNetworkFlagsReachable; BOOL needsConnection = flags  kSCNetworkFlagsConnectionRequired; BOOL nonWiFi = flags  kSCNetworkReachabilityFlagsTransientConnection; NSURL *testURL = [NSURL URLWithString:@"http://www.apple.com/"]; NSURLRequest *testRequest = [NSURLRequest requestWithURL:testURL cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:20.0]; NSURLConnection *testConnection = [[NSURLConnection alloc] initWithRequest:testRequest delegate:self]; return ((isReachable  !needsConnection) || nonWiFi) ? (testConnection ? YES : NO) : NO; } 

İndi bu sinif metoduna zəng edərək hər hansı bir sinifdə şəbəkə bağlantısını yoxlaya bilərsiniz.

8
07 июня '13 в 16:53 2013-06-07 16:53 Cavab Latika Tiwari tərəfindən 07 İyun 2013 tarixində 4:53 2013-06-07 16:53 tarixində verilir

SimplePingHelper kitabını sadə və asan istifadə etdim .

Örnek Kod: chrishulbert / SimplePingHelper ( GitHub )

8
07 янв. Piyuş Dubey tərəfindən verilmiş cavab 07 Jan 2014-01-07 12:04 '14 at 12:04 2014-01-07 12:04


Birincisi : CFNetwork.framework əlavə edin

Kodu : ViewController.m

 - (void)viewWillAppear:(BOOL)animated { Reachability *r = [Reachability reachabilityWithHostName:@"www.google.com"]; NetworkStatus internetStatus = [r currentReachabilityStatus]; if ((internetStatus != ReachableViaWiFi)  (internetStatus != ReachableViaWWAN)) { /// Create an alert if connection doesn't work UIAlertView *myAlert = [[UIAlertView alloc]initWithTitle:@"No Internet Connection" message:NSLocalizedString(@"InternetMessage", nil)delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil]; [myAlert show]; [myAlert release]; } else { NSLog(@"INTERNET IS CONNECT"); } } 
8
27 нояб. Cavab 27 noyabrda Maulik Salvi tərəfindən verilir . 2014-11-27 10:29 '14 da 10:29 2014-11-27 10:29

IPhone SDK'sından istifadə edərək İnternet bağlantınızı yoxlamaq üçün başqa bir yol var.

Şəbəkə bağlantısı üçün aşağıdakı kodu tətbiq edin.

 #import <SystemConfiguration/SystemConfiguration.h> #include <netdb.h>  + (BOOL) connectedToNetwork { // Create zero addy struct sockaddr_in zeroAddress; bzero( sizeof(zeroAddress)); zeroAddress.sin_len = sizeof(zeroAddress); zeroAddress.sin_family = AF_INET; // Recover reachability flags SCNetworkReachabilityRef defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *) SCNetworkReachabilityFlags flags; BOOL didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability,  CFRelease(defaultRouteReachability); if (!didRetrieveFlags) { printf("Error. Could not recover network reachability flags\n"); return NO; } BOOL isReachable = ((flags  kSCNetworkFlagsReachable) != 0); BOOL needsConnection = ((flags  kSCNetworkFlagsConnectionRequired) != 0); return (isReachable  !needsConnection) ? YES : NO; } 
8
09 нояб. Cavab 09 oktyabr 2013-cü il tarixində iProgrammer tərəfindən verilmişdir. 2013-11-09 12:58 '13 at 12:58 2013-11-09 12:58

Ulaşılabilirlik sinfi cihazın internet bağlantısının mövcud olub olmadığını görmək üçün gözəldir.

Ancaq intranet resursuna daxil olmaq vəziyyətində:

Accessibility sinifinə malik bir intranet pinqinq server həmişə doğrudur.

Buna görə, tez bir həll digər web xidmət üsulları ilə birlikdə pingme adlı bir web metodu yaratmaq olardı. pingme bir şeyə dönməsi lazımdır.

Beləliklə, ümumi funksiyalar üçün aşağıdakı metodu yazdım.

 -(BOOL)PingServiceServer { NSURL *url=[NSURL URLWithString:@"http://www.serveraddress/service.asmx/Ping"]; NSMutableURLRequest *urlReq=[NSMutableURLRequest requestWithURL:url]; [urlReq setTimeoutInterval:10]; NSURLResponse *response; NSError *error = nil; NSData *receivedData = [NSURLConnection sendSynchronousRequest:urlReq returningResponse: error: NSLog(@"receivedData:%@",receivedData); if (receivedData !=nil) { return YES; } else { NSLog(@"Data is null"); return NO; } } 

Bu üsul mənim üçün çox faydalı idi, buna görə də serverə bəzi məlumatlar göndərməyə çalışanda, mən həmişə bu minimal URL URL'sini istifadə edərək intranet resursumun mövcudluğunu yoxlayıram.

7
10 июля '13 в 15:42 2013-07-10 15:42 Cavab Durai Amuthan.H tərəfindən verilir. 10 iyul '13 saat 15:42 2013-07-10 15:42

Əlçatanlığa əlavə olaraq, Simple Ping köməkçi kitabxanasından da istifadə edə bilərsiniz. Çox yaxşı işləyir və asanlıqla birləşdirir.

7
21 февр. Cavab verilir İstifadəçi2538944 21 fevral. 2014-02-21 14:44 '14 14:44 2014-02-21 14:44

Hesab edirəm ki, bu ən yaxşı cavabdır.

"Bəli" bir əlaqə deməkdir. "Xeyr" "əlil" deməkdir.

 #import "Reachability.h" - (BOOL)canAccessInternet { Reachability *IsReachable = [Reachability reachabilityForInternetConnection]; NetworkStatus internetStats = [IsReachable currentReachabilityStatus]; if (internetStats == NotReachable) { return NO; } else { return YES; } } 
7
01 окт. Mina Fawzy tərəfindən verilmiş cavab oktyabr 01 2014-10-01 13:49 '14 saat 13:49 2014-10-01 13:49
  • Addım 1: Layihə üçün bir Reachability sınıfını əlavə edin.
  • Addım 2. Qaytarma sinifini idxal edin
  • Addım 3. Aşağıdakı funksiyanı yaradın.

     - (BOOL)checkNetConnection { self.internetReachability = [Reachability reachabilityForInternetConnection]; [self.internetReachability startNotifier]; NetworkStatus netStatus = [self.internetReachability currentReachabilityStatus]; switch (netStatus) { case NotReachable: { return NO; } case ReachableViaWWAN: { return YES; } case ReachableViaWiFi: { return YES; } } } 
  • Addım 4: Funksiyanı aşağıdakı kimi göstərin:

     if (![self checkNetConnection]) { [GlobalFunctions showAlert:@"" message:@"Please connect to the Internet!" canBtntitle:nil otherBtnTitle:@"Ok"]; return; } else { Log.v("internet is connected","ok"); } 
6
19 авг. Anny 19 aug tərəfindən verilmiş cavab . 2015-08-19 09:37 '15 saat 09:37 'da, 2015-08-19 09:37

Xcode 8, Swift 3.0 (iOS) bir İnternet bağlantısı mövcudluğu yoxlanılması

Bu, şəbəkənin mövcudluğunu yoxlamaq üçün asan bir yoldur, çünki cihazımız bir şəbəkəyə qoşulur və ya olmasa da. Mən onu Swift 3.0-a çevirə bildim, və burada - son kod. Mövcud Apple Reachability sinfi və digər üçüncü tərəf kitabxanaları Swift-ə tərcümə etmək üçün çox mürəkkəb görünürdü.

Bu 3G, 4G və Wi-Fi əlaqələri üçün də işləyir.

Layihə qurucusuna "SystemConfiguration.framework" əlavə etməyi unutmayın.

 //Create new swift class file Reachability in your project. import SystemConfiguration public class InternetReachability { class func isConnectedToNetwork() -> Bool { var zeroAddress = sockaddr_in(sin_len: 0, sin_family: 0, sin_port: 0, sin_addr: in_addr(s_addr: 0), sin_zero: (0, 0, 0, 0, 0, 0, 0, 0)) zeroAddress.sin_len = UInt8(sizeofValue(zeroAddress)) zeroAddress.sin_family = sa_family_t(AF_INET) let defaultRouteReachability = withUnsafePointer( { SCNetworkReachabilityCreateWithAddress(nil, UnsafePointer($0)).takeRetainedValue() } var flags: SCNetworkReachabilityFlags = 0 if SCNetworkReachabilityGetFlags(defaultRouteReachability,  == 0 { return false } let isReachable = (flags  UInt32(kSCNetworkFlagsReachable)) != 0 let needsConnection = (flags  UInt32(kSCNetworkFlagsConnectionRequired)) != 0 return isReachable  !needsConnection } } // Check network connectivity from anywhere in project by using this code. if InternetReachability.isConnectedToNetwork() == true { print("Internet connection OK") } else { print("Internet connection FAILED") } 
6
ответ дан ViJay Avhad 17 дек. '15 в 15:14 2015-12-17 15:14

Импортируйте класс Reachable.h в ViewController и используйте следующий код для проверки подключения :

  #define hasInternetConnection [[Reachability reachabilityForInternetConnection] isReachable] if (hasInternetConnection){ // To-do block } 
6
ответ дан Himanshu Mahajan 18 окт. '13 в 9:19 2013-10-18 09:19
  • 1
  • 2

Другие вопросы по меткам или Задайте вопрос