Je voudrais vérifier si j'ai une connexion Internet sur iOS en utilisant les bibliothèques Cocoa Touch ou sur macOS en utilisant les bibliothèques Cocoa .
J'ai trouvé un moyen de le faire en utilisant un NSURL
. La façon dont je l'ai fait semble un peu peu fiable (car même Google pourrait un jour être en panne et s'appuyer sur un tiers semble mauvais), et même si je pouvais vérifier pour voir une réponse de certains autres sites Web si Google ne répondait pas, il ne semble gaspillage et une surcharge inutile sur ma demande.
- (BOOL) connectedToInternet
{
NSString *URLString = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://www.google.com"]];
return ( URLString != NULL ) ? YES : NO;
}
Est-ce que j'ai mal agi (sans parler de la stringWithContentsOfURL
dépréciation dans iOS 3.0 et macOS 10.4) et si oui, quelle est la meilleure façon d'y parvenir?
ios
macos
cocoa
cocoa-touch
reachability
Brock Woolf
la source
la source
return (BOOL)URLString;
, ou encore mieux,return !!URLString
oureturn URLString != nil
NSString *URLString = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"https://twitter.com/getibox"] encoding:NSUTF8StringEncoding error:nil];
Pour se débarrasser de l'avertissement ennuyeux.Réponses:
Important : cette vérification doit toujours être effectuée de manière asynchrone. La majorité des réponses ci-dessous sont synchrones, alors faites attention sinon vous ferez geler votre application.
Rapide
1) Installez via CocoaPods ou Carthage: https://github.com/ashleymills/Reachability.swift
2) Test d'accessibilité via les fermetures
Objectif c
1) Ajoutez un
SystemConfiguration
cadre au projet mais ne vous inquiétez pas de l'inclure n'importe où2) Ajoutez la version de Tony Million de
Reachability.h
etReachability.m
au projet (disponible ici: https://github.com/tonymillion/Reachability )3) Mettre à jour la section interface
4) Ensuite, implémentez cette méthode dans le fichier .m de votre contrôleur de vue que vous pouvez appeler
Remarque importante: la
Reachability
classe est l'une des classes les plus utilisées dans les projets, vous pouvez donc rencontrer des conflits de dénomination avec d'autres projets. Si cela se produit, vous devrez renommer l'une des paires de fichiersReachability.h
etReachability.m
en quelque chose d'autre pour résoudre le problème.Remarque: le domaine que vous utilisez n'a pas d'importance. Il s'agit simplement de tester une passerelle vers n'importe quel domaine.
la source
SystemConfiguration.framework
au projet (pour la méthode 1).J'aime garder les choses simples. La façon dont je fais cela est:
Ensuite, j'utilise ceci chaque fois que je veux voir si j'ai une connexion:
Cette méthode n'attend pas les états de réseau modifiés pour faire des choses. Il teste simplement le statut lorsque vous le lui demandez.
la source
En utilisant le code d'accessibilité d'Apple, j'ai créé une fonction qui vérifiera cela correctement sans que vous ayez à inclure de classes.
Incluez le SystemConfiguration.framework dans votre projet.
Faites quelques importations:
Appelez maintenant cette fonction:
Et c'est iOS 5 testé pour vous.
la source
Auparavant, c'était la bonne réponse, mais elle est désormais obsolète car vous devez vous abonner aux notifications pour être joignable à la place. Cette méthode vérifie de manière synchrone:
Vous pouvez utiliser la classe d'accessibilité d'Apple. Il vous permettra également de vérifier si le Wi-Fi est activé:
La classe d'accessibilité n'est pas fournie avec le SDK, mais plutôt une partie de cet exemple d'application Apple . Téléchargez-le et copiez Reachability.h / m dans votre projet. Vous devez également ajouter le framework SystemConfiguration à votre projet.
la source
Voici une réponse très simple:
L'URL doit pointer vers un site Web extrêmement petit. J'utilise le site Web mobile de Google ici, mais si j'avais un serveur Web fiable, je téléchargerais un petit fichier avec un seul caractère pour une vitesse maximale.
Si vérifier que l'appareil est connecté d'une manière ou d'une autre à Internet est tout ce que vous voulez faire, je recommanderais certainement d'utiliser cette solution simple. Si vous avez besoin de savoir comment l'utilisateur est connecté, l'utilisation de l'accessibilité est la solution.
Attention: cela bloquera brièvement votre fil pendant qu'il charge le site Web. Dans mon cas, ce n'était pas un problème, mais vous devriez en tenir compte (merci à Brad pour l'avoir signalé).
la source
Voici comment je le fais dans mes applications: bien qu'un code de réponse à 200 états ne garantisse rien, il est suffisamment stable pour moi. Cela ne nécessite pas autant de chargement que les réponses NSData publiées ici, car la mienne vérifie simplement la réponse HEAD.
Code rapide
Code Objective-C
la source
Apple fournit un exemple de code pour vérifier les différents types de disponibilité du réseau. Alternativement, il y a un exemple dans le livre de cuisine des développeurs iPhone.
Remarque: veuillez consulter le commentaire de @ KHG sur cette réponse concernant l'utilisation du code d'accessibilité d'Apple.
la source
Vous pouvez utiliser
Reachability
par ( disponible ici ).la source
Apple fournit un exemple d'application qui fait exactement cela:
Accessibilité
la source
Seule la classe d'accessibilité a été mise à jour. Vous pouvez maintenant utiliser:
la source
Une version sur Reachability pour iOS 5 est darkseed / Reachability.h . Ce n'est pas le mien! =)
la source
Il y a une belle modernisation de l'accessibilité utilisant ARC et GCD:
Accessibilité
la source
Si vous utilisez,
AFNetworking
vous pouvez utiliser sa propre implémentation pour le statut d'accessibilité à Internet.La meilleure façon d'utiliser
AFNetworking
est de sous-AFHTTPClient
classer la classe et d'utiliser cette classe pour effectuer vos connexions réseau.L'un des avantages de cette approche est que vous pouvez l'utiliser
blocks
pour définir le comportement souhaité lorsque l'état de l'accessibilité change. En supposant que j'ai créé une sous-classe singleton deAFHTTPClient
(comme indiqué dans les "Notes de sous-classe" sur les documents AFNetworking ) nomméeBKHTTPClient
, je ferais quelque chose comme:Vous pouvez également vérifier les connexions Wi-Fi ou WLAN en utilisant spécifiquement les enums
AFNetworkReachabilityStatusReachableViaWWAN
etAFNetworkReachabilityStatusReachableViaWiFi
( plus ici ).la source
J'ai utilisé le code dans cette discussion , et il semble bien fonctionner (lire tout le fil!).
Je ne l'ai pas testé de manière exhaustive avec tous les types de connexion imaginables (comme le Wi-Fi ad hoc).
la source
Très simple .... Essayez ces étapes:
Étape 1: ajoutez le
SystemConfiguration
cadre à votre projet.Étape 2: importez le code suivant dans votre
header
fichier.Étape 3: utilisez la méthode suivante
Type 1:
Type 2:
Importer l'en-tête :
#import "Reachability.h"
Étape 4: Comment utiliser:
la source
la source
Ou utilisez la classe d'accessibilité .
Il existe deux façons de vérifier la disponibilité d'Internet à l'aide du SDK iPhone:
1. Vérifiez que la page Google est ouverte ou non.
2. Classe d'accessibilité
Pour plus d'informations, reportez-vous à la section Accessibilité (développeur Apple).
la source
Utilisez http://huytd.github.io/datatify/ . C'est plus simple que d'ajouter des bibliothèques et d'écrire du code par vous-même.
la source
Premièrement : ajouter
CFNetwork.framework
dans le cadreCode :
ViewController.m
la source
Téléchargez d'abord la classe d'accessibilité et mettez le fichier reachability.h et reachabilty.m dans votre Xcode .
La meilleure façon est de créer une classe Functions commune (NSObject) afin que vous puissiez l'utiliser dans n'importe quelle classe. Ce sont deux méthodes pour une vérification d'accessibilité de connexion réseau:
Vous pouvez maintenant vérifier la connexion réseau dans n'importe quelle classe en appelant cette méthode de classe.
la source
Il existe également une autre méthode pour vérifier la connexion Internet à l'aide du SDK iPhone.
Essayez d'implémenter le code suivant pour la connexion réseau.
la source
Je l'ai trouvée simple et facile à utiliser, la bibliothèque SimplePingHelper .
Exemple de code: chrishulbert / SimplePingHelper ( GitHub )
la source
Téléchargez le fichier d'accessibilité, https://gist.github.com/darkseed/1182373
Et ajoutez
CFNetwork.framework
et 'SystemConfiguration.framework' dans le cadreFaites #import "Reachability.h"
Premièrement : ajouter
CFNetwork.framework
dans le cadreCode :
ViewController.m
la source
Swift 3 / Swift 4
Vous devez d'abord importer
Vous pouvez vérifier la connexion Internet avec la méthode suivante
la source
La classe d'accessibilité est OK pour savoir si la connexion Internet est disponible ou non pour un appareil ...
Mais en cas d'accès à une ressource intranet :
Le ping du serveur intranet avec la classe d'accessibilité renvoie toujours true.
Ainsi, une solution rapide dans ce scénario serait de créer une méthode Web appelée
pingme
avec d'autres méthodes Web sur le service. Lepingme
devrait retourner quelque chose.J'ai donc écrit la méthode suivante sur les fonctions communes
La méthode ci-dessus m'a été si utile, donc chaque fois que j'essaie d'envoyer des données au serveur, je vérifie toujours l'accessibilité de ma ressource intranet à l'aide de cette URLRequest à faible délai d'attente.
la source
Faire cela vous-même est extrêmement simple. La méthode suivante fonctionnera. Assurez-vous simplement de ne pas autoriser un protocole de nom d'hôte tel que HTTP, HTTPS, etc. avec le nom.
C'est simple, rapide et indolore.
la source
Outre l'accessibilité, vous pouvez également utiliser la bibliothèque d'assistance Simple Ping . Cela fonctionne vraiment bien et est simple à intégrer.
la source
Je pense que celui-ci est la meilleure réponse.
"Oui" signifie connecté. "Non" signifie déconnecté.
la source
Importez la
Reachable.h
classe dans votreViewController
et utilisez le code suivant pour vérifier la connectivité :la source
Étape 3: créer la fonction ci-dessous
Étape 4: appelez la fonction comme suit:
la source