2009-02-27 18 views
39

Sto lavorando a un'applicazione iPhone che effettua alcune chiamate ai servizi Web. Ho postato questa applicazione su Apple Store ma è stata rifiutata (e giustamente) poiché non è stato visualizzato alcun messaggio di errore per l'utente se non è disponibile alcuna connessione Internet. Poiché ovviamente l'applicazione non funzionerebbe senza di essa.Rilevazione connessione Internet SDK iPhone

Quindi volevo solo sapere come ottenerlo al meglio? Sto indovinando che qualcosa deve andare nel metodo viewDidLoad che getterà una finestra di avviso che dice qualcosa come "È necessaria una connessione Internet per utilizzare questa applicazione".

Qualsiasi idea sarebbe apprezzata.

risposta

48

Se l'applicazione deve disporre dell'accesso alla rete, il modo più semplice è aggiungere le seguenti impostazioni a info.plist come valori booleani.

  • SBUsesNetwork - Assicurarsi che il dispositivo è dotato di una connessione attiva :
  • UIRequiresPersistentWiFi - (Modifica non applicabile, questo sembra essere un qualcuno API privato trovati ad un certo punto non è nella documentazione per sviluppatori di Apple..) Assicura che il dispositivo sia connesso via WiFi

Se la scelta non è vera, all'utente verrà presentato un messaggio appropriato all'avvio dell'applicazione. Meglio di tutto questo messaggio è dal sistema operativo e quindi è localizzato.

Se l'applicazione non è in grado di scaricare dati da un sito Web mentre è in esecuzione (perdita di segnale, sito inattivo), si dovrebbe comunque avvertire l'utente e non limitarsi a girare indefinitamente.

+0

Grande consiglio, grazie! –

+0

eccellente. Grazie. – givp

+1

Devi assegnare un valore a "SBUsesNetwork" o semplicemente aggiungerlo come chiave? Non riesco a trovare alcuna documentazione su di esso nell'SDK di iPhone o nel sito di supporto per gli sviluppatori Apple :-( –

28

Apple Developer Connection ha un'applicazione di esempio (Reachability) che utilizza il framework di configurazione del sistema per determinare lo stato della rete. Ti dirà se hai una connessione WiFi, EDGE/3G o nessuna connessione Internet.

Si useranno porzioni di questo codice nell'applicazione per determinare lo stato della rete e quindi fornire i segnali dell'interfaccia se non è disponibile alcuna connessione, ad esempio UIAlertView.

+0

Grande. Ci proveremo. Grazie – givp

+2

Ho fatto una nota su Raggiungibilità qui: http://stackoverflow.com/questions/181485/determining-when-an-edge-connection-comes-back-after-a-dropout-on-an-iphone –

+1

C'è un bella rielaborazione del campione di Raggiungibilità di Apple qui: http://blog.ddg.com/?p=24 È progettato per essere un drop-in like-for-like. Si è preso cura di esso (molto più di Apple) e ho usato con successo la sua implementazione di Reachability senza problemi. Si noti che se si utilizza la libreria ASIHTTP, la riscrittura Raggiungibilità sopracitata viene fornita come parte di ciò. – occulus

4

Parola di avvertenza: fare attenzione a SBUsesNetwork. Personalmente mi piacerebbe sapere da dove provenisse SBUsNetwork, perché non è menzionato da nessuna parte nei documenti di Apple che posso trovare. Quando aggiungo la chiave al plist della mia app (come booleano) e impostata su true, non sembra influire sul comportamento della mia app: non ricevo alcun avviso sulla modalità aereo, sia che avvii l'app completamente da zero, sia che in primo piano una lancio precedente che era in background.

La mia app ha UIRequiresPersistentWifi impostato su true, che sembra fare anche il lavoro che le persone sostengono che SBUsesNetwork faccia (oltre ad altre cose!).

(utilizzo iOS4.2.1 su un iPhone 4, XCode 3.2.5 64 bit).

+0

Ah, questo è interessante: http://blogs.oreilly.com/iphone/2008/11/hunting-down-infoplist-prefere.html - il ragazzo ha trovato SBUsesNetwork da roba di ingegneria reverese. Quella chiave SBUsesNetwork potrebbe effettivamente essere una cosa API privata che non è destinata al consumo pubblico? – occulus

+0

Ah, OK, penso di averlo rotto adesso. UIRequiresPersistentWifi * fa * il lavoro che le persone sostengono che SBUsesNetwork - vale a dire avverte sulla modalità aereo - ma devi capire che ricevi una sola volta l'avviso di modalità aereo per un'applicazione durante un'attivazione della modalità aereo - anche se uccidi e rilanciare un'app, se prima eri già avvisato sulla modalità aereo (e sei ancora in modalità aereo), non ti avviserà più. Quindi, per riassumere: SBUsesNetwork sembra una falsa pista, ignorala. (Se qualcuno può indicarmi i documenti per SBUsesNetwork, per favore.) – occulus