本文基于在线安装profile来实现获取udid
演示:用safari浏览器打开
演示链接: 获取ios设备udid
通过苹果safari浏览器获取ios设备udid步骤
1、在你的web服务器上创建一个.mobileconfig的xml格式的描述文件;
2、用户在所有操作之前必须通过某个点击操作完成.mobileconfig描述文件的安装;
3、服务器需要的数据,比如:udid,需要在.mobileconfig描述文件中配置好,以及服务器接收数据的url地址(此地址必须为https);
4、当用户设备完成数据的手机后,返回提示给客户端用户;
.mobileconfig
payloadcontent
url
https://ex.eyunzhu.com/jfq/getudid/receive.php
deviceattributes
udid
imei
iccid
version
product
payloadorganization
eyunzhu.com
payloaddisplayname
查询设备udid
payloadversion
1
payloaduuid
3c4dc7d2-e475-3375-489c-0bb8d737a653
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大体上两种方法 :
- .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;
ios设备安装.mobileconfig描述文件
新建一个用于下载mobileconfig的网页,这里我命名为index.php
获取您的udid
udid
获取udid
udid 是一种 ios 设备的特殊识别码。除序号之外,每台 ios 装置都另有一组独一无二的号码,我们就称之为识别码( unique device identifier, udid )。就像我们的身份证一样。开发者需要知道你的 udid,才可以让你的手机安装访问测试中的应用,就像需要你的身份证才可以让你登机一样 :)
服务器接收返回数据并显示
使用xml等解析库解析数据后,直接把需要的udid等设备信息传到显示页面即可
';
$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);
?>
此时访问index.php页面即可
对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
udid
提交评论