【问题标题】:How to get roaming status in IOS如何在IOS中获取漫游状态
【发布时间】:2013-07-17 06:36:17
【问题描述】:

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

【问题讨论】:

  • 请分享代码...到目前为止你尝试过吗
  • 到目前为止,我已经尝试通过跟踪 ip 地址然后调用可以给我该 ip 位置的 web 服务,但我不打算使用 web 服务。我可以使用核心电话中的移动国家代码来比较国家代码。 2)第二个限制是,我们必须依赖 SIM 来获取这些信息,这意味着一些如何从 sim 获取信息
  • @Nitin Gohel - 我已经尝试过来自这些链接的代码,但是 1.)我们不适用于越狱版本 2)我们不应该调用 Web 服务。 3) 不能使用 IP 地址。 4) 仅限公共 API

标签: ios roaming


【解决方案1】:

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

优点:适用于 VPN 以及当用户在漫游时禁用数据。 缺点:没有位置就不行。

我没有任何非版权代码给你,但是你需要的地方标记字典中你需要的国家代码的键是@"CountryCode" 地理编码类似于:-

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

提供者的国家代码是

NSString* homeCountry = [netInfo.subscriberCellularProvider isoCountryCode];

希望对你有帮助

【讨论】:

  • 但是,当我在国外时,isoCountryCode 仍然是 same 与反向地理编码国家代码...例如,如果我去德国,CoreTelephony 返回“de ",并且我的 reverseGeoCodeLocation 也返回 "de",因此我 漫游?
  • 当用户在自己的国家漫游时,这不一定有效。当靠近边界并且来自边界另一侧的小区的信号比在本国强时,可能会发生这种情况。这是一个边界案例,但应该考虑。
【解决方案2】:

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

【讨论】:

  • 这仅在通过蜂窝网络连接时有效,无需 VPN。不过,您可以使用 iOS API 检测用户是否使用 wifi/蜂窝网络,并且 ipinfo.io 响应还会指示它是否是蜂窝网络连接。
【解决方案3】:

我们以前在 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 显然会给出误报结果,因此建议您在拨打电话时确保使用蜂窝接口。

享受吧!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-10
    • 2019-11-23
    • 2014-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多