iOS如何通过安装描述文件获取设备UDID
首先,需要解释一下,iOS有一个MDM(Moblie Device Management,移动设备管理),同样可以获取设备的UDID,但比较麻烦,本文不做介绍。本博客介绍一下如何做出类似蒲公英一样获取设备UDID的功能。
1. 准备一个.mobileconfig文件,文件内容大致如下:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>PayloadContent</key>
<dict>
<key>URL</key>
<string>http://62.234.107.96:8088/app/getUuid</string>
<key>DeviceAttributes</key>
<array>
<string>UDID</string>
<string>IMEI</string>
<string>ICCID</string>
<string>VERSION</string>
<string>PRODUCT</string>
</array>
</dict>
<key>PayloadOrganization</key>
<string>www.yun-bangshou.com</string>
<key>PayloadDisplayName</key>
<string>云帮手</string>
<key>PayloadVersion</key>
<integer>1</integer>
<key>PayloadUUID</key>
<string>8C7AD0B8-3900-44DF-A52F-3C4F92921807</string>
<key>PayloadIdentifier</key>
<string>com.yun-bangshou.profile-service</string>
<key>PayloadDescription</key>
<string>该配置文件将帮助用户获取当前iOS设备的UDID号码。This temporary profile will be used to find and display your current device's UDID.</string>
<key>PayloadType</key>
<string>Profile Service</string>
</dict>
</plist>
URL
http://62.234.107.96:8088/app/getUuid
是服务端的接口,用于接收返回的UDID等数据,数据载体是一个XML结构。
DeviceAttributes
<array>
<string>UDID</string>
<string>IMEI</string>
<string>ICCID</string>
<string>VERSION</string>
<string>PRODUCT</string>
</array>
是我们想要获取的设备信息。
PayloadOrganization、PayloadDisplayName、PayloadDescription
www.yun-bangshou.com
云帮手
该配置文件将帮助用户获取当前iOS设备的UDID号码。This temporary profile will be used to find and display your current device's UDID.
会显示在描述文件的安装界面:
一般,如果仅仅是把.mobileconfig描述文件放在我们的https服务器上,然后在safari中下载该描述文件,那么上面的安装界面中会显示红色的“未签名”,那么怎么把红色的“未签名”变成绿色的“已验证”呢?
2. 对unsigned.mobileconfig进行签名:
第一步:向服务端索要https服务器证书相关的两个文件,后缀名为
.crt
.key
第二步:通过在线openssl工具把.crt和.key合成为.pem文件,网站:传送门
第三步:将.crt .key .pem文件放在同一文件夹下,类似这样:
第四步:在Mac终端cd到该路径下,执行如下命令:
openssl rsa -in ybs.key -out ybsnopass.key
此时文件夹下,会多出一个ybsnopass.key文件,然后终端再执行命令:
openssl smime -sign -in unsigned.mobileconfig -out signed.mobileconfig -signer ybs.crt -inkey ybsnopass.key -certfile ybs_ssl.pem -outform der -nodetach
此时文件夹下会多出一个signed.mobileconfig,这便是我们签名后的.mobileconfig,将签名后的描述文件放到服务器,然后在safari中下载的描述文件的安装界面就会显示绿色的“已验证”。
3. 用户点击安装描述文件时,会调用.mobileconfig中设置的URL,服务端便会收到一个XML格式的数据,类似这样:
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IMEI</key>
<string>12 123456 123456 7</string>
<key>PRODUCT</key>
<string>iPhone4,1</string>
<key>UDID</key>
<string>b59769e6c28b73b1195009d4b21cXXXXXXXXXXXX</string>
<key>VERSION</key>
<string>9B206</string>
</dict>
</plist>
然后,服务端解析这个XML就能获取到UDID了。
服务端接口代码可参考传送门