2014-10-14 17 views
8

Sebbene la mia app sia utilizzabile senza alcuna connessione Internet, potrebbe scambiare dati con un server web (per mostrare alcune statistiche degli utenti). Quindi pubblicizzo l'app come "non ha bisogno di connessione internet". Alcuni utenti hanno successivamente disattivato i dati cellulari per la mia app, che dovrebbe essere completamente soddisfacente. Ma quando la mia app cerca di scambiare dati, questi utenti sono infettati da "I dati cellulari sono disattivati ​​per [Nome app]". dialogo.Come sapere se l'utente ha disattivato i dati della cella per la mia app?

Questo è un fastidio per loro e voglio impedire queste finestre di dialogo e saltare semplicemente l'intera cosa di scambio di dati.

C'è Apple's Reachability Sample Code.

Tuttavia, anche se ho disattivato la connessione Wi-Fi per l'intero dispositivo e i dati della rete per l'app, Reachability conferma una connessione Internet positiva. Per essere più precisi, si riferisce

Reachability Flag Status: WR t------ networkStatusForFlags 

non importa se ho attivato dati cellulare o meno. Ovviamente, quando i dati della rete cellulare sono disattivati, nessuna connessione Internet è effettivamente disponibile, quindi lo scambio di dati fallisce. Ma l'utente viene comunque presentato con la finestra di dialogo dei dati cellulari.

C'è un modo per rilevare se una connessione Internet è disponibile su iOS 7 e iOS 8, tenendo conto delle impostazioni dei dati cellulari per un'app specifica - il tutto senza bugging l'utente ogni volta di nuovo con la finestra di dialogo dati cellulare?

La mia app al momento non ha alcun pannello delle impostazioni, quindi voglio evitare di impostare uno (secondo, in-app) interruttore "non utilizzare dati cellulare". Inoltre, non voglio limitare lo scambio di dati a una connessione WiFi poiché è solo un 2 KB di dati per sessione che non è una grande cosa per la maggior parte degli utenti.

risposta

2

Penso che l'unico modo supportato in iOS8 sia quello di inviare un ping a un server noto e infettare l'utente con il pannello di avviso alcune volte. Su iOS8, Apple visualizza il pannello solo due volte, quindi salta anche se l'app viene riavviata, forse verrà visualizzata un giorno dopo di nuovo. (Questa è davvero una cattiva notizia per le applicazioni ad-supported.)

Apple dice (https://devforums.apple.com/message/1059332#1059332):

Un altro sviluppatore ha scritto per DTS e quindi ho avuto la possibilità di indagare questo in profondità. Ahimè, la notizia è molto come mi aspettavo: non esiste un modo supportato per rilevare che la tua app si trova in questo stato. Né esiste un modo per effettuare una connessione di rete "nessuna interazione utente", ovvero richiedere la mancata connessione anziché l'interfaccia utente presente come .

I seguenti articoli suggeriscono modi di usare Ping:

http://www.splinter.com.au/how-to-ping-a-server-in-objective-c-iphone/

http://elbsolutions.com/projects/reachability-with-simpleping-wrapper/

0

Provare a utilizzare questa git project.

Come installare è possibile vedere all'interno del Leggimi git. Ho anche utilizzato dispatch_once per assicurarmi che la Raggiungibilità venga inizializzata solo una volta. Questo tipo dispatch è talvolta molto utile!

Definire variabile nella classe

BOOL _online = NO; 

inizializzare la variabile

static dispatch_once_t predicate; 
    dispatch_once(&predicate, ^{ 
     Reachability *reach = 
      [Reachability reachabilityWithHostname:gameApiHost]; 
     reach.reachableBlock = ^(Reachability*reach) { 
      NSLog(@"REACHABLE!"); _online = YES; 
     }; 
     reach.unreachableBlock = ^(Reachability*reach) { 
      NSLog(@"UNREACHABLE!"); _online = NO; 
     }; 
     [reach startNotifier]; 
    }); 
+2

raggiungibilità non funziona, si segnala in modo errato "raggiungibile". – cat

Problemi correlati