iOS 17中获取SIM卡国家码:替代已废弃serviceSubscriberCellularProviders的方法咨询
iOS 17 获取SIM卡国家码及详情的替代方案
iOS 17 目前仍无直接替代serviceSubscriberCellularProviders的公开API来获取SIM卡国家码或完整详情,但可尝试以下几种间接方式:
调用已废弃API的临时方案(不推荐长期依赖)
尽管serviceSubscriberCellularProviders在iOS 16被标记为废弃,iOS 17中仍可能暂时可用。你可以继续通过它获取CTCarrier实例,从中提取isoCountryCode。但需注意,苹果未来版本可能彻底移除该API,存在兼容性风险。示例代码:import CoreTelephony let networkInfo = CTTelephonyNetworkInfo() if let carrier = networkInfo.serviceSubscriberCellularProviders?.values.first { let simCountryCode = carrier.isoCountryCode print("SIM国家码: \(simCountryCode ?? "无法获取")") }通过蜂窝网络MCC间接推断
使用Network框架获取当前蜂窝网络的移动国家码(MCC),再通过MCC与国家码的映射关系推断出结果。这种方式仅能获取当前连接网络对应的信息,无蜂窝连接时失效,且需自行维护MCC映射表。示例代码:import Network let monitor = NWPathMonitor() monitor.pathUpdateHandler = { path in guard let cellularInterface = path.availableInterfaces.first(where: { $0.type == .cellular }), let mcc = cellularInterface.mcc else { return } let countryCode = self.mapMCCToISOCode(mcc: mcc) print("推断的国家码: \(countryCode ?? "未知")") } monitor.start(queue: DispatchQueue.global()) // 示例映射函数,需补充完整MCC对应关系 func mapMCCToISOCode(mcc: String) -> String? { let mccMap: [String: String] = [ "460": "CN", "310": "US", "234": "GB" // 更多MCC映射需自行扩展 ] return mccMap[mcc] }用户手动输入(最可靠方案)
若上述方式无法满足需求,直接请求用户手动选择或输入所在国家/地区是最稳定的方案,不受系统API限制,且数据准确性更高。
注意:所有涉及蜂窝网络的API调用,都需要在Info.plist中添加NSCellularNetworkUsageDescription权限描述,说明应用使用该权限的具体用途。
内容的提问来源于stack exchange,提问作者Ramprasath Selvam
相关产品推荐
相关产品推荐

