• Programmazione Android
  • CORSI ONLINE
  • Web Agency

Logo

Corsi di programmazione web e mobile online
Navigation
  • Home
  • CORSI ONLINE
  • Tutorial Pratici
  • GUIDE COMPLETE
    • Corso completo di C
    • Corso videogame con Cocos2d
    • Programmazione Cocoa Touch
  • Sezioni
    • Libri e manuali
    • Tips & Tricks
    • Risorse utili
    • Strumenti di Sviluppo
    • Materiale OpenSource
    • Framework
    • Guide Teoriche
    • Guide varie
    • Grafica e Design
    • iPad
    • News
    • Video Tutorial
    • Windows Phone
  • Pubblicità
  • About
    • Chi siamo
    • Pubblicazioni
    • Collabora
    • Sostieni devAPP

T#070 – Controllare le connessioni disponibili nelle nostre applicazioni iPhone

By Andrea Busi | on 13 Settembre 2010 | 14 Comments
Senza categoria

t070 verificare presenza connessione applicazioni iphone ipad 07b Eccoci con un nuovo tutorial dedicato alla programmazione per iPhone SDK. In questo appuntamento vedremo come controllare le connessioni disponibili nel nostro dispositivo, operazione molto importante in tutte le applicazioni che devono accedere, per qualsiasi motivo, alla rete. Vedremo come utilizzare la classe “Reachability” (messa a disposizione da Apple), per testare se è attiva una connessione WiFi o 3G. Piccola nota, in questo tutorial parleremo sempre di connessione 3G, sarebbe più corretto parlare di connessione dati (potrebbe essere anche una semplice connessione EDGE), ma per semplicità utilizzeremo sempre la dicitura 3G. Buon tutorial a tutti allora!

1. Creiamo il nostro progetto

In questo tutorial l’aspetto grafico dell’applicazione non sarà rilevante, infatti servirà solo per mostrare le connessioni disponibili. Iniziamo creando un nuovo progetto di tipo “View-based Application” e chiamiamolo “ControllaConnessioni”.


t070 verificare presenza connessione applicazioni iphone ipad 01

Apriamo il file “ControllaConnessioniViewController.h” e definiamo i seguenti oggetti:

#import 
 
@interface ControllaConnessioniViewController : UIViewController {
 IBOutlet UILabel *labelWifi;
 IBOutlet UILabel *label3g;
}
 
-(IBAction)eseguiControllo;
 
@end

Abbiamo definito due UILabel e un’azione IBAction, che andremo poi a collegare con degli oggetti che inseriremo in Interface Builder.

Salviamo il file e apriamo “ControllaConnessioniViewController.xib”. Definiamo una struttura a nostro piacere, l’importante è che ci siano due label (una per la connessione WiFi e una per quella 3G) e un bottone, che dovrà avviare il controllo delle connessioni. Ecco come ho impostato io l’aspetto grafico:


t070 verificare presenza connessione applicazioni iphone ipad 02

Selezioniamo il “File’s Owner” e dal pannello “Connections Inspector” colleghiamo “labelWifi” e “label3g” con le rispettive label, mentre associate l’azione “eseguiControllo” con il bottone. Se avete eseguito tutto correttamente avrete un pannello come questo:


t070 verificare presenza connessione applicazioni iphone ipad 03

Possiamo salvare e chiudere Interface Builder.

2. Aggiungiamo la classe “Reachability”

Dobbiamo ora scaricare la classe “Reachability” messa a disposizione da Apple e inserirla nel nostro progetto. Scaricate l’esempio “Reachability” presente nel Developer Connections (link diretto). Estratelo e copiate i due file “Reachability.h” e “Reachability.m” all’interno del vostro progetto:


t070 verificare presenza connessione applicazioni iphone ipad 04

Inserite, poi, la spunta a “Copy items into destination group’s folder” e cliccate su “Add”.


t070 verificare presenza connessione applicazioni iphone ipad 05

Se avete eseguito correttamente questa operazione troverete la classe “Reachability” all’interno del vostro progetto:


t070 verificare presenza connessione applicazioni iphone ipad 06

Dobbiamo infine inserire un framework in modo che la classe funzioni correttamente. Cliccate con il tasto destro su “Frameworks” e scegliete “Add -> Existing Frameworks…”. Dal menù che vi apparirà scegliete poi “SystemConfiguration.framework”:

Cliccate infine su “Add” per importare nel vostro progetto questo framework.

3. Scriviamo il codice che controlla le connessioni

Dobbiamo ora scrivere il codice che controlla le connessioni presenti. Apriamo il file “ControllaConnessioniViewController.h” e modifichiamo così il codice già presente:

#import 
 
@class Reachability;
 
@interface ControllaConnessioniViewController : UIViewController {
 IBOutlet UILabel *labelWifi;
 IBOutlet UILabel *label3g;
 
 Reachability* internetReach;
 Reachability* wifiReach;
}
 
-(IBAction)eseguiControllo;
-(void)check:(Reachability*) curReach;
 
@end

Vediamo le modifiche apportare. Alla riga 3 abbiamo definito l’utilizzo della classe “Reachability”, questa istruzione ci permette di evitare l’importazione della classe, che poi faremo successivamente. Alle righe 9 e 10 abbiamo definito due oggetti, che avranno il compito di eseguire i test sulle connessioni. Abbiamo, infine, definito un nuovo metodo, “check: curReach”, che servirà per il test delle connessioni.

Possiamo salvare questo file e passare a “ControllaConnessioniViewController.m”. Per prima cosa importiamo la libreria “Reachability”, semplicemente inserendo questa importazione (riga 2):

#import "ControllaConnessioniViewController.h"
#import "Reachability.h"
 
@implementation ControllaConnessioniViewController

Ora dobbiamo scrivere il codice che controlla effettivamente le connessioni. Inserite, quindi, i seguenti due metodi (di cui abbiamo definito le intestazioni prima):

-(IBAction)eseguiControllo {
 internetReach = [[Reachability reachabilityForInternetConnection] retain];
 [self check:internetReach];
 
 wifiReach = [[Reachability reachabilityForLocalWiFi] retain];
 [self check:wifiReach];
}
 
-(void)check:(Reachability*) curReach{
 NetworkStatus netStatus = [curReach currentReachabilityStatus];
 
 switch (netStatus){
 case NotReachable:{
 label3g.text = @"No";
 labelWifi.text = @"No";
 break;
 }
 case ReachableViaWWAN:{
 label3g.text = @"Si";
 break;
 }
 case ReachableViaWiFi:{
 labelWifi.text = @"Si";
 break;
 }
 }
}

Vediamo come funzionano i due metodi. “eseguiControllo” inizializza i due oggetti di tipo “Reachability” (righe 2 e 5), che vengono, uno alla volta, passati al metodo “check”. Questo ne esamina lo stato: se è disponibile la connessione in questione (quindi WiFi o 3G) entra nel caso della struttura switch predisposta (riga 12) e varia la label della connessione. Se invece non sono presenti le connessioni vengono settate entrambe le label a “No”.

Concludiamo implementando il metodo “dealloc”, che vi ricordo essere molto importante (soprattutto nelle applicazioni complesse):

- (void)dealloc {
 [wifiReach release];
 [internetReach release];
 [super dealloc];
}

Possiamo testare la nostra applicazione cliccando su “Build and Run”.


t070 verificare presenza connessione applicazioni iphone ipad 07

Se avete problemi con il tutorial, questo è il nostro file di progetto.

La guida è stata creata da Andrea Busi per “devAPP’, prendendo spunto dall’esempio”Reachability” di Apple.
I meriti, quindi, sono del legittimo autore e di Apple per l’esempio originale.

Share this story:
  • tweet

Tags: 3G iphoneandrea busiReachabilityTutorial PraticiWiFi iphone

Recent Posts

  • Parte il percorso programmatori iOS in Swift su devACADEMY.it

    20 Dicembre 2017 - 0 Comment
  • Android, crittografare dati velocemente con Encryption

    24 Settembre 2018 - 0 Comment
  • Sql2o, accesso immediato ai database tramite Java

    3 Settembre 2018 - 0 Comment
  • Okio, libreria per ottimizzare l’input/output in Java

    27 Agosto 2018 - 0 Comment

Related Posts

  • “Tutorial pratici per iOS SDK” si aggiorna alla versione 2.1

    10 Maggio 2012 - 1 Comment
  • Tutorial pratici per iOS SDK: disponibile la versione 2.0 aggiornata a iOS 5 e XCode 4.2

    16 Novembre 2011 - 6 Comments
  • T#096 – Facciamoci lasciare una recensione in App Store dalla nostra applicazione con Appirater

    15 Giugno 2011 - 40 Comments

Author Description

23 anni, è studente di Ingegneria Informatica presso l’Università di Bergamo (laurea Magistrale). Appassionato d’informatica sin da bambino, conosce molto bene il C++, Java e l'ObjectiveC, con cui ormai programma con successo da qualche anno. Ha già scritto un ebook “Tutorial pratici per iPhone SDK”, che ha avuto un ottimo successo, e gestisce da quasi due anni BubiDevs, un piccolo blog che ha dato l’ispirazione anche a devAPP.

14 Responses to “T#070 – Controllare le connessioni disponibili nelle nostre applicazioni iPhone”

  1. 13 Settembre 2010

    Tweets that mention Controllare le connessioni disponibili nelle nostre applicazioni iPhone | devAPP -- Topsy.com

    […] This post was mentioned on Twitter by devAPP, Bubi Devs. Bubi Devs said: T#070 – Controllare le connessioni disponibili nelle nostre applicazioni iPhone: Eccoci con un nuovo tutorial dedi… http://bit.ly/ahcLNK […]

  2. 14 Settembre 2010

    Muffa

    Vorrei farti una piccola osservazione: cosa succede se il tuo dispositivo dispone della connessione 3G/Edge ma non di quella WiFi? 🙂

    Te lo anticipo: entrambe le label mostreranno la stringa “No”, perchè la seconda chiamata al metodo check reimposterebbe anche la label che mostra lo stato del 3G.

    Comunque un’articolo decisamente utile a chi si sta avvicinando alla gestione del network. Complimenti. 😉

  3. 15 Settembre 2010

    Andrea Busi


    Muffa:

    Vorrei farti una piccola osservazione: cosa succede se il tuo dispositivo dispone della connessione 3G/Edge ma non di quella WiFi? :)

    Te lo anticipo: entrambe le label mostreranno la stringa “No”, perchè la seconda chiamata al metodo check reimposterebbe anche la label che mostra lo stato del 3G.

    Comunque un’articolo decisamente utile a chi si sta avvicinando alla gestione del network. Complimenti. ;)

    ciao, la cosa non mi risulta, perchè le due label dovrebbero essere resettate solo se non è disponibile nessuna connessione..
    domani eseguo delle prove in 3G e WiFi, così controllo se funziona correttamente 😉

  4. 16 Settembre 2010

    Spacca

    Solo una nota in merito al metodo dealloc.
    [super dealloc] e’ bene chiamarlo alla fine, no prima. (Secondo le istruzioni Apple).
    Se lo chiami prima rischi di perdere i riferimenti agli oggetti che devono essere rilasciati, il cui causa un EXC_BAD_ACCESS quando cerchi di ridurre il retain count di quelli oggetti.
    Ci sono eccezioni, ma sono rare.

  5. 1 Ottobre 2010

    Andrea Busi


    Spacca:

    Solo una nota in merito al metodo dealloc.
    [super dealloc] e’ bene chiamarlo alla fine, no prima. (Secondo le istruzioni Apple).
    Se lo chiami prima rischi di perdere i riferimenti agli oggetti che devono essere rilasciati, il cui causa un EXC_BAD_ACCESS quando cerchi di ridurre il retain count di quelli oggetti.
    Ci sono eccezioni, ma sono rare.

    hai assolutamente ragione, correggo subito 😉

    grazie della precisazione..

  6. 4 Ottobre 2010

    mat88

    Comunque ha ragione Muffa, se c’è il 3G e non c’è il WiFi il risultato è nessuna delle 2 connessioni, io ho risolto impostando (nel mio caso uso una variabile al posto delle label) a monte la variabile a “nessuna connessione” e cancellando dallo “switch” il “case NotReachable”

  7. 5 Gennaio 2011

    salvo

    ma si deve anche importare qualche framework?
    Solo caricando le classi Rechability, senza aggiungere altro, mi mostra alcuni errori (6) dicendo alla fine “symbols not found”…

  8. 5 Gennaio 2011

    salvo


    salvo:

    ma si deve anche importare qualche framework?
    Solo caricando le classi Rechability, senza aggiungere altro, mi mostra alcuni errori (6) dicendo alla fine “symbols not found”…

    trovato: mancava SystemConfiguration Framework…
    grazie

  9. 6 Gennaio 2011

    salvo

    ho fatto delle prove: se ho solo 3G (Vodafone, per la precisione) e wifi disabilitato è come se non vedesse ReachableViaWWAN.
    Cosa sbaglio?
    Se c’è wi-fi sembra tutto ok, e anche se non c’è connessione…
    ReachableViaWWAN non dovrebbe controllare anche il 3G?

  10. 6 Gennaio 2011

    salvo

    ok, dopo aver fatto varie prove da me funziona solo mettendo wifiReach prima di internetReach, altrimenti la scritta “3G on” non appare mai (come ReachableViaWWAN non venisse eseguita…)
    Quasi perfetto: manca solo di fare apparire insieme (ammesso che sia possibile) 3G on – Wifi on

    Il codice è qualcosa come:
    [code]-(IBAction) controllaConnessione {
    label3G.text = @””;
    labelWifi.text = @””;
    wifiReach = [[Reachability reachabilityForLocalWiFi] retain];
    [self check:wifiReach];
    internetReach = [[Reachability reachabilityForInternetConnection] retain];
    [self check:internetReach];
    if ((label3G.text==@””) && (labelWifi.text==@””)) {
    labelWifi.text = @”Connessione assente”;
    labelWifi.textColor = [UIColor redColor];
    }
    }

    -(void)check:(Reachability*) curReach{
    NetworkStatus netStatus = [curReach currentReachabilityStatus];

    switch (netStatus){
    case NotReachable:{
    label3G.text = @””;
    labelWifi.text = @””;
    labelWifi.textColor = [UIColor redColor];
    break;
    }
    case ReachableViaWiFi:{
    labelWifi.text = @”Wifi on”;
    labelWifi.textColor = [UIColor greenColor];
    break;
    }
    case ReachableViaWWAN:{
    label3G.text = @”3G on”;
    label3G.textColor = [UIColor greenColor];
    break;
    }

    }
    }[code]

  11. 16 Febbraio 2011

    spiazzi

    Ciao,

    vedo che alcune app a fronte della mancanza della connessione internet rimandano alla pagina di impostazione della rete.
    Come si riesce ad aprire le impostazioni?

  12. 9 Agosto 2011

    sele


    Andrea Busi:


    Muffa:

    Vorrei farti una piccola osservazione: cosa succede se il tuo dispositivo dispone della connessione 3G/Edge ma non di quella WiFi?
    Te lo anticipo: entrambe le label mostreranno la stringa “No”, perchè la seconda chiamata al metodo check reimposterebbe anche la label che mostra lo stato del 3G.
    Comunque un’articolo decisamente utile a chi si sta avvicinando alla gestione del network. Complimenti.

    ciao, la cosa non mi risulta, perchè le due label dovrebbero essere resettate solo se non è disponibile nessuna connessione..
    domani eseguo delle prove in 3G e WiFi, così controllo se funziona correttamente

    anche a me fa così… qualcuno me lo sa spiegare??

  13. 6 Settembre 2011

    Smaramba

    Ciao a tutti,
    credo di avere il vostro stesso problema, ho inserito un alert alla richiesta NotReach, ma l’alert mi esce sempre se non sono accesi contemporaneamente il Wi-Fi e il 3g….la cosa strana è che l’alert non esce se il Wifi è acceso mentre il 3g no…eppure non ho inserito nessun if.
    Qualcuno ha qualche dritta?qualche variabile?
    Grazie

  14. 7 Aprile 2013

    DevTutorial # 24 – Controllare le connessioni disponibili - Bubi Devs

    […] Leggi il tutorial completo su devAPP […]

Leave a Reply

Your email address will not be published. Required fields are marked *


*
*

Corso online di programmazione android e java

SEZIONI

  • Android
  • Comunicazioni
  • Contest
  • Corsi ed Eventi
  • Corso completo di C
  • Corso programmazione videogiochi
  • Framework
  • Grafica e Design
  • Guida rapida alla programmazione Cocoa Touch
  • Guide Teoriche
  • Guide varie
  • iPad
  • Le nostre applicazioni
  • Libri e manuali
  • Materiale OpenSource
  • News
  • Pillole di C++
  • Progetti completi
  • Risorse utili
  • Strumenti di Sviluppo
  • Swift
  • Tips & Tricks
  • Tutorial Pratici
  • Video Tutorial
  • Windows Phone

Siti Amici

  • Adrirobot
  • Allmobileworld
  • Apple Notizie
  • Apple Tribù
  • Avvocato360
  • Blog informatico 360°
  • bubi devs
  • fotogriPhone
  • GiovaTech
  • iApp-Mac
  • iOS Developer Program
  • iPodMania
  • MelaRumors
  • Meritocracy
  • SoloTablet
  • TecnoUser
  • Privacy & Cookie Policy
©2009-2018 devAPP - All Rights Reserved | Contattaci
devAPP.it è un progetto di DEVAPP S.R.L. - Web & Mobile Agency di Torino
Str. Volpiano, 54 - 10040 Leini (TO) - C.F. e P.IVA 11263180017 - REA TO1199665 - Cap. Soc. € 10.000,00 i.v.

devACADEMY.it

Vuoi imparare a programmare?

Iscriviti e accedi a TUTTI i corsi con un’unica iscrizione.
Oltre 70 corsi e migliaia di videolezioni online e in italiano a tua disposizione.

ISCRIVITI SUBITO