iOS应用如何从MDM服务器获取IMEI等设备信息?
MDM向自研iOS应用同步设备信息的实现方案
底层机制说明
你提到的MDM推送字典数据到应用NSUserDefaults的能力,是苹果官方原生提供的*托管应用配置(Managed App Configuration)*特性,属于iOS MDM协议的标准能力,无需依赖私有API或越狱即可实现。
具体实现逻辑如下:
- 首先将你的自研iOS应用设置为MDM托管应用:可通过MDM的
InstallApplication命令直接推送安装应用,或用户手动安装后,由MDM下发管理命令将应用转为托管状态 - MDM服务器完成设备注册、采集到IMEI等设备信息后,构造自定义字典配置,通过MDM协议的
InstallConfiguration命令将配置推送到对应设备 - 设备收到配置命令后,系统会自动将字典内容写入目标应用NSUserDefaults的固定特殊键
com.apple.configuration.managed下,无需应用做任何额外的接收逻辑
应用侧读取数据示例
Swift 代码
// 读取MDM推送的托管配置 if let managedConfig = UserDefaults.standard.dictionary(forKey: "com.apple.configuration.managed") { let deviceImei = managedConfig["imei"] as? String // 业务逻辑使用imei值 } // 可选:监听配置更新通知,实时获取MDM推送的最新数据 NotificationCenter.default.addObserver( forName: UserDefaults.didChangeNotification, object: nil, queue: .main ) { _ in // 重新读取com.apple.configuration.managed即可拿到最新配置 }
Objective-C 代码
// 读取托管配置 NSDictionary *managedConfig = [[NSUserDefaults standardUserDefaults] dictionaryForKey:@"com.apple.configuration.managed"]; NSString *deviceImei = managedConfig[@"imei"]; // 监听配置更新通知 [[NSNotificationCenter defaultCenter] addObserverForName:NSUserDefaultsDidChangeNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification * _Nonnull note) { // 重新读取配置 }];
注意事项
- 只有被MDM托管的应用可以读取到
com.apple.configuration.managed键的内容,未托管的应用读取该键会返回nil - 该能力完全合规,通过此方式获取IMEI等设备信息不会触发App Store的隐私规则校验
- 如需应用向MDM回传数据,可将需要回传的内容写入NSUserDefaults的
com.apple.feedback.managed键,MDM服务器可主动拉取该键的内容
内容的提问来源于stack exchange,提问作者Inyouchange
相关产品推荐
相关产品推荐

