首先,需要解釋一下,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了。
服務端接口代碼可參考傳送門