Comment vérifier une connexion Internet active sur iOS ou macOS?
Je voudrais vérifier pour voir si j'ai une connexion Internet sur iOS à l'aide de la Cocoa Touch les bibliothèques ou sur mac os à l'aide de la Cacao bibliothèques.
Je suis venu avec une façon de le faire à l'aide d'un NSURL
. Je l'ai fait il me semble un peu peu fiable (parce que même Google pourrait un jour être en bas et en s'appuyant sur un troisième partie semble mal), et bien que j'ai pu vérifier pour voir une réponse de certains autres sites web si Google n'a pas répondu, il ne semble un gaspillage et une surcharge inutile à ma demande.
- (BOOL) connectedToInternet
{
NSString *URLString = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://www.google.com"]];
return ( URLString != NULL ) ? YES : NO;
}
Est ce que j'ai fait mauvais (pour ne pas mentionner stringWithContentsOfURL
est obsolète dans iOS 3.0 et macOS 10.4) et si oui, quelle est la meilleure façon d'accomplir cette?
return (BOOL)URLString;
, ou encore mieux, return !!URLString
ou return URLString != nil
Je ne sais pas ce que votre cas d'utilisation, mais si vous le pouvez, il est préférable d'essayer de la demande et de gérer les erreurs comme un manque de connexion qui se posent. Si vous ne pouvez pas faire cela, alors il ya beaucoup de bons conseils ici dans ce cas.
Votre solution est intelligent, et je le préfère. Vous pouvez également utiliser
NSString *URLString = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"https://twitter.com/getibox"] encoding:NSUTF8StringEncoding error:nil];
Pour se débarrasser de l'ennuyeux avertissement.essayez d'utiliser l'Accessibilité classe à partir du lien ci-dessous, il va travailler pour vous github.com/tonymillion/Reachability
Pour les personnes qui viennent de trouver cette réponse: stackoverflow.com/a/8813279
OriginalL'auteur Brock Woolf | 2009-07-05
Vous devez vous connecter pour publier un commentaire.
Important: Cette case doit toujours être exécutée de manière asynchrone. La majorité des réponses ci-dessous sont synchrones donc attention sinon vous allez geler votre application.
Swift
1) Installer via CocoaPods ou Carthage: https://github.com/ashleymills/Reachability.swift
2) de Tester l'accessibilité par le biais des fermetures
Objective-C
1) Ajouter
SystemConfiguration
cadre de ce projet, mais ne vous inquiétez pas, y compris n'importe où2) Ajouter Tony Millions de dollars de la version de
Reachability.h
etReachability.m
pour le projet (trouvé ici: https://github.com/tonymillion/Reachability)3) mise à Jour de la section de l'interface
4) mettre en œuvre cette méthode dans le .m fichier de votre point de vue contrôleur lequel vous pouvez appeler
Remarque importante: La
Reachability
classe est l'un des la plupart des classes utilisées dans des projets de sorte que vous pouvez exécuter dans les conflits de noms avec d'autres projets. Si cela se produit, vous devrez le renommer l'une des paires deReachability.h
etReachability.m
fichiers quelque chose d'autre pour résoudre le problème.Remarque: Le domaine que vous utilisez n'a pas d'importance. C'est juste des tests pour une passerelle pour n'importe quel domaine.
C'est juste un exemple, quel que soit le domaine que vous souhaitez. Il vérifie simplement pour un accès à l'internet, pas que le domaine est en fait disponible.
Oh, btw, vous devez ajouter
SystemConfiguration.framework
à la réalisation du projet (pour la méthode 1).Utilisation http://www.appleiphonecell.com au lieu de google.com - cette url a été créé par apple, précisément pour cette raison.
L'utilisation de http://www.appleiphonecell.com est maintenant (2018) un mauvais choix. Maintenant redirige vers Apple.com qui est a > 40 ko fichier html. De retour à google.com - c'est seulement 11kB. BTW google.com/m est la même taille mais est signalé à être plus lent par 120 msec.
OriginalL'auteur iwasrobbed
Je tiens à garder les choses simples. La façon dont je le fais c'est:
Ensuite, j'utilise ce que je veux pour voir si j'ai une connexion:
Cette méthode n'attend pas changé réseau des statuts pour faire des trucs. Il vient de tests de l'état lorsque vous le demandez.
POURQUOI vous êtes de retour != NotReachable au lieu de "retour netWorkStatus;" ???
Pour ceux qui ont juste copier et coller comme je l'ai fait avec le code ci-dessus. Également ajouter SystemConfiguration.cadre manuellement ou vous obtiendrez erreur de couplage.
l'accessibilité indéfinis???
Viennent toujours comme accessible si je me connecter avec le WiFi. Le WiFi ne veut pas dire qu'il est d'avoir une connexion internet. Je veux vérifier la connexion internet même s'il a de la connectivité WiFi. Pouvez-vous svp m'aider?
OriginalL'auteur cannyboy
Utilisant Apple l'Accessibilité par le code, j'ai créé une fonction qui vais vérifier cela correctement sans avoir à inclure toutes les classes.
Inclure la SystemConfiguration.cadre de votre projet.
Faire quelques importations:
Maintenant suffit d'appeler cette fonction:
Et c'est iOS 5 testé pour vous.
Fonctionne bien sur iOS3.0 trop, thx
Cela ne veut pas effectuer la vérification internet de manière asynchrone, ce qui est pourquoi il est "beaucoup plus"... Vous devriez toujours être en train de faire cela de façon asynchrone par abonnement aux notifications de sorte que vous ne raccrochez pas l'application sur ce processus.
Merci, ce travail même si vous êtes en utilisant un réseau wifi adsl et adsl n'est pas connecté, c'est exactement ce dont j'ai besoin.
Cette fuite de mémoire - la "lisibilité" de la structure (objet, de la chose) doit être libérée avec CFRelease().
OriginalL'auteur Andrew Zimmer
Ce qui à la bonne réponse, mais il est maintenant obsolète que vous devriez vous abonner à des notifications pour l'accessibilité à la place. Cette méthode vérifie de façon synchrone:
Vous pouvez utiliser Apple Accessibilité de la classe. Il vous permettra également de vérifier si le Wi-Fi est activée:
L'Accessibilité de la classe n'est pas fourni avec le SDK, mais plutôt une partie de cet exemple d'application d'Apple. Il suffit de le télécharger et de copier l'Accessibilité.h/m à votre projet. Aussi, vous devez ajouter le SystemConfiguration cadre de votre projet.
Ce code est un bon point de départ pour des choses que vous avez besoin avant de vous pouvez utiliser le délégué des méthodes pour l'accessibilité de la classe.
OriginalL'auteur Daniel Rinser
Voici une réponse très simple:
L'URL doit pointer vers un très petit site web. J'utilise Google mobile du site ici, mais si j'avais un fiable de serveur web que j'avais télécharger un petit fichier avec juste un caractère pour une vitesse maximale.
Si vérifier si l'appareil est en quelque sorte connecté à l'Internet est tout ce que vous voulez faire, je serais certainement vous recommandons d'utiliser cette solution simple. Si vous avez besoin de savoir comment l'utilisateur est connecté, à l'aide de l'Accessibilité est le chemin à parcourir.
Attention: Ce sera brièvement bloquer votre fil pendant qu'il se charge du site web. Dans mon cas, ce n'était pas un problème, mais vous devez tenir compte de cette (crédits de Brad pour le signaler).
Génial solution @Erik. Ce que je vous recommande est d'utiliser http://www.google.com au lieu de http://www.google.com/m comme rwyland dit. C'est bizarre, mais à partir de mon test de la version mobile prend toujours à propos de 120ms de plus que le http://www.google.com
Apple docs vous recommandons de ne pas le faire car il peut bloquer le thread sur un réseau lent, peut causer application pour être mis fin dans iOS
Merci pour le feedback positif, conviennent de ce qui http://www.google.com/m est la meilleure solution en raison de la fiabilité!
LOL, je suis sûr que Google apprécie de vous suggérant les gens utilisent l'Internet, vérifier des ressources.
OriginalL'auteur Erik
Ici est de savoir comment je le fais dans mes applications: Tout un état 200 code de réponse n'est pas garantie de quoi que ce soit, il est assez stable pour moi. Cela ne nécessite pas que beaucoup le chargement de la NSData réponses postées ici, comme la mienne vérifie simplement la TÊTE en réponse.
Code Swift
Code Objective-C
Attention: Dans mon expérience, cette solution ne fonctionne pas tout le temps. Dans de nombreux cas, la réponse renvoyée est 403, après la prise de son temps doux. Cette solution semble parfaite, mais ne garantit pas à 100% de résultats.
"Pas de google , pas d'internet" ??
En juin 2014, ce sera l'échec dans la partie continentale de Chine, en raison de la gouvernement Chinois maintenant bloquer complètement google.com. (google.cn fonctionne quand même, mais dans la partie continentale de la Chine, aucun baidu.com, pas d'internet) Probablement mieux de ping importe quel serveur vous devez communiquer avec.
Utilisation http://www.appleiphonecell.com au lieu de cela apple a créé cette url précisément pour cette raison.
OriginalL'auteur klcjr89
Apple fournit exemple de code pour vérifier les différents types de la disponibilité du réseau. Sinon il y a un exemple dans l'iPhone, les développeurs de livre de cuisine.
Remarque: Veuillez voir @KHG commentaire de cette réponse au sujet de l'utilisation de la Pomme de l'accessibilité par le code.
Notez que la nouvelle révision (09-08-09) de l'Accessibilité des exemples de code à partir d'Apple est asynchrone.
OriginalL'auteur teabot
Vous pouvez utiliser
Reachability
par (disponible ici).Non, c'est asynchrone.
OriginalL'auteur Aleksander Azizi
Apple fournit un exemple d'application qui fait exactement cela:
L'accessibilité
Heureusement, la situation est beaucoup mieux dans la version 3.0, le système présente une page de connexion pour les utilisateurs derrière un verrouillé WiFi où vous devez vous connecter pour utiliser... que vous utilisez pour vérifier, pour le rediriger de façon manuelle (et vous n'avez toujours si les pays en développement 2.2.1 apps)
Je ne dirais pas que la connectivité de l'application fait exactement ce qui est demandé. Cependant c'est un bon point de départ pour ajouter le genre de fonctionnalité qui est demandé,
OriginalL'auteur
Seulement l'Accessibilité de la classe a été mis à jour. Vous pouvez maintenant utiliser:
Je suis d'accord avec bpapa. Ce n'est pas une bonne idée d'utiliser du code synchrone. Merci pour l'info mais
OriginalL'auteur Ben Groot
Une version sur l'Accessibilité pour iOS 5 est "darkseed" /Accessibilité.h. Ce n'est pas le mien! =)
OriginalL'auteur Alex
Il y a une belle apparence, ARC - et PGCD-l'aide à la modernisation de l'Accessibilité par ici:
L'accessibilité
OriginalL'auteur JK Laiho
Si vous utilisez
AFNetworking
vous pouvez utiliser sa propre application pour internet l'accessibilité par le statut.La meilleure façon d'utiliser
AFNetworking
est une classe de laAFHTTPClient
de classe et d'utiliser cette classe pour faire vos connexions réseau.L'un des avantages de l'utilisation de cette approche est que vous pouvez utiliser
blocks
pour définir le comportement souhaité lors de l'accessibilité des changements de statut. En supposant que j'ai créé un singleton sous-classe deAFHTTPClient
(comme l'a dit le "sous-classement des notes" sur AFNetworking docs) nomméBKHTTPClient
, je ferais quelque chose comme:Vous pouvez également vérifier pour le Wi-Fi ou WLAN connexions spécifiquement à l'aide de la
AFNetworkReachabilityStatusReachableViaWWAN
etAFNetworkReachabilityStatusReachableViaWiFi
les énumérations (plus ici).OriginalL'auteur Bruno Koga
J'ai utilisé le code dans cette discussion, et il semble fonctionner correctement (lire la ensemble fil!).
Je n'ai pas testé de manière exhaustive de toutes sortes de connexion (comme ad hoc Wi-Fi).
OriginalL'auteur Felixyz
Très simple.... Essayez de suivre ces étapes:
Étape 1: Ajouter le
SystemConfiguration
cadre de votre projet.Étape 2: Importer le code suivant dans votre
header
fichier.Étape 3: Utiliser la méthode suivante
De Type 1:
De Type 2:
Importation en-tête :
#import "Reachability.h"
Étape 4: Comment utiliser:
Est de type 1 asynchrone?
Je veux que le type 2 de bugs de votre réponse. J'ai ajouté l'accessibilité des classes et j'ai essayé de vérifier la connexion de vérification en utilisant au-dessus de votre réponse. il vient toujours accessible, même si je me connecter avec le WiFi, mais il n'a pas la connexion internet. Le WiFi ne veut pas dire qu'il est d'avoir une connexion internet. Je veux vérifier la connexion internet même s'il a de la connectivité WiFi. Pouvez-vous svp m'aider?
OriginalL'auteur Rajesh Loganathan
OriginalL'auteur Mutawe
Ou utiliser le Accessibilité classe.
Il y a deux façons de vérifier la disponibilité d'Internet en utilisant le SDK de l'iPhone:
1. Vérifiez la page de Google est ouvert ou pas.
2. L'Accessibilité De La Classe
Pour plus d'informations, veuillez vous référer à L'accessibilité (Développeurs Apple).
Il y a deux façon de vérifier sur internet disponibilité de l'iPhone SDK 1)Vérifiez la page de Google est ouvert ou pas.
-1 : C'est une méthode synchrone qui permet de bloquer le thread principal (celui que l'INTERFACE utilisateur de l'application est changé) alors qu'il tente de se connecter à google.com. Si votre utilisateur est sur une très lente connexion de données, le téléphone va agir comme le processus ne répond pas.
OriginalL'auteur IOS Rocks
Utilisation http://huytd.github.io/datatify/. Il est plus facile que l'ajout de bibliothèques et d'écrire un code par vous-même.
OriginalL'auteur Huy Tran
Première: Ajouter
CFNetwork.framework
dans le cadreCode:
ViewController.m
OriginalL'auteur Paresh Hirpara
D'abord télécharger l'accessibilité de la classe et de mettre de l'accessibilité.h et reachabilty.m de fichier dans votre Xcode.
La meilleure façon est de faire une des Fonctions communes (de la classe NSObject), de sorte que vous pouvez l'utiliser n'importe quelle classe. Ces deux méthodes pour une connexion réseau d'accessibilité vérifier:
Maintenant, vous pouvez vérifier la connexion réseau dans toute la classe par l'appel de cette méthode de classe.
OriginalL'auteur Latika Tiwari
Il y a aussi une autre méthode pour vérifier la connexion Internet en utilisant le SDK de l'iPhone.
Essayer de mettre en œuvre le code suivant pour la connexion réseau.
OriginalL'auteur iProgrammer
Je l'ai trouvé simple et facile à utiliser bibliothèque SimplePingHelper.
Exemple de code: chrishulbert/SimplePingHelper (GitHub)
OriginalL'auteur Piyush Dubey
Télécharger l'Accessibilité fichier, https://gist.github.com/darkseed/1182373
Et ajouter
CFNetwork.framework
et " SystemConfiguration.cadre " dans le cadreN' #import "l'Accessibilité.h"
Première: Ajouter
CFNetwork.framework
dans le cadreCode:
ViewController.m
OriginalL'auteur Maulik Salvi
La Accessibilité classe est OK pour savoir si la connexion Internet est disponible pour un appareil ou pas...
Mais dans le cas de l'accès à une ressources de l'intranet:
Envoyer une requête ping au serveur intranet avec l'accessibilité de la classe retourne toujours true.
Donc une solution rapide à ce scénario serait de créer un site web de méthode appelée
pingme
le long de avec d'autres webmethods sur le service.Le
pingme
doit retourner quelque chose.J'ai donc écrit la méthode suivante sur les fonctions communes
La méthode ci-dessus a été très utile pour moi, donc à chaque fois que j'essaie d'envoyer des données au serveur, j'ai toujours vérifier l'accessibilité de mes ressources de l'intranet à l'aide de cette faible délai d'attente URLRequest.
OriginalL'auteur Durai Amuthan.H
Pour le faire vous-même est extrêmement simple. La méthode suivante fonctionne. Juste être sûr de ne pas permettre à un nom d'hôte protocole comme HTTP, HTTPS, etc. pour être passé dans le nom.
Il est rapide, simple et indolore.
OriginalL'auteur Tony
En dehors de l'accessibilité, vous pouvez également utiliser le Simple Ping bibliothèque d'assistance. Il fonctionne vraiment bien, et est simple à intégrer.
OriginalL'auteur user2538944
Je pense que c'est la meilleure réponse.
"Oui" signifie connecté. "Non" signifie déconnecté.
OriginalL'auteur Mina Fawzy
Importation
Reachable.h
classe dans votreViewController
, et utiliser le code suivant pour vérifier connectivité:OriginalL'auteur Himanshu Mahajan
Étape 3: Créer le dessous de la fonction
Étape 4: Appeler la fonction comme ci-dessous:
OriginalL'auteur Anny
Vérification de la connexion Internet, la disponibilité en (iOS) Xcode 8 , Swift 3.0
Veuillez vérifier la principale réponse à la tête.
OriginalL'auteur ViJay Avhad