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
Odpowiedz
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.
Jak to działa z VPN? –
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. –
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
, 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
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 –
plz udostępnij kod ... do tej pory próbowałeś – madLokesh
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