核心电话 CTCarrier 和 isoCountryCode。如何获取用户当前的手机运营商所在国家/地区?

Core telephony CTCarrier and isoCountryCode. How to get user's current cellular provider's country?

我想在不询问位置的情况下获取用户当前所在的国家/地区。所以我想用CTCarrierclass属性isoCountryCode。要访问 CTCarrier,我正在使用 serviceSubscriberCellularProviders,其中 returns “包含有关每项服务的运营商信息的字典”https://developer.apple.com/documentation/coretelephony/cttelephonynetworkinfo/3024511-servicesubscribercellularprovide.

现在,当我查询 serviceSubscriberCellularProviders 时,它 return 有 2 个对象 - nil 并且大概是我的家庭蜂窝服务提供商。

          let networkInfo = CTTelephonyNetworkInfo()
          let dictionary = networkInfo.serviceSubscriberCellularProviders;
          for (type, value) in dictionary ?? [:] {
              let country:String? = value.isoCountryCode == nil ? "nil" : value.isoCountryCode;
              print("serviceSubscriberCellularProviders: "+country!)
          }

如果我在国外并连接到漫游服务提供商,我是否仍会得到两个对象 - 家和现在而不是 nil - 漫游服务提供商?在漫游服务提供商内部 属性 isoCountryCode 会 return 漫游服务提供商的实际国家吗?

文档让我感到困惑... isoCountryCode 对于家庭移动服务提供商来说究竟是什么?假设我住在法国,我的服务提供商当然来自法国 - isoCountryCode 会 return "FR"。现在,如果我去德国度假 - isoCountryCode 现在 return 会怎么样?还是一样 "FR" 还是 "DE"?

如文档所述:

Note

In this context, the “home” provider is the one with which the user has a cellular plan, as opposed to a roaming provider.

因此,如果您的家庭提供商在法国,您将始终获得 FR,即使在漫游时也是如此。

之所以有两个可能的值,是因为 iPhone 现在最多支持两个 SIM 卡;一个实体的和一个 e-SIM,因此 phone 上可能有两个不同的蜂窝提供商。