iOS 16中CTCarrier已弃用,如何获取MCC/MNC等运营商信息?
iOS 16 后获取运营商信息(MCC/MNC/ISO代码)的替代方案
官方推荐的替代API
iOS 16 弃用CTCarrier后,苹果推荐使用CoreTelephony框架下的CTTelephonyNetworkInfo结合CTServiceSubscriberCellularProvider来获取所需的运营商信息,包括MCC、MNC和ISO国家代码。
具体实现代码示例如下:
import CoreTelephony let networkInfo = CTTelephonyNetworkInfo() // 获取所有蜂窝服务的运营商信息(适配多SIM卡设备) if let cellularProviders = networkInfo.serviceSubscriberCellularProviders { for (serviceIdentifier, provider) in cellularProviders { // 读取MCC(移动国家代码) if let mcc = provider.mobileCountryCode { // 业务逻辑处理 } // 读取MNC(移动网络代码) if let mnc = provider.mobileNetworkCode { // 业务逻辑处理 } // 读取ISO国家代码 if let isoCode = provider.isoCountryCode { // 业务逻辑处理 } } }
关键注意事项
- 必须在
Info.plist中添加com.apple.developer.coretelephony.subscribercellularprovider权限,并在App审核时明确说明使用场景(如诈骗检测、地区/运营商登录限制),否则无法获取到数据。 - 如果设备支持多SIM卡,
serviceSubscriberCellularProviders会返回多个运营商实例,需要根据业务需求选择对应的服务(比如主卡)。
关于弃用原因的推测
苹果并未在WWDC视频中专门解释CTCarrier的弃用原因,但结合近年隐私保护的趋势来看,核心原因应该是强化用户隐私管控——旧API的信息获取门槛较低,容易被过度收集;新API则通过权限限制,确保只有具备合理业务需求的App才能获取这类敏感信息。
业务场景适配建议
针对你提到的诈骗检测、地区/运营商登录限制场景,给出几点适配建议:
- 权限申请时,务必向用户清晰说明获取运营商信息的具体用途,符合苹果隐私合规要求。
- 做好异常处理:如果用户拒绝权限、设备无蜂窝网络或无法获取信息,需要准备 fallback 方案,比如通过手机号归属地辅助判断,或引导用户手动选择地区/运营商。
- 测试多SIM卡设备的业务逻辑,避免因多个运营商信息导致判断错误。
内容的提问来源于stack exchange,提问作者daredevil1234
相关产品推荐
相关产品推荐

