Je me demande comment je peux vérifier si l'utilisateur est connecté à Internet via WIFI ou des données cellulaires 3G ou 4G.
En outre, je ne veux pas vérifier si un site Web est accessible ou non, ce que je veux vérifier s'il y a ou non Internet sur l'appareil. J'ai essayé de regarder sur Internet, mais tout ce que je vois, c'est qu'ils vérifient si le site Web est accessible ou n'utilise pas la classe Rechability
.
Je veux vérifier si l'utilisateur a Internet ou non quand il ouvre mon application.
J'utilise Xcode6 avec Objective-C.
Utilisez ce code et importez le fichier Reachability.h
if ([[Reachability reachabilityForInternetConnection]currentReachabilityStatus]==NotReachable)
{
//connection unavailable
}
else
{
//connection available
}
Premier téléchargement des classes d'accessibilité à partir de ce lien:
Rechability from Github
Ajouter une instance d'accessibilité dans AppDelegate.h
@property (nonatomic) Reachability *hostReachability;
@property (nonatomic) Reachability *internetReachability;
@property (nonatomic) Reachability *wifiReachability;
Importez Accessibilité dans votre AppDelegate et copiez et collez ce code dans votre Appdelegate.m
- (id)init
{
self = [super init];
if (self != nil)
{
//[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:kReachabilityChangedNotification object:nil];
NSString *remoteHostName = @"www.google.com";
self.hostReachability = [Reachability reachabilityWithHostName:remoteHostName];
[self.hostReachability startNotifier];
self.internetReachability = [Reachability reachabilityForInternetConnection];
[self.internetReachability startNotifier];
self.wifiReachability = [Reachability reachabilityForLocalWiFi];
[self.wifiReachability startNotifier];
}
return self;
}
Ajoutez cette méthode dans votre classe commune.
/*================================================================================================
Check Internet Rechability
=================================================================================================*/
+(BOOL)checkIfInternetIsAvailable
{
BOOL reachable = NO;
NetworkStatus netStatus = [APP_DELEGATE1.internetReachability currentReachabilityStatus];
if(netStatus == ReachableViaWWAN || netStatus == ReachableViaWiFi)
{
reachable = YES;
}
else
{
reachable = NO;
}
return reachable;
}
Notez que APP_DELEGATE1 est une instance de AppDelegate.
/* AppDelegate object */
#define APP_DELEGATE1 ((AppDelegate*)[[UIApplication sharedApplication] delegate])
Vous pouvez vérifier la connectivité Internet n'importe où dans l'application en utilisant cette méthode.
J'espère que cela vous aidera à réseauter en mode Wifi uniquement:
Utils.h
#import <Foundation/Foundation.h>
@interface Utils : NSObject
+(BOOL)isNetworkAvailable;
@end
utils.m
+ (BOOL)isNetworkAvailable
{
CFNetDiagnosticRef dReference;
dReference = CFNetDiagnosticCreateWithURL (NULL, (__bridge CFURLRef)[NSURL URLWithString:@"www.Apple.com"]);
CFNetDiagnosticStatus status;
status = CFNetDiagnosticCopyNetworkStatusPassively (dReference, NULL);
CFRelease (dReference);
if ( status == kCFNetDiagnosticConnectionUp )
{
NSLog (@"Connection is Available");
return YES;
}
else
{
NSLog (@"Connection is down");
return NO;
}
}
// Maintenant, utilisez ceci dans la classe requise
- (IBAction)MemberSubmitAction:(id)sender {
if([Utils isNetworkAvailable] ==YES){
NSlog(@"Network Connection available");
}
}
c'est simple, vous pouvez utiliser la méthode suivante pour vérifier la connexion Internet.
-(BOOL)IsConnectionAvailable
{
Reachability *reachability = [Reachability reachabilityForInternetConnection];
NetworkStatus networkStatus = [reachability currentReachabilityStatus];
return !(networkStatus == NotReachable);
}
Essayez ceci pour vérifier si Internet est connecté ou non
NSURL *url = [NSURL URLWithString:@"http://www.appleiphonecell.com/"];
NSMutableURLRequest *headRequest = [NSMutableURLRequest requestWithURL:url];
headRequest.HTTPMethod = @"HEAD";
NSURLSessionConfiguration *defaultConfigObject = [NSURLSessionConfiguration ephemeralSessionConfiguration];
defaultConfigObject.timeoutIntervalForResource = 10.0;
defaultConfigObject.requestCachePolicy = NSURLRequestReloadIgnoringLocalAndRemoteCacheData;
NSURLSession *defaultSession = [NSURLSession sessionWithConfiguration:defaultConfigObject delegate:nil delegateQueue: [NSOperationQueue mainQueue]];
NSURLSessionDataTask *dataTask = [defaultSession dataTaskWithRequest:headRequest
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error)
{
if (!error && response)
{
block([(NSHTTPURLResponse *)response statusCode] == 200);
}else{
block(FALSE);
}
}];
[dataTask resume];
'Accessibilité' ne fonctionne pas car il ne détectera pas s'il y a une réponse de l'hôte ou non. Il va simplement vérifier si le client peut envoyer un paquet à l'hôte. Ainsi, même si vous êtes connecté à un réseau Wi-Fi et que l'accès à Internet Wi-Fi est en panne ou que le serveur est en panne, vous obtiendrez un "OUI" pour ce qui est de l'accessibilité.
Une meilleure méthode consiste à essayer une requête HTTP et à vérifier la réponse.
Exemple ci-dessous:
NSURL *pageToLoadUrl = [[NSURL alloc] initWithString:@"https://www.google.com/"];
NSMutableURLRequest *pageRequest = [NSMutableURLRequest requestWithURL:pageToLoadUrl];
[pageRequest setTimeoutInterval:2.0];
AFHTTPRequestOperation *pageOperation = [[AFHTTPRequestOperation alloc] initWithRequest:pageRequest];
AFRememberingSecurityPolicy *policy = [AFRememberingSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
[policy setDelegate:self];
currentPageOperation.securityPolicy = policy;
if (self.ignoreSSLCertificate) {
NSLog(@"Warning - ignoring invalid certificates");
currentPageOperation.securityPolicy.allowInvalidCertificates = YES;
}
[pageOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
internetActive = YES;
} failure:^(AFHTTPRequestOperation *operation, NSError *error){
NSLog(@"Error:------>%@", [error description]);
internetActive = NO;
}];
[pageOperation start];
Le seul problème est que "InternetActive" est mis à jour avec un délai allant jusqu'au délai mentionné dans le code ci-dessus. Vous pouvez coder à l'intérieur du rappel pour agir sur le statut.
Réponse mise à jour pour Swift 4.0 et AlamoFire:
La réponse que j'ai postée le 18 septembre est incorrecte, elle ne détecte que si elle est connectée au réseau, pas à Internet. Voici la solution correcte avec AlamoFire:
1) Créer une classe d’observance de la accessibilité personnalisée:
import Alamofire
class ReachabilityObserver {
fileprivate let reachabilityManager = NetworkReachabilityManager()
fileprivate var reachabilityStatus: NetworkReachabilityManager.NetworkReachabilityStatus = .unknown
var isOnline: Bool {
if (reachabilityStatus == .unknown || reachabilityStatus == .notReachable){
return false
}else{
return true
}
}
static let sharedInstance = ReachabilityObserver()
fileprivate init () {
reachabilityManager?.listener = {
[weak self] status in
self?.reachabilityStatus = status
NotificationCenter.default.post(
name: NSNotification.Name(rawValue: ClickUpConstants.ReachabilityStateChanged),
object: nil)
}
reachabilityManager?.startListening()
}
}
2) Initialiser au démarrage de l'application
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
_ = ReachabilityObserver.sharedInstance
return true
}
3) Utilisez-le n'importe où dans votre application pour détecter si vous êtes en ligne, comme lors du chargement de vue ou lorsque l'action se produit
if (ReachabilityObserver.sharedInstance.isOnline){
//User is online
}else{
//User is not online
}
Reachability* reachability = [Reachability reachabilityWithHostName:@"www.google.com"];
NetworkStatus internetStatus = [reachability currentReachabilityStatus];
if(remoteHostStatus == ReachableViaWWAN || remoteHostStatus == ReachableViaWiFi)
{
//my web-dependent code
}
else {
//there-is-no-connection warning
}
Utilisation de Bibliothèque Alamofire :
let reachabilityManager = NetworkReachabilityManager()
let isReachable = reachabilityManager.isReachable
if (isReachable) {
//Has internet
}else{
//No internet
}
Essaye ça
vérifier ce lien pour le fichier d'accessibilité
importer ce fichier dans votre fichier .m puis écrire du code
// Ceci est pour vérifier la connexion Internet
BOOL hasInternetConnection = [[Reachability reachabilityForInternetConnection] isReachable];
if (hasInternetConnection) {
// your code
}
J'espère que ça aide.