2013-07-17 10 views
6

Chcę otrzymywać powiadomienia, gdy wchodzę w obszar roamingowy w mojej aplikacji na iOS, przeczytałem już dokumentację dla NSLocale, SCNetworkReachability oraz telefonię rdzeniową (być może coś przeoczyłem). Potrzebuję uzyskać te informacje z sim (lub w jakikolwiek inny sposób, jeśli to możliwe).Jak uzyskać status roamingu w IOS

+1

to sprawdzić dwa pytanie http://stackoverflow.com/questions/900547/is-there-any-way-to-determi ne-if-the-iphone-is-roaming i http://stackoverflow.com/questions/12473490/is-there-any-ways-to-detect-the-roaming-status-on-ios-6 –

+0

plz udostępnij kod ... do tej pory próbowałeś – madLokesh

+1

do tej pory próbowałem przez śledzenie adresu ip, a następnie wywołanie usługi internetowej, która może dać mi lokalizację tego IP, ale nie mam zamiaru korzystać z usługi internetowej. Mogę użyć kodu kraju mobilnego z podstawowej telefonii, aby porównać kod kraju. 2) drugim ograniczeniem jest to, że musimy polegać na SIM dla tych informacji, czyli jak uzyskać informacje z sim – Rana

Odpowiedz

1

Nie ma interfejsu API systemu iOS do wykrywania statusu roamingu, ale można skorzystać z usług stron trzecich, takich jak http://ipinfo.io (moja własna usługa), aby znaleźć aktualny kraj o kodzie przewoźnika na podstawie adresu IP urządzenia. Następnie możesz porównać to z danymi CTCarrier, aby określić, czy urządzenie korzysta z roamingu. Oto średnia odpowiedź ipinfo.io API:

$ 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" 
} 

niestandardowe pakiety są dostępne, które obejmują również MNC/MCC szczegóły IP mobilnych choć. Aby uzyskać szczegółowe informacje, patrz http://ipinfo.io/developers.

+0

Jak to działa z VPN? –

+0

Działa to tylko podczas łączenia się przez sieć komórkową bez VPN. Możesz wykryć, czy użytkownik korzysta z Wi-Fi/Cellular przy użyciu interfejsów API iOS, a odpowiedź ipinfo.io będzie również wskazywać, czy jest to połączenie komórkowe, czy nie. –

2

Zazwyczaj metoda polega na uzyskaniu kodu kraju przewoźnika z podstawowego interfejsu telefonicznego, a następnie porównanie go z kodem kraju z odwrotnego geokodowania lokalizacji.

Zalety: działa z VPN i gdy użytkownik wyłączył dane podczas roamingu. Wady: nie działa bez lokalizacji.

nie mam żadnego kodu non-autorskich dla ciebie, ale klucz trzeba w Marks Place słownika trzeba dla kodu kraju jest @ „CountryCode” Geocoding byłoby coś jak: -

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

Kod kraju dla dostawcy byłoby

NSString* homeCountry = [netInfo.subscriberCellularProvider isoCountryCode]; 

Nadzieja to pomaga

+0

, ale gdy jestem za granicą, kod isoCountryC wciąż jest _same_ jako odwrotny kod countrycode ... więc na przykład jeśli idę do Niemiec, CoreTelephony zwraca "de", a moje reverseGeoCodeLocation również zwraca "de", więc jestem * nie * roaming? – dOM

Powiązane problemy