Jaki jest najlepszy sposób sprawdzenia połączenia internetowego za pomocą zestawu SDK iOS?Sprawdź połączenie internetowe za pomocą iOS SDK
Odpowiedz
Najlepszym sposobem jest użycie kodu zasięgu. Sprawdź here for apple sample code. Że ma wiele wygodnych sposobów, aby sprawdzić dostępność internetu, internet/WAN łączności czek etc ..
Dla np: -
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkChanged:) name:kReachabilityChangedNotification object:nil];
reachability = [Reachability reachabilityForInternetConnection];
[reachability startNotifier];
- (void)networkChanged:(NSNotification *)notification
{
NetworkStatus remoteHostStatus = [reachability currentReachabilityStatus];
if(remoteHostStatus == NotReachable) { NSLog(@"not reachable");}
else if (remoteHostStatus == ReachableViaWiFiNetwork) { NSLog(@"wifi"); }
else if (remoteHostStatus == ReachableViaCarrierDataNetwork) { NSLog(@"carrier"); }
}
Spróbuj kod:
- (BOOL)connectedToInternet
{
NSURL *url=[NSURL URLWithString:@"http://www.google.com"];
NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"HEAD"];
NSHTTPURLResponse *response;
[NSURLConnection sendSynchronousRequest:request returningResponse:&response error: NULL];
return ([response statusCode]==200)?YES:NO;
}
osiągalności ma wiele bardziej do niego niż potrzebuje, a także nie został jeszcze zaktualizowany dla ARC.
Oto moje rozwiązanie w czystym C. Duża część kodu została pobrana bezpośrednio z Reachability, ale oddestylowana do poziomu tylko tego, co jest konieczne. Chciałem tylko, aby zwrócił, czy było połączenie internetowe, czy nie, ale możesz przeczytać z komentarzy, czy powraca TAK w oparciu o założenie sieci Wi-Fi lub sieci komórkowej.
Jedna ostatnia uwaga przed przystąpieniem do udostępnienia kodu: Musisz przejść do celu budowy, wybrać zakładkę fazy budowania i dodać "SystemConfiguration.framework" do listy "Link Binary z bibliotekami".
#import <CoreFoundation/CoreFoundation.h>
#import <SystemConfiguration/SystemConfiguration.h>
#import <netdb.h>
BOOL networkReachable()
{
struct sockaddr_in zeroAddress;
bzero(&zeroAddress, sizeof(zeroAddress));
zeroAddress.sin_len = sizeof(zeroAddress);
zeroAddress.sin_family = AF_INET;
SCNetworkReachabilityRef reachabilityRef = SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault, (const struct sockaddr *) &zeroAddress);
SCNetworkReachabilityFlags flags;
if (SCNetworkReachabilityGetFlags(reachabilityRef, &flags)) {
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; // This is a wifi connection.
}
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; // This is a wifi connection.
}
}
if ((flags & kSCNetworkReachabilityFlagsIsWWAN) == kSCNetworkReachabilityFlagsIsWWAN) {
// ... but WWAN connections are OK if the calling application
// is using the CFNetwork (CFSocketStream?) APIs.
return YES; // This is a cellular connection.
}
}
return NO;
}
Bardzo lubię twoje rozwiązanie, ale osobiście zrobię małą modyfikację. Myślę, że zamiast zwracać BOOL, powinieneś zwrócić stały lub ENUM element, abyśmy mogli określić, czy istnieje połączenie i jakiego typu. Na szczęście ta modyfikacja nie jest trudna do zrobienia! –
Wierzę, że popełniłem tu błąd i że ten kod przecieka. SCNetworkReachabilityRef musi zostać wysłany do CFRelease() w pewnym momencie ... najlepszym sposobem na zrobienie tego może być wyrwanie SCNetworkReachabilityGetFlags() i zapisanie jego wartości, a następnie zwolnienie ref dostępności, następnie przejście do if i sprawdzenie zapisana wartość. W ten sposób pamięć zajmowana przez SCNetworkReachability przechowywana na stercie zostaje zwolniona, ale wszystko, czego potrzebujesz w tym momencie (flagi i wartość zwracana przez SCNetworkReachabilityGetFlags()) są nadal dostępne na stosie. – ArtOfWarfare
- 1. Sprawdź INTENT połączenie internetowe
- 2. sprawdź połączenie internetowe z phonegap
- 3. Czy można wykryć połączenie LTE za pomocą zestawu SDK iOS?
- 4. sprawdź, czy połączenie internetowe jest dostępne z C#
- 5. Sprawdź wolne połączenie z Internetem iOS
- 6. Sprawdź, czy aktywne połączenie z Internetem za pomocą Applescript/Automator
- 7. prosty sposób publikowania na ścianie za pomocą ios SDK 3.1
- 8. Integracja pakietu Facebook iOS SDK z komentarzami za pomocą Connect
- 9. Jak zapisać token dostępu LinkedIn za pomocą zestawu SDK iOS?
- 10. Bezpośrednie połączenie internetowe w Androidzie Wear?
- 11. Jak okresowo sprawdzać połączenie internetowe w Phonegap?
- 12. Jak ustalić, czy połączenie internetowe jest dostępne?
- 13. Wczytywanie URLSessionTask dużo wolniejsze niż połączenie internetowe
- 14. Jak określić połączenie internetowe w kakao?
- 15. Sprawdź połączenie sieciowe android
- 16. Sprawdź przepełnienie za pomocą Z3
- 17. Sprawdź podpis aplikacji iOS
- 18. MongoDB: sprawdź połączenie z DB
- 19. iPhone SDK: kontroluj strony internetowe w UIWebView programowo
- 20. Błąd otrzymany podczas aktualizowania zestawu SDK za pomocą Menedżera SDK
- 21. Jak uzyskać adres e-mail użytkownika za pomocą pakietu Facebook SDK 3.1 w systemie iOS?
- 22. Jak zintegrować gniazda internetowe za pomocą django wsgi
- 23. Jak wdrożyć archiwum internetowe geoserver za pomocą apache tomcat 8?
- 24. Połączenie Kerberos za pomocą klienta HTTP
- 25. Uwierzytelnianie za pomocą Facebooka C# SDK
- 26. Dystrybucja wewnętrzna - ios sdk
- 27. iOS 4 Build SDK
- 28. Standardowe kolekcje SDK iOS
- 29. Połączenie SSL iOS w Swift
- 30. Jak utworzyć identyfikator GUID/UUID za pomocą iPhone'a SDK
Skąd wiadomo, kto poniósł szkodę? Przy okazji .. +1 za odpowiedź :) – TonyMkenu
'ReachableViaCarrierDataNetwork' &' ReachableViaWiFiNetwork 'nie są dostępne, status może być' ReachableViaWWAN' lub 'ReachableViaWiFi'. – Hemang
po wyświetleniu tylko powiadomienia, ale trzeba przed zmianą sieci. jak zdobyć dostępną sieć, gdy wywoływana jest metoda viewdidload. – Bala