通过Safari与mobileconfig获取iOS设备UDID(设备唯一标识符)
本文基于在线安装Profile来实现获取UDID。
先看下效果,真机打开
科普
UDID
U D I D (Unique Device Identifier),唯一标示符,是iOS设备的一个唯一识别码,每台iOS设备都有一个独一无二的编码,UDID其实也是在设备量产的时候,生成随机的UUID写入到iOS设备硬件或者某一块存储器中,所以变成了固定的完全不会改变的一个标识,用来区别每一个唯一的iOS设备,包括 iPhones, iPads, 以及 iPod touches
随着苹果对程序内获取UDID封杀的越来越严格,私有api已经获取不到UDID,Mac地址等信息,继而出现了使用钥匙串配合uuid等等方法变相实现
由于近期项目需求是设备授权的形式使用软件,使用钥匙串等方法不完全能解决问题,因为重置或重做系统都会清除uuid然后重新存入,所以想到了用safari的方式获取设备真实的UDID
MDM
iOS支持企业级的MDM(Mobile Device Managment),也就是所谓的移动设备管理,目的就是让企业能够方便的管理 iPhone、Pad等移动设备。具体的做法是通过在系统中安装配置文件(Profiles)的方式实现各种功能,设备管理,设备安全,获取设备信息,设备配置,备份和恢复等几类功能,可以根据不同应用场景实现很多具体小功能。
Over-the-Air Profile Delivery and Configuration
一个配置的profile描述文件允许你基于iOS设备发布配置信息,如果你需要配置大量设备的邮件设置,网络设置,或者设备的证书,配置文件可以轻松完成。
iOS配置描述文件包含选多可以指定的设置,包括:
Passcode policies 密码策略
Restrictions on device features (disabling the camera, for example) 设备特性限制(例如摄像头)
Wi-Fi settings WIFI设置
VPN settings VPN设置
Email server settings 邮件服务器设置
Exchange settings Exchange设置
LDAP directory service settings LDAP目录服务设置
CalDAV calendar service settings CalDAV日历服务设置
Web clips 桌面快捷方式
Credentials and keys 凭证和密钥
Advanced cellular network settings 高级蜂窝网络设置
一、通过苹果Safari浏览器获取iOS设备UDID步骤
苹果公司允许开发者通过iOS设备和Web服务器之间的某个操作(其实就是MDM的获取设备信息功能),来获得IOS设备的UDID(包括其他的一些参数)。以下为简要概述:
1、在你的Web服务器上创建一个.mobileconfig的XML格式的描述文件;
2、用户在所有操作之前必须通过某个点击操作完成.mobileconfig描述文件的安装;
3、服务器需要的数据,比如:UDID,需要在.mobileconfig描述文件中配置好,以及服务器接收数据的URL地址;
4、当用户设备完成数据的手机后,返回提示给客户端用户;
ota开发流程图
二、.mobileconifg
在这篇文章中,主要讲如何获得标识符。其实还可以获取更多信息,以下是一个获得UDID示例.mobileconfig配置
Objective-C
PayloadContent
URL
/udid/receive.php
DeviceAttributes
UDID
IMEI
ICCID
VERSION
PRODUCT
PayloadOrganization
PayloadDisplayName
查询设备UDID
PayloadVersion
1
PayloadUUID
3C4DC7D2-E475-3375-489C-0BB8D737A653
PayloadIdentifier
dev.skyfox.profile-service
PayloadDescription
本文件仅用来获取设备ID
PayloadType
Profile Service
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
-//Apple//DTD PLIST 1.0//EN""/DTDs/PropertyList-1.0.dtd">
PayloadContent
URL
/udid/receive.php
DeviceAttributes
UDID
IMEI
ICCID
VERSION
PRODUCT
PayloadOrganization
PayloadDisplayName
查询设备UDID
PayloadVersion
1
PayloadUUID
3C4DC7D2-E475-3375-489C-0BB8D737A653
PayloadIdentifier
dev.skyfox.profile-service
PayloadDescription
本文件仅用来获取设备ID
PayloadType
ProfileService
你需要填写回调数据的URL和PayloadUUID。该PayloadUUID仅仅是随机生成的唯一字符串,类似bundleid,一般是域名倒置,用来标识唯一。
iOS12 mobileconfig中的URL要用https地址(例如 /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增加如下配置
Shell
AddType application/x-apple-aspen-config .mobileconfig
1
2
3
AddTypeapplication/x-apple-aspen-config.mobileconfig
2.php等动态语言直接设置
PHP
header('Content-type: application/x-apple-aspen-config; chatset=utf-8');
header('Content-Disposition: attachment; filename="company.mobileconfig"');
echo $mobileconfig;
1
2
3
header('Content-type: application/x-apple-aspen-config; chatset=utf-8');
header('Content-Disposition: attachment; filename="company.mobileconfig"');
echo$mobileconfig;
三、iOS设备安装.mobileconfig描述文件
新建一个用于下载mobileconfig的网页,这里我命名为udid.php
Objective-C
获取您的UDID
UUDI:
1.点击获取您的UDID
2.验证ipa
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
获取您的UDID
UUDI:
1.点击获取您的UDID
2.验证ipa