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了。

服務端接口代碼可參考傳送門

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章