Ich möchte überprüfen, ob ich unter iOS mit den Cocoa Touch- Bibliotheken oder unter macOS mit den Cocoa- Bibliotheken eine Internetverbindung habe .
Ich habe einen Weg gefunden, dies mit einem zu tun NSURL
. Die Art und Weise, wie ich es getan habe, scheint ein bisschen unzuverlässig zu sein (weil sogar Google eines Tages ausfallen und sich auf einen Dritten verlassen könnte, scheint schlecht zu sein), und während ich nach einer Antwort von einigen anderen Websites suchen konnte, wenn Google nicht antwortete, war dies der Fall scheint verschwenderisch und ein unnötiger Aufwand für meine Bewerbung.
- (BOOL) connectedToInternet
{
NSString *URLString = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://www.google.com"]];
return ( URLString != NULL ) ? YES : NO;
}
Ist das, was ich getan habe, schlecht (ganz zu schweigen davon, dass stringWithContentsOfURL
es in iOS 3.0 und macOS 10.4 veraltet ist) und wenn ja, wie kann ich dies besser erreichen?
quelle
return (BOOL)URLString;
oder noch besser,return !!URLString
oderreturn URLString != nil
NSString *URLString = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"https://twitter.com/getibox"] encoding:NSUTF8StringEncoding error:nil];
, um die lästige Warnung loszuwerden.Antworten:
Wichtig : Diese Prüfung sollte immer asynchron durchgeführt werden. Die meisten der folgenden Antworten sind synchron. Seien Sie also vorsichtig, sonst frieren Sie Ihre App ein.
Schnell
1) Installation über CocoaPods oder Karthago: https://github.com/ashleymills/Reachability.swift
2) Erreichbarkeit über Verschlüsse testen
Ziel c
1) Fügen Sie
SystemConfiguration
dem Projekt ein Framework hinzu, aber machen Sie sich keine Sorgen, dass Sie es irgendwo einfügen2) Fügen Sie die Version von Tony Million von
Reachability.h
undReachability.m
zum Projekt hinzu (hier zu finden: https://github.com/tonymillion/Reachability )3) Aktualisieren Sie den Schnittstellenabschnitt
4) Implementieren Sie diese Methode dann in die .m-Datei Ihres View Controllers, die Sie aufrufen können
Wichtiger Hinweis: Die
Reachability
Klasse ist eine der am häufigsten verwendeten Klassen in Projekten, sodass Sie möglicherweise auf Namenskonflikte mit anderen Projekten stoßen. In diesem Fall müssen Sie eines der PaareReachability.h
undReachability.m
Dateien in etwas anderes umbenennen , um das Problem zu beheben.Hinweis: Die von Ihnen verwendete Domain spielt keine Rolle. Es wird nur nach einem Gateway zu einer beliebigen Domain gesucht.
quelle
SystemConfiguration.framework
dem Projekt auch etwas hinzufügen (für Methode 1).Ich mag es, die Dinge einfach zu halten. Ich mache das so:
Dann benutze ich dies immer dann, wenn ich sehen möchte, ob ich eine Verbindung habe:
Diese Methode wartet nicht auf geänderte Netzwerkstatus, um Dinge zu erledigen. Es testet nur den Status, wenn Sie danach fragen.
quelle
Mit dem Erreichbarkeitscode von Apple habe ich eine Funktion erstellt, die dies korrekt überprüft, ohne dass Sie Klassen einschließen müssen.
Fügen Sie das SystemConfiguration.framework in Ihr Projekt ein.
Machen Sie einige Importe:
Rufen Sie jetzt einfach diese Funktion auf:
Und es ist iOS 5 für Sie getestet.
quelle
Früher war dies die richtige Antwort, aber jetzt ist sie veraltet, da Sie stattdessen Benachrichtigungen zur Erreichbarkeit abonnieren sollten. Diese Methode prüft synchron:
Sie können die Erreichbarkeitsklasse von Apple verwenden. Außerdem können Sie überprüfen, ob Wi-Fi aktiviert ist:
Die Erreichbarkeitsklasse wird nicht mit dem SDK geliefert, sondern ist Teil dieser Apple-Beispielanwendung . Laden Sie es einfach herunter und kopieren Sie Reachability.h / m in Ihr Projekt. Außerdem müssen Sie Ihrem Projekt das SystemConfiguration-Framework hinzufügen.
quelle
Hier ist eine sehr einfache Antwort:
Die URL sollte auf eine extrem kleine Website verweisen. Ich verwende hier die mobile Website von Google, aber wenn ich einen zuverlässigen Webserver hätte, würde ich eine kleine Datei mit nur einem Zeichen hochladen , um maximale Geschwindigkeit zu erzielen.
Wenn Sie nur prüfen möchten, ob das Gerät irgendwie mit dem Internet verbunden ist, würde ich auf jeden Fall die Verwendung dieser einfachen Lösung empfehlen. Wenn Sie wissen möchten, wie der Benutzer verbunden ist, ist die Verwendung der Erreichbarkeit der richtige Weg.
Achtung: Dadurch wird Ihr Thread kurz blockiert, während die Website geladen wird. In meinem Fall war dies kein Problem, aber Sie sollten dies berücksichtigen (Dank an Brad für den Hinweis).
quelle
So mache ich das in meinen Apps: Ein 200-Status-Antwortcode garantiert zwar nichts, ist aber für mich stabil genug. Dies erfordert nicht so viel Laden wie die hier veröffentlichten NSData-Antworten, da meine nur die HEAD-Antwort überprüft.
SWIFT-Code
Ziel-C-Code
quelle
Apple liefert Beispielcode , um nach verschiedenen Arten der Netzwerkverfügbarkeit zu suchen. Alternativ gibt es ein Beispiel im Kochbuch der iPhone-Entwickler.
Hinweis: Bitte beachten Sie den Kommentar von @ KHG zu dieser Antwort bezüglich der Verwendung des Erreichbarkeitscodes von Apple.
quelle
Sie können
Reachability
von verwenden ( hier verfügbar ).quelle
Apple bietet eine Beispiel-App, die genau dies tut:
Erreichbarkeit
quelle
Nur die Erreichbarkeitsklasse wurde aktualisiert. Sie können jetzt verwenden:
quelle
Eine Version von Reachability für iOS 5 ist darkseed / Reachability.h . Es ist nicht meins! =)
quelle
Hier gibt es eine gut aussehende, ARC- und GCD-verwendende Modernisierung der Erreichbarkeit:
Erreichbarkeit
quelle
Wenn Sie verwenden
AFNetworking
, können Sie eine eigene Implementierung für den Status der Internet-Erreichbarkeit verwenden.Am besten verwenden Sie
AFNetworking
dieAFHTTPClient
Klasse in Unterklassen und verwenden diese Klasse, um Ihre Netzwerkverbindungen herzustellen.Einer der Vorteile dieses Ansatzes besteht darin, dass Sie
blocks
das gewünschte Verhalten festlegen können, wenn sich der Erreichbarkeitsstatus ändert. Angenommen, ich habe eine Singleton-Unterklasse mit dem NamenAFHTTPClient
(wie in den "Unterklassennotizen" in AFNetworking-Dokumenten angegeben )) erstelltBKHTTPClient
, würde ich Folgendes tun:Sie können auch mithilfe von
AFNetworkReachabilityStatusReachableViaWWAN
undAFNetworkReachabilityStatusReachableViaWiFi
enums nach Wi-Fi- oder WLAN-Verbindungen suchen ( mehr hier ).quelle
Ich habe den Code in dieser Diskussion verwendet und er scheint gut zu funktionieren (lesen Sie den gesamten Thread!).
Ich habe es nicht mit jeder denkbaren Art von Verbindung (wie Ad-hoc-WLAN) ausführlich getestet.
quelle
Sehr einfach .... Versuchen Sie diese Schritte:
Schritt 1: Fügen Sie das
SystemConfiguration
Framework zu Ihrem Projekt hinzu.Schritt 2: Importieren Sie den folgenden Code in Ihre
header
Datei.Schritt 3: Verwenden Sie die folgende Methode
Typ 1:
Typ 2:
Header importieren :
#import "Reachability.h"
Schritt 4: Verwendung:
quelle
quelle
Oder verwenden Sie die Erreichbarkeitsklasse .
Es gibt zwei Möglichkeiten, die Internetverfügbarkeit mithilfe des iPhone SDK zu überprüfen:
1. Überprüfen Sie, ob die Google-Seite geöffnet ist oder nicht.
2. Erreichbarkeitsklasse
Weitere Informationen finden Sie unter Erreichbarkeit (Apple Developer).
quelle
Verwenden Sie http://huytd.github.io/datatify/ . Es ist einfacher als Bibliotheken hinzuzufügen und Code selbst zu schreiben.
quelle
Erstens :
CFNetwork.framework
Im Framework hinzufügenCode :
ViewController.m
quelle
Laden Sie zuerst die Erreichbarkeitsklasse herunter und fügen Sie die Dateienieldability.h und Reachabilty.m in Ihren Xcode ein .
Der beste Weg ist, eine gemeinsame Funktionsklasse (NSObject) zu erstellen, damit Sie sie für jede Klasse verwenden können. Dies sind zwei Methoden für eine Überprüfung der Erreichbarkeit der Netzwerkverbindung:
Jetzt können Sie die Netzwerkverbindung in jeder Klasse überprüfen, indem Sie diese Klassenmethode aufrufen.
quelle
Es gibt auch eine andere Methode, um die Internetverbindung mit dem iPhone SDK zu überprüfen.
Versuchen Sie, den folgenden Code für die Netzwerkverbindung zu implementieren.
quelle
Ich fand es einfach und leicht, die Bibliothek SimplePingHelper zu benutzen .
Beispielcode: chrishulbert / SimplePingHelper ( GitHub )
quelle
Laden Sie die Erreichbarkeitsdatei unter https://gist.github.com/darkseed/1182373 herunter
Und fügen Sie
CFNetwork.framework
und 'SystemConfiguration.framework' im Framework hinzuFühren Sie #import "Reachability.h" aus
Erstens :
CFNetwork.framework
Im Framework hinzufügenCode :
ViewController.m
quelle
Swift 3 / Swift 4
Sie müssen zuerst importieren
Sie können die Internetverbindung mit der folgenden Methode überprüfen
quelle
Die Erreichbarkeitsklasse ist in Ordnung, um herauszufinden, ob die Internetverbindung für ein Gerät verfügbar ist oder nicht ...
Aber beim Zugriff auf eine Intranet-Ressource :
Das Pingen des Intranetservers mit der Erreichbarkeitsklasse gibt immer true zurück.
Eine schnelle Lösung in diesem Szenario wäre daher, eine
pingme
Webmethode zu erstellen, die zusammen mit anderen Webmethoden im Dienst aufgerufen wird. Daspingme
sollte etwas zurückgeben.Also habe ich die folgende Methode über allgemeine Funktionen geschrieben
Die obige Methode war für mich sehr nützlich. Wenn ich versuche, Daten an den Server zu senden, überprüfe ich immer die Erreichbarkeit meiner Intranet-Ressource mithilfe dieser URLRequest mit geringem Zeitlimit.
quelle
Dies selbst zu tun ist extrem einfach. Die folgende Methode funktioniert. Stellen Sie nur sicher, dass ein Hostnamenprotokoll wie HTTP, HTTPS usw. nicht mit dem Namen übergeben wird.
Es ist schnell, einfach und schmerzlos.
quelle
Neben der Erreichbarkeit können Sie auch die Simple Ping-Hilfsbibliothek verwenden . Es funktioniert sehr gut und ist einfach zu integrieren.
quelle
Ich denke, das ist die beste Antwort.
"Ja" bedeutet verbunden. "Nein" bedeutet getrennt.
quelle
Importieren Sie die
Reachable.h
Klasse in IhreViewController
und verwenden Sie den folgenden Code, um die Konnektivität zu überprüfen :quelle
Schritt 3: Erstellen Sie die folgende Funktion
Schritt 4: Rufen Sie die Funktion wie folgt auf:
quelle