iOS通过safari浏览器获取UDID(总结,已实现)

1.整体思路:
a.在你的Web服务器上创建一个.mobileconfig的XML格式的描述文件
b.用户点击按钮完成.mobileconfig描述文件的安装 操作
c.服务器需要的数据,比如:UDID,需要在.mobileconfig描述文件中配置好,以及服务器接收数据的URL地址(此地址必须为https)
d.当用户设备完成数据的手机后,返回提示给客户端用户

2..mobileconfig文件的内容




    
        PayloadContent
        
            URL
            https://xxxx.xxx.com/receive.php
            DeviceAttributes
            
                UDID
                IMEI
                ICCID
                VERSION
                PRODUCT
            
        
        PayloadOrganization
        eyunzhu.com
        PayloadDisplayName
        查询设备UDID
        PayloadVersion
        1
        PayloadUUID
        3C4DC7D2-E475-7533-489C-0BB8D373A653
        PayloadIdentifier
        dev.skyfox.profile-service
        PayloadDescription
        本文件仅用来获取设备ID
        PayloadType
        Profile Service
    

注意事项:
你需要填写回调数据的URL和PayloadUUID。该PayloadUUID仅仅是随机生成的唯一字符串,类似bundleid,一般是域名倒置,用来标识唯一。
iOS12 mobileconfig中的URL要用https地址(例如 https://dev.skyfox.org/udid/receive.php)。否者会报ATS错误。
注意:mobileconfig下载时设置文件内容类型Content Type为:application/x-apple-aspen-config 否则可能不能下载
当访问mobileconfig文件不能直接下载时 就需要设置mime content type了,application/x-apple-aspen-config
设置content type大体上两种方法 :
1.htaccess增加如下配置


        AddType application/x-apple-aspen-config .mobileconfig

2.php等动态语言直接设置

header('Content-type: application/x-apple-aspen-config; chatset=utf-8');
header('Content-Disposition: attachment; filename="company.mobileconfig"');
echo $mobileconfig;

3.本人参考的首页内容如下(index.php):







 
 

获取您的UDID









获取UDID 拷贝UDID

UDID 是一种 iOS 设备的特殊识别码。除序号之外,每台 iOS 装置都另有一组独一无二的号码,我们就称之为识别码( Unique Device Identifier, UDID )。就像我们的身份证一样。开发者需要知道你的 UDID,才可以让你的手机安装访问测试中的应用,就像需要你的身份证才可以让你登机一样 :)


4.服务端的receive.php文件内容如下

';
$pos1 = strpos($data, $plistBegin);
$pos2 = strpos($data, $plistEnd);
$data2 = substr($data, $pos1, $pos2 - $pos1);
$xml = xml_parser_create();
xml_parse_into_struct($xml, $data2, $vs);
xml_parser_free($xml);
$UDID = "";
$CHALLENGE = "";
$DEVICE_NAME = "";
$DEVICE_PRODUCT = "";
$DEVICE_VERSION = "";
$iterator = 0;
$arrayCleaned = array();
foreach ($vs as $v) {
    if ($v['level'] == 3 && $v['type'] == 'complete') {
        $arrayCleaned[] = $v;
    }
    $iterator++;
}
$data = "";
$iterator = 0;
foreach ($arrayCleaned as $elem) {
    $data.= "\n==" . $elem['tag'] . " -> " . $elem['value'] . "
"; switch ($elem['value']) { case "CHALLENGE": $CHALLENGE = $arrayCleaned[$iterator + 1]['value']; break; case "DEVICE_NAME": $DEVICE_NAME = $arrayCleaned[$iterator + 1]['value']; break; case "PRODUCT": $DEVICE_PRODUCT = $arrayCleaned[$iterator + 1]['value']; break; case "UDID": $UDID = $arrayCleaned[$iterator + 1]['value']; break; case "VERSION": $DEVICE_VERSION = $arrayCleaned[$iterator + 1]['value']; break; } $iterator++; } $params = "UDID=" . $UDID . "&CHALLENGE=" . $CHALLENGE . "&DEVICE_NAME=" . $DEVICE_NAME . "&DEVICE_PR ODUCT=" . $DEVICE_PRODUCT . "&DEVICE_VERSION=" . $DEVICE_VERSION; //header("Location: http://dev.skyfox.org/udid?data=".rawurlencode($params)); **header('HTTP/1.1 301 Moved Permanently'); // 很重要不能删** **header("Location: https://ex.eyunzhu.com/jfq/getUDID/?" . $params); // 很重要不能删 (重定向页面是否只能是请求页面?)** ?>

以下内容未实践,暂且记录下来

对mobileconfig文件进行签名
安装描述文件时,会提醒描述文件未签名,mobileconfig 签名有几种方法,这里使用SSL证书对IOS描述文件mobileconfig的签名认证

重命名证书密钥文件名(Apache SSL证书文件)如下:

server.crt (证书)
ca.crt(root_bundle证书)
server.key (密钥)
命令行进行签名

openssl smime -sign -in uuid.mobileconfig -out signed.mobileconfig -signer server.crt -inkey server.key  -certfile ca.crt -outform der -nodetach

PS:问题描述:
a.一直报 “无效的描述文件”
原因:
1..mobileconfig文件里面配置的URL链接必须是https的
2.服务器的301 重定向必须要写, 而且只能重定向回请求页面(就算服务器的301不写,也是可以正常收到数据的)
b..mobileconfig无法下载,路径配置的是正确的(本人将.mobileconfig文件放在本地没有遇到该问题,但是放到服务器就遇到该问题,打算采用这两种方式来修改,后续更新结果)
当访问mobileconfig文件不能直接下载时 就需要设置mime content type了,application/x-apple-aspen-config
设置content type大体上两种方法 :
1.htaccess增加如下配置


                    AddType application/x-apple-aspen-config .mobileconfig
              

2.php等动态语言直接设置

header('Content-type: application/x-apple-aspen-config; chatset=utf-8');
            header('Content-Disposition: attachment; filename="company.mobileconfig"');
            echo $mobileconfig;

基本参考,感谢:获取UDID

你可能感兴趣的:(iOS通过safari浏览器获取UDID(总结,已实现))