如何在IOS中获取漫游状态

如何在IOS中获取漫游状态,ios,roaming,Ios,Roaming,当我在iOS应用程序中进入漫游区时,我想得到通知,我已经阅读了NSLocale、SCNetworkReachability和核心电话的文档(我可能错过了一些内容)。我需要从sim卡(或任何其他可能的方式)获取此信息。没有用于检测漫游状态的iOS API,但您可以使用第三方服务,如(我自己的服务),根据设备的IP地址查找当前国家或地区的运营商代码。然后,您可以将其与CTCarrier详细信息进行比较,以确定设备是否正在漫游。以下是标准的ipinfo.io API响应: $ curl ipinfo.

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

没有用于检测漫游状态的iOS API,但您可以使用第三方服务,如(我自己的服务),根据设备的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详细信息。有关详细信息,请参阅。

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

优点:适用于VPN以及用户在漫游时禁用数据的情况。 缺点:没有位置就不能工作

我没有任何非版权代码可供您使用,但您需要在place marks字典中输入国家代码的键是@“CountryCode” 地理编码类似于:-

CLGeocoder* geocoder = [[CLGeocoder alloc] init];
[geocoder reverseGeocodeLocation:location completionHandler: ^(NSArray* placemarks){}]
提供商的国家/地区代码为

NSString* homeCountry = [netInfo.subscriberCellularProvider isoCountryCode];

希望这有帮助

我们以前在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显然会给出假阳性结果,因此建议您在进行呼叫时确保使用蜂窝接口


享受吧

检查这两个问题,请分享代码…到目前为止,你有没有尝试过,我已经尝试过跟踪ip地址,然后调用一个web服务,它可以给我该ip的位置,但我不想使用web服务。我可以使用核心电话中的移动国家代码来比较国家代码。2) 第二个限制是,我们必须依赖SIM卡来获取这些信息,这意味着我们必须从SIM卡获取信息sim@NitinGohel-我已经尝试了这些链接中的代码,但是1)我们不为越狱版本工作2)我们不应该调用web服务。3) 无法使用ip地址。4) 只有公共APIs此功能仅在通过蜂窝网络连接时有效,无需VPN。不过,您可以使用iOS API检测用户是否使用wifi/cellular,并且ipinfo.io响应还将指示它是否是蜂窝连接。但是,当我在国外时,IsCountryCode仍然与反向地理编码countrycode相同。。。例如,如果我去德国,CoreTephonery返回“de”,我的reverseGeoCodeLocation也返回“de”,因此我没有漫游?当用户在自己的国家漫游时,这不一定有效。这可能发生在边境附近,而边境另一侧的牢房发出的信号比母国强。这是一个边境案件,但应该予以考虑。