2013-07-17 18 views
6

Desidero ricevere una notifica quando accedo all'area di roaming nella mia app iOS, ho già letto la documentazione per NSLocale, SCNetworkReachability e la telefonia principale (potrebbe essermi sfuggito qualcosa). Ho bisogno di ottenere queste informazioni da sim (o in qualsiasi altro modo, se possibile).Come ottenere lo stato di roaming in IOS

+1

controllo questa domanda due http://stackoverflow.com/questions/900547/is-there-any-way-to-determi ne-if-the-iphone-is-roaming e http://stackoverflow.com/questions/12473490/is-there-any-ways-to-detect-the-roaming-status-on-ios-6 –

+0

condividi il codice ... che hai provato fino ad ora – madLokesh

+1

fino ad ora, ho provato rintracciando l'indirizzo IP e poi chiamando un servizio web che può darmi la posizione di quell'IP, ma non suppongo di usare il servizio web. Posso usare il codice del paese mobile della telefonia principale per confrontare il codice del paese. 2) la seconda limitazione è che, per queste informazioni, dobbiamo affidarci alla SIM, come ottenere informazioni dalla sim – Rana

risposta

1

Non ci sono API iOS per rilevare lo stato di roaming, ma è possibile utilizzare servizi di terze parti come http://ipinfo.io (il mio servizio) per scoprire il paese corrente del codice di vettore pari in base all'indirizzo IP del dispositivo. È quindi possibile confrontarlo con i dettagli di CTCarrier per determinare se il dispositivo è in roaming. Ecco la risposta ipinfo.io API standard:

$ curl ipinfo.io/24.32.148.1 
{ 
    "ip": "24.32.148.1", 
    "hostname": "doc-24-32-148-1.pecos.tx.cebridge.net", 
    "city": "Pecos", 
    "region": "Texas", 
    "country": "US", 
    "loc": "31.3086,-103.5892", 
    "org": "AS7018 AT&T Services, Inc.", 
    "postal": "79772" 
} 

pacchetti personalizzati sono disponibili che includono anche i dettagli MNC/mcc di indirizzi IP mobili però. Vedi http://ipinfo.io/developers per i dettagli.

+0

Come funziona con VPN? –

+0

Funzionerà solo quando ci si connette alla rete cellulare, senza VPN. È possibile rilevare se l'utente è su wifi/cellulare utilizzando le API iOS, e la risposta ipinfo.io indicherà anche se si tratta di una connessione cellulare o meno. –

2

Il metodo abituale sarebbe quello di ottenere il codice del paese del corriere dall'interfaccia di telefonia principale e quindi confrontarlo con il codice del paese dal geocoding inverso della posizione.

Vantaggi: funziona con VPN e quando l'utente ha disabilitato i dati durante il roaming. Svantaggi: non funziona senza posizione.

Non ho alcun codice non diritti d'autore per voi, ma la chiave è necessario nei marchi posto dizionario il necessario per il codice paese è @ "CountryCode" Geocoding sarebbe qualcosa di simile: -

CLGeocoder* geocoder = [[CLGeocoder alloc] init]; 
[geocoder reverseGeocodeLocation:location completionHandler: ^(NSArray* placemarks){}] 

il codice del paese per il provider sarebbe

NSString* homeCountry = [netInfo.subscriberCellularProvider isoCountryCode]; 

Spero che questo aiuti

+0

ma, quando sono all'estero, isoCountryCode è ancora lo _same_ come il countrycode di geocodelocation invertito ... quindi per esempio se vado in Germania, CoreTelephony restituisce "de", e il mio reverseGeoCodeLocation restituisce anche "de", quindi sono * non * roaming? – dOM

Problemi correlati