一 为何不App内部获取?
目前iOS系统对于设备的硬件信息UDID MAC地址等采用屏蔽策略,无法通过iOS设备安装App获取
二 如何获取设备的UDID
1连接电脑获取借助三方软件获取UDID MEI 序列号等
2 通过搭建服务安装授权证书类文件获取
三 授权文件
1 什么是授权文件
此授权文件是一iOS平台特有的以mobileconfig后缀的类似xml结构的文件,内部包含量大主要部分:连接服务端接收数据的url 和需要获取哪些设备信息声明字段
mobileconfig文件格式
2 文件格式字段简易说明(关键点,其余不用关注)
1.2.1 url
当用户安装mobileconfig文件后系统会采用POST方式向此url发送类似xml格式数据,服务端根据此数据解析获取到需要的UDID信息
1.2.2 PayloadUUID
此字段需要生成文件的时候采用随机生成
3 文件生成
文件是类似xml且大部分格式固定,只需设置url以及随机生成PayloadUUID字段
四 安装mobileconfig文件
1 App通过Safari打开文件下载连接系统即可自动是被此文件
2 打开iOS设备设置=>通过=>设备管理=>选择对应的mobileconfig文件点击安装即可
五 服务端数据接收
服务端接收数据格式大致如下接收后可解析出UDID 设备型等硬件信息
六 注意事项
1 服务端接收数据后需要通过301重定向,iOS设备会打开Safari,否则设备端验证报错
2 Content Type为:application/x-apple-aspen-config
七 关于重定向页面
重定向页面可以传递解析出的数据展示,亦可提供用户其他操作,根据实际情况处理
八 简易示例
1 需要通过mobileconfig绑定App参数(mobileconfig中无法声明参数,可将参数隐藏至url中)
① App发送数据请求获取对应mobileconfig的文件地址使用Safari打来即可
② 服务端将App数据请求参数写入mobileconfig对应的url中同时生成文件将文件地址发挥App使用
③ 使用参照说明第四步骤进行即可
④ 服务端通过拦截mobileconfig文件的url解析出App信息,将UDID与设备绑定
⑤ 假如需要App获取UDID需要根据参数中的App传递的token发送推送服务
2 只需要获取设备的UDID
此时无需做特殊处理只需提供一url用于设备POST数据即可
九 示例代码
url说明 :token 为App内部的token
:name 对应App内操作请求的人员姓名
:id 同:name说明
流程说明
1 App 发送请求包含 token username userId
2 服务端接收参数经 token username userid编辑进mobileconfig文件中的url项中,然后响应App的HTTP请求将文件地址url包含进去
3 App根据文件地址url调用Safari安装mobileconfig文件
4 具有管理权限人员完成mobilecofig操作安装
5 mobileconfig验证发送UDID+SERIAL等信息至服务端,服务端解析url+POST的数据完成数据整体接收
6 服务端结合业务存储数据和重定向操作(同时向发送请求生成mobilecofig文件的App发送推送通知【可选操作,根据需要处理】)
iOS 通过Safari下载mobileconfig进行安装
[[UIApplication sharedApplication] openURL:[NSURLURLWithString:@"http://192.168.1.100:8080/more_static/text.mobileconfig"]];
参考文件
https://developer.apple.com/business/documentation/Configuration-Profile-Reference.pdf
GitHub服务端例子与参考解释
https://github.com/shaojiankui/iOS-UDID-Safari
CSDN博主文档
https://blog.csdn.net/huxinguang_ios/article/details/89841982
说明:
1 获取方法没找到官方文档,经测试可满足需求获取设备 UDID和 SERIAL
2 接受数据没找到对应官方文档具体说明,可转换为String采用正则匹配等方式获取需要数据(此处根据实现具体自由发挥处理)
3 流程参考文中时序图以及后文CSDN链接,服务端实现可参照下文参考文献中的demo
4 mobileconfig文件格式参考CSDN链接以及demo中的文档说明
5 mobileconfig文中字段含义可参考文末PDF官方文档链接
6 接收服务接收采用HTTP协议POST