Wie überprüfen Sie, ob eine aktive Internet-Verbindung auf Ihrem iOS-oder macOS?
Ich würde gerne überprüfen, um zu sehen, ob ich eine Internetverbindung haben, auf iOS mit dem Cocoa Touch Bibliotheken oder auf macOS mit dem Kakao Bibliotheken.
Ich kam mit einem Weg, dies zu tun mit einem NSURL
. Die Art, wie ich es Tat, es scheint ein wenig unzuverlässig, weil auch Google könnte eines Tages down sein und sich auf eine Dritte Partei scheint schlecht), und während ich überprüfen könnte, um zu sehen, für eine Antwort von einigen anderen websites, wenn Google nicht reagiert, scheint es verschwenderisch und ein unnötiger overhead auf meine Bewerbung.
- (BOOL) connectedToInternet
{
NSString *URLString = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://www.google.com"]];
return ( URLString != NULL ) ? YES : NO;
}
Ist, was habe ich schlecht gemacht, (nicht zu erwähnen stringWithContentsOfURL
ist veraltet in iOS 3.0 und macOS 10.4) und wenn ja, was ist ein besserer Weg, dies zu erreichen?
return (BOOL)URLString;
oder noch besser return !!URLString
oder return URLString != nil
Ich weiß nicht, was Ihre Nutzung Fall ist, aber wenn Sie es vorziehen, um zu versuchen, die Anforderung und handle etwaige Fehler wie z.B. eine fehlende Verbindung, die entstehen. Wenn Sie dies nicht tun, dann gibt es viele gute Ratschläge hier in diesem Fall.
Deine Lösung ist clever, und ich es lieber. Sie können auch
NSString *URLString = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"https://twitter.com/getibox"] encoding:NSUTF8StringEncoding error:nil];
Um loszuwerden, das lästige Warnung.versuchen Sie es mit der Erreichbarkeit-Klasse aus dem untenstehenden link, es wird für Sie arbeiten github.com/tonymillion/Reachability
Für diejenigen, die vor kurzem, finden Sie diese Antwort: stackoverflow.com/a/8813279
InformationsquelleAutor Brock Woolf | 2009-07-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wichtig: Diese Prüfung sollte immer asynchron durchgeführt werden. Die Mehrheit der Antworten synchron sind, so vorsichtig sein, sonst wirst du frieren Sie Ihren app.
Swift
1) Installieren Sie über CocoaPods oder Karthago: https://github.com/ashleymills/Reachability.swift
2) Test-Erreichbarkeit per Verschlüsse
Objective-C
1.)
SystemConfiguration
Rahmen, um das Projekt, aber keine Sorge auch, es überall2) Fügen Sie Tony Mio ' s version von
Reachability.h
undReachability.m
zum Projekt (zu finden hier: https://github.com/tonymillion/Reachability)3) Update der interface-Abschnitt
4), Dann implementieren Sie diese Methode in den .m-Datei Ihres view-Controllers die Sie anrufen können,
Wichtiger Hinweis: Die
Reachability
- Klasse ist eine der am meisten verwendeten Klassen in Projekte, so dass Sie vielleicht in Namenskonflikte mit anderen Projekten. Wenn dies geschieht, müssen Sie benennen Sie eines der Paare vonReachability.h
undReachability.m
- Dateien auf etwas anderes um das Problem zu beheben.Hinweis: die domain, Die Sie verwenden, spielt keine Rolle. Es ist nur die Prüfung für einen gateway-zu jeder Domäne.
Es ist nur ein Beispiel, mit welchem domain, die Sie wollen. Es wird einfach geprüft, für die ein gateway zum internet, nicht, dass die domain tatsächlich verfügbar ist.
Oh, btw müssen Sie
SystemConfiguration.framework
zum Projekt (für die Methode 1).Verwenden http://www.appleiphonecell.com statt google.com - diese url wurde von apple aus genau diesem Grund.
Nutzen http://www.appleiphonecell.com ist jetzt (2018) eine schlechte Wahl. Jetzt leitet, um Apple.com das ist ein > 40kB html-Datei. Zurück zu google.com - es ist nur 11kB. BTW google.com/m ist die gleiche Größe, aber es wird berichtet, langsamer und 120 msec.
InformationsquelleAutor iwasrobbed
Ich mag Dinge einfach zu halten. Die Art und Weise ich das Tue, ist:
Dann verwende ich diese Wann immer ich will, um zu sehen, wenn ich eine Verbindung:
Diese Methode wartet nicht auf geänderte Netzwerk-Status, um um Dinge zu tun. Es nur tests, die den status, wenn Ihr Sie bittet.
WARUM sind Sie wieder != NotReachable statt "return Netzwerkstatus -;" ???
Für diejenigen, die einfach nur kopieren und einfügen, wie ich mit dem obigen code. Fügen Sie auch SystemConfiguration.Rahmen manuell oder erhalten Sie verknüpfen Fehler.
Erreichbarkeit undefined???
Kommen immer als erreichbar, wenn ich eine Verbindung mit WiFi. WiFi bedeutet nicht, dass es mit internet-Verbindung. Ich will überprüfen, internet-Verbindung, auch wenn es WiFi-Konnektivität. Können Sie mir bitte helfen?
InformationsquelleAutor cannyboy
Mithilfe der Apple-Erreichbarkeit-code, habe ich eine Funktion, die werde überprüfen Sie diese richtig, ohne zu zählen alle Klassen.
Gehören die Systemkonfiguration.framework in Ihr Projekt.
Einige Importe:
Nun einfach diese Funktion aufrufen:
Und es ist iOS 5 für Sie getestet.
Funktioniert gut auf iOS3.0 zu, thx
Dies nicht, führen Sie den internet-check asynchron, das ist, warum es ist "viel schlanker"... sollte Man immer tun, werden diese asynchron abonnieren Sie Benachrichtigungen so dass Sie don ' T hang up, die app auf diesen Prozess.
Danke, das funktioniert sogar, wenn Sie mit wifi adsl und adsl nicht verbunden sind, ist genau das was ich brauche.
Diese Lecks Speicher - die 'Lesbarkeit' - Struktur (Objekt, Ding) muss freigegeben werden, die mit CFRelease().
InformationsquelleAutor Andrew Zimmer
Diese verwendet werden, um die richtige Antwort, aber es ist jetzt veraltet, da solltest du abonnieren, um Benachrichtigungen für die Erreichbarkeit statt. Diese Methode prüft synchron:
Können Sie den Apple-Erreichbarkeit-Klasse. Es wird auch ermöglichen es Ihnen zu überprüfen, ob Wi-Fi aktiviert ist:
Die Erreichbarkeit Klasse ist nicht im Lieferumfang des SDK, sondern ein Teil von das Apple-Beispiel-Anwendung. Einfach herunterladen, und kopieren Sie die Erreichbarkeit.h/m zu Ihrem Projekt. Auch, Sie hinzufügen müssen, um das SystemConfiguration-framework zu Ihrem Projekt.
Dieser code ist ein guter Ausgangspunkt für Dinge, die Sie brauchen, bevor Sie können, verwenden Sie die delegate-Methoden für die Erreichbarkeits-Klasse.
InformationsquelleAutor Daniel Rinser
Hier eine sehr einfache Antwort:
Die URL sollte auf eine sehr kleinen website. Ich benutze Google mobile-website hier, aber wenn ich einen zuverlässigen web-server würd ich hochladen eine kleine Datei mit nur einem Charakter in ihm für maximale Geschwindigkeit.
Wenn Sie überprüfen, ob das Gerät irgendwie mit dem Internet verbunden ist, alles, was Sie tun wollen, ich würde definitiv empfehlen, diese einfache Lösung. Wenn Sie brauchen, um zu wissen, wie der Benutzer verbunden ist, mit der Erreichbarkeit ist der Weg zu gehen.
Achtung: Dies wird kurz sperren thread beim laden der website. In meinem Fall war dies kein problem, jedoch sollten Sie diese (credits, um Brad für den Hinweis).
Genial-Lösung @Erik. Was ich auch empfehlen Sie zu verwenden http://www.google.com statt http://www.google.com/m als rwyland sagte. Es ist seltsam, aber von meinem test der mobilen version dauert immer etwa 120ms mehr als die http://www.google.com
Apple docs empfehlen dies nicht zu tun, da es den thread blockiert, auf das Netzwerk langsam ist, kann dazu führen, app beendet werden, in iOS
Vielen Dank für das positive feedback, Stimmen zu, dass http://www.google.com/m ist die beste Lösung, wegen der Zuverlässigkeit!
LOL, ich bin sicher, dass Google Ihnen dankbar, dass Sie Vorschläge zu Personen, die Sie als eine Internet-check-Ressource.
InformationsquelleAutor Erik
Hier ist, wie ich es in meine apps: Während ein 200 status-code der Antwort keine Garantie für nichts, es ist stabil genug für mich. Dies erfordert nicht so viel laden, wie die NSData Antworten hier gepostet, wie mir gerade überprüft, der KOPF Antwort.
Swift-Code
Objective-C-Code
Vorsicht: meiner Erfahrung nach, diese Lösung funktioniert nicht, die ganze Zeit. In vielen Fällen wird die Antwort zurückgegeben, 403, nachdem er seine süße Zeit. Diese Lösung schien perfekt zu sein, aber keine Garantie für 100% Ergebnisse.
"Kein google , kein internet" ??
Juni 2014, wird dies scheitern in Festland China, aufgrund der chinesischen Regierung nun eine vollständige Sperrung der google.com. (google.cn funktioniert, jedoch aber in Festland-China, keine baidu.com, kein internet) Wohl besser zu pingen, was server, den Sie brauchen, um eine Kommunikation mit.
Verwenden http://www.appleiphonecell.com statt - apple hat diese url für genau diesem Grund.
InformationsquelleAutor klcjr89
Liefert Apple Beispiel-code zu prüfen, verschiedene Arten von Netzwerk-Verfügbarkeit. Alternativ gibt es eine Beispiel in die iPhone Entwickler cookbook.
Hinweis: siehe @KHG ' s Kommentar auf diese Antwort Bezug auf die Nutzung von Apple-Erreichbarkeit-code.
Beachten Sie, dass die neue revision (09-08-09) von der Erreichbarkeit der sample code von Apple ist asynchron.
InformationsquelleAutor teabot
Könnten Sie
Reachability
durch (hier erhältlich).Nein, es ist async.
InformationsquelleAutor Aleksander Azizi
Apple stellt eine Beispiel-app, die tut genau dies:
Erreichbarkeit
Glücklicherweise ist die situation viel besser in 3.0, da das system wird eine login-Seite für die Benutzer hinter einer gesperrten WiFi, wo Sie haben, um den login zu verwenden..., die Sie verwenden, um zu überprüfen, für die Umleitung manuell (und Sie immer noch tun, wenn die Entwicklung 2.2.1 apps)
Ich würde nicht sagen, dass die Erreichbarkeit der app macht genau das, was gefragt ist. Aber es ist ein guter Ausgangspunkt für das hinzufügen der Art von Funktionalität, die gefragt ist,
InformationsquelleAutor
Nur die Erreichbarkeits-Klasse wurden aktualisiert. Sie können jetzt:
Ich Stimme mit bpapa. Es ist nicht eine gute Idee, mit synchronen code. Danke für die info, obwohl
InformationsquelleAutor Ben Groot
Einer version auf die Erreichbarkeit für iOS 5 ist darkseed/Erreichbarkeit.h. Es ist nicht von mir! =)
InformationsquelleAutor Alex
Gibt es eine schöne, BOGEN - und GCD-über die Modernisierung der Erreichbarkeit hier:
Erreichbarkeit
InformationsquelleAutor JK Laiho
Wenn Sie
AFNetworking
können Sie Ihre eigene implementation für die internet-Erreichbarkeit-status.Der beste Weg, um
AFNetworking
um eine Unterklasse derAFHTTPClient
Klasse und diese Klasse verwenden, um Ihre Netzwerk-verbindungen.Einer der Vorteile der Verwendung dieses Ansatzes ist, dass Sie verwenden können
blocks
um das gewünschte Verhalten festzulegen, wenn die Erreichbarkeits-status ändert. Angenommen, ich habe eine singleton-UnterklasseAFHTTPClient
(wie gesagt, auf die "Unterklassen Hinweise" auf AFNetworking docs) benanntBKHTTPClient
wäre, würde ich so etwas wie:Könnte man auch prüfen, ob Wi-Fi oder WLAN-verbindungen speziell mit der
AFNetworkReachabilityStatusReachableViaWWAN
undAFNetworkReachabilityStatusReachableViaWiFi
enums (mehr hier).InformationsquelleAutor Bruno Koga
Ich habe den code in diese Diskussion, und es scheint gut zu funktionieren (Lesen Sie die ganze thread!).
Ich habe es noch nicht getestet, abschließend mit jeder erdenklichen Art von Verbindung (wie ad-hoc Wi-Fi).
InformationsquelleAutor Felixyz
Sehr einfach.... Versuchen Sie diese Schritte:
Schritt 1: Fügen Sie die
SystemConfiguration
framework in Ihr Projekt.Schritt 2: Importieren Sie den folgenden code in Ihre
header
Datei.Schritt 3: Verwenden Sie die folgende Methode
Typ 1:
Typ 2:
Import-header :
#import "Reachability.h"
Schritt 4: Wie zu verwenden:
Typ 1 ist asynchron?
Ich will den Typ-2-Updates aus Ihrer Antwort. Ich habe die Erreichbarkeit Klassen, und ich versucht, zu überprüfen, die zur Bestätigung der Verbindung durch die Verwendung von über Ihre Antwort. es kommt immer erreichbar auch wenn ich die Verbindung mit WiFi, aber es muss nicht die internet-Verbindung. WiFi bedeutet nicht, dass es mit internet-Verbindung. Ich will überprüfen, internet-Verbindung, auch wenn es WiFi-Konnektivität. Können Sie mir bitte helfen?
InformationsquelleAutor svmrajesh
InformationsquelleAutor Mutawe
Oder verwenden Sie den Erreichbarkeit Klasse.
Gibt es zwei Möglichkeiten, um überprüfen Sie die Internet-Verfügbarkeit mit dem iPhone SDK:
1. Überprüfen Sie die Google-Seite geöffnet ist oder nicht.
2. Erreichbarkeit-Klasse
Weitere Informationen entnehmen Sie bitte Erreichbarkeit (Apple Developer).
Es gibt zwei Wege, um überprüfen Sie die internet-Vorhandensein im iPhone-SDK-1)Überprüfen Sie die Google-Seite geöffnet ist oder nicht.
-1 : Dies ist eine synchrone Methode, die zu einer Unterbrechung der Haupt-thread (die, die die app-Benutzeroberfläche geändert wird), während es versucht, eine Verbindung zu google.com. Wenn ein Benutzer auf eine sehr langsame Datenverbindung das Telefon wird zu handeln, wie der Prozess reagiert nicht mehr.
InformationsquelleAutor IOS Rocks
Verwenden http://huytd.github.io/datatify/. Es ist einfacher als das hinzufügen von Bibliotheken und schreiben Sie den code selbst.
InformationsquelleAutor Huy Tran
Ersten: Hinzufügen
CFNetwork.framework
im RahmenCode:
ViewController.m
InformationsquelleAutor Paresh Hirpara
Zuerst laden Sie die Erreichbarkeit Klasse und legte Erreichbarkeit.h und reachabilty.m-Datei in Ihrem Xcode.
Der beste Weg ist, um eine gemeinsame Funktionen der Klasse (NSObject), so dass Sie können es verwenden, für jede Klasse. Dies sind die zwei Methoden, die für eine Netzwerk-Verbindung die Erreichbarkeit überprüfen:
Nun können Sie überprüfen Netzwerk-Verbindung in jeder Klasse durch den Aufruf dieser Klassenmethode.
InformationsquelleAutor Latika Tiwari
Gibt es auch eine andere Methode um zu überprüfen, Internet-Verbindung mit dem iPhone SDK.
Versuchen zu implementieren, die den folgenden code für die Netzwerkverbindung.
InformationsquelleAutor iProgrammer
Ich fand es einfach und leicht zu bedienen-Bibliothek SimplePingHelper.
Beispielcode: chrishulbert/SimplePingHelper (GitHub)
InformationsquelleAutor Piyush Dubey
Laden Sie die Erreichbarkeit Datei, https://gist.github.com/darkseed/1182373
Und fügen Sie
CFNetwork.framework
und " SystemConfiguration.framework' - im RahmenDo #import " - Erreichbarkeit.h"
Ersten: Hinzufügen
CFNetwork.framework
im RahmenCode:
ViewController.m
InformationsquelleAutor Maulik Salvi
Den Erreichbarkeit Klasse ist OK um herauszufinden, ob die Internet-Verbindung verfügbar ist, um ein Gerät oder nicht...
Aber im Falle des Zugriffs auf ein intranet-Ressource:
Ping an den intranet-server mit der Erreichbarkeit der Klasse immer true zurück.
Also eine schnelle Lösung in diesem Szenario wäre die Erstellung einer web-Methode aufgerufen
pingme
zusammen mit anderen webmethods auf den service.Die
pingme
etwas zurückgeben sollte.Also schrieb ich die folgende Methode auf Allgemeine Funktionen
Der oben genannten Methode war so nützlich für mich, also immer wenn ich versuche zu senden, einen Teil der Daten auf dem server bin ich immer die Erreichbarkeit meiner intranet-Ressource mit Hilfe dieses niedrigen timeout URLRequest.
InformationsquelleAutor Durai Amuthan.H
Dies selbst zu tun, ist extrem einfach. Die folgende Methode funktioniert. Nur sicher sein, nicht zulassen, dass ein hostname Protokoll wie HTTP, HTTPS, etc. übergeben zu werden, mit den Namen.
Es ist schnell, einfach und schmerzlos.
InformationsquelleAutor Tony
Abgesehen von der Erreichbarkeit können Sie auch die Einfache Ping-helper-Bibliothek. Es funktioniert sehr schön und ist einfach zu integrieren.
InformationsquelleAutor user2538944
Ich denke, das ist die beste Antwort.
"Ja" bedeutet, verbunden. "Nein" bedeutet getrennt.
InformationsquelleAutor Mina Fawzy
Import
Reachable.h
Klasse in IhremViewController
, und verwenden Sie den folgenden code zu überprüfen, Konnektivität:InformationsquelleAutor Himanshu Mahajan
Schritt 3: Erstellen Sie die unter-Funktion
Schritt 4: Rufen Sie die Funktion wie folgt:
InformationsquelleAutor Anny
Überprüfen der Internet-Verbindung Verfügbarkeit (iOS) mit Xcode 8 , Swift 3.0
Bitte überprüfen Sie Haupt-Antwort-Rubrik.
InformationsquelleAutor ViJay Avhad