如何在IOS中获得漫游状态

时间:2013-07-17 06:36:17

标签: ios roaming

我想在我的iOS应用程序中进入漫游区域时收到通知,我已经阅读了NSLocaleSCNetworkReachability和核心电话的文档(我可能遗漏了一些内容)。我需要从sim(或任何其他方式)获取此信息。

3 个答案:

答案 0 :(得分:2)

通常的方法是从核心电话接口获取运营商的国家代码,然后将其与国家代码进行比较,对该位置进行反向地理编码。

优点:适用于VPN以及用户在漫游时禁用数据。 缺点:没有位置就无法工作。

我没有任何非版权代码,但您在国家代码所需的地方标记词典中需要的密钥是@“CountryCode” 地理编码类似于: -

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

提供商的国家/地区代码为

NSString* homeCountry = [netInfo.subscriberCellularProvider isoCountryCode];

希望这有帮助

答案 1 :(得分:1)

没有用于检测漫游状态的iOS API,但您可以使用http://ipinfo.io(我自己的服务)等第三方服务,根据设备的IP地址找出当前的运营商代码国家/地区。然后,您可以将其与CTCarrier详细信息进行比较,以确定设备是否正在漫游。这是标准的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"
}

可提供自定义程序包,其中还包括移动IP的mnc / mcc详细信息。有关详细信息,请参阅http://ipinfo.io/developers

答案 2 :(得分:0)

我们以前在iOS上曾经遇到过同样的问题,最终为它构建了专用的API。它通过将设备的IP地理位置(基于请求方的IP地址)与其提供的GPS位置进行比较来工作。如果检测到用户实际不在其IP地址所确定的国家/地区之内,则认为该用户正在漫游。

我们决定免费,无限制,无限制,无节制地提供此API。无需信用卡,甚至不需要帐户,只需运行一个简单查询即可:

curl -X GET --header 'Accept: application/json' 'https://api.bigdatacloud.net/data/am-i-roaming?latitude=[your latitude]&longitude=[your longitude]'  

响应非常简单,只是对还是错:

{
"isRoaming": true
}

它也非常快!我们的服务器通常会在1毫秒内响应。

如果通过VPN /代理或非蜂窝接口执行此API,显然会给出错误的肯定结果,因此建议您在进行调用时确保使用蜂窝接口。

享受!