好的,所以我有一个应用程序需要从 SIM 卡读取数据。更准确地说,我需要运营商名称、MCC、MNC、ISO 国家代码和当前的 radio 接入技术(好吧,这不是直接来自 SIM 卡,但它是链接的)。它在每部手机上都能完美运行,但我意识到(在测试后)我在使用设置了 eSIM 的最新 iPhone 时遇到了麻烦。我不知道如何让我的应用程序读取物理 SIM 卡而不是 eSIM 卡的数据。
我试着在网上搜索了一下,但我一无所获......
let telephonyInfo: CTTelephonyNetworkInfo = CTTelephonyNetworkInfo()
carrierNetwork = telephonyInfo.serviceCurrentRadioAccessTechnology?.first?.value ?? "null"
carrierNetwork = carrierNetwork.replacingOccurrences(of: "CTRadioAccessTechnology", with: "", options: NSString.CompareOptions.literal, range: nil)
let carrier = telephonyInfo.serviceSubscriberCellularProviders?.first?.value // actually here originally I tried to use ?.values.first, but the result is the same
let countryCode = carrier?.mobileCountryCode ?? "null"
let mobileNetworkName = carrier?.mobileNetworkCode ?? "null"
let carrierName = carrier?.carrierName ?? "null"
let isoCountrycode = carrier?.isoCountryCode?.uppercased() ?? "null"
/* so the problem is that the values I get are the ones from the eSIM when it is set up. If it is not, then I get the values I want. Apparently, when the physical SIM card line is set as primary, it works. But I need that code to systematically use the physical SIM data. */
示例:
我希望[物理 SIM 卡]: 运营商名称:免费, 中冶:208, 跨国公司:15, ISO 国家代码:fr, CTRadioAccess技术:WCDMA。
但是,我得到的是 [eSIM]: 运营商名称:Swisscom, 中冶:228, 跨国公司:01, ISO 国家代码:ch, CTRadioAccess 技术:LTE。
编辑:如果您知道我如何读取两者,那对我来说也很好,我的目标是检测用户是否使用免费移动 [208 15] SIM 卡。
最佳答案
let carriers = telephonyInfo.serviceSubscriberCellularProviders?.values
将生成可选数组。浏览并检查它是否“免费”
仍然不知道如何检测 eSim 或物理
关于swift - 如何处理 serviceSubscriberCellularProviders 以仅从物理 SIM 卡而不是 eSIM 获取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54601863/