Reachability : être prévenu de la disponibilité du réseau

xcodeDe temps en temps, on trouve des petits bouts de code made in Apple. La class Reachability en fait partie, et elle est super pratique.

En suivant le mécanisme du NSNotificationCenter, cette class permet à une application d’être prévenu lors des changements de statut de la connectivité. Cela peut s’avérer bien pratique pour de la gestion de synchronisation par exemple.


Avant tout, il faut importer le framework SystemConiguration dans votre projet, puis les deux fichiers fournis par Apple (ou la version ARC, les liens sont disponibles à la fin de l’article).
Ensuite, voici comment mettre en place ce mécanisme assez rapidement:

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(reachabilityListener:)
                                             name:kReachabilityChangedNotification
                                           object:nil];
// hostReachable est à stocker en membre de class, vous aurez besoins d'y accéder
// dans la delegate.
// ATTENTION : il faut indiquer l'host et non l'url (pas de http://www) !
NXReachability    *hostReachable = [NXReachability reachabilityWithHostName:@"google.com"];
[hostReachable startNotifier];

Ensuite, pour réagir aux changements, la delegate reachabilityListener (que vous pouvez appeler comme vous voulez, tant que cela reste cohérent avec l’initialisation):

- (void)reachabilityListener:(NSNotification *)sender {
    // Il s'agit du hostReachable stocké dans la class lors de l'initialisation
    NetworkStatus remoteHostStatus = [hostReachable currentReachabilityStatus];
    switch (remoteHostStatus) {
        case NotReachable:
            // Pas de connexion disponible
            break;
        case ReachableViaWiFi:
            // Connexion wifi disponible
            break;
        case ReachableViaWWAN:
            // Connexion 3G disponible
            break;
    }
}

En n’oubliant pas de désabonner votre objet des notification une fois que vous avez terminé:

- (void)dealloc {
    [[NSNotificationCenter defaultCenter] removeObserver:self 
                                                    name:kReachabilityChangedNotification
                                                  object:nil];
}

Source : Apple et une version compatible ARC

Publié par

gcko

#iOS developer at @applydia, former #Epitech student, «I'm am currently making your smartphone smarter»