Ну, после некоторого кусания и скрежещения зубов у меня это получилось, благодаря this post, this post и this post.
Я создал файл под названием UDID_request.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://kiosk.mydomain.com/setup/index.php</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>mydomain.com</string>
<key>PayloadDisplayName</key>
<string>Profile Service</string>
<key>PayloadVersion</key>
<integer>1</integer>
<key>PayloadUUID</key>
<string>9CF421B3-9853-4454-BC8A-982CBD3C907C</string>
<key>PayloadIdentifier</key>
<string>com.mydomain.kiosk.profile-service</string>
<key>PayloadDescription</key>
<string>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>
Далее я создал /setup/index.php
:
<?php
$data = file_get_contents("php://input");
file_put_contents("udidlog.txt", $data);
header('Location: http://kiosk.mydomain.com', true, 301);
?>
Далее я указал браузер Safari моего IPad к файлу .mobileconfig
я создал ранее. Он ушел в окно установки сертификата профиля. Я ударил установку, подтвердил установку неподписанного сертификата и отправил ответ на /setup/index.php
, который скопировал ответ на мой файл udidlog.txt
и затем перенаправлен на мою домашнюю страницу в киоске.
Это было непросто. Это было, по словам одного из должностей, искусно. Ответы не проходили, пока у меня не было прав на перенаправление и т. Д.
Ответа я получаю обратно перемешан с подписанием сертификата, но важная XML часть в виде обычного текста, так что я извлек XML с помощью:
function extract_xml_from_plist($data) {
$sTag = "<?xml";
$eTag = "</plist>";
$startsAt = strpos($data, $sTag);
$endsAt = strpos($data, $eTag, $startsAt) + strlen($eTag);
$result = substr($data, $startsAt, $endsAt - $startsAt);
return new SimpleXMLElement($result);
}
$xml = extract_xml_from_plist($file);
Вот 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>ICCID</key>
<string>8901 4104 2541 8901 7521</string>
<key>IMEI</key>
<string>01 266900 647352 2</string>
<key>PRODUCT</key>
<string>iPad2,2</string>
<key>UDID</key>
<string>591f30d41d0bd28597ad962491f1570ddbde4a8a</string>
<key>VERSION</key>
<string>9J2</string>
</dict>
</plist>
Теперь, используя $xml->dict->key[n]
и $xml->dict->key[n]
, я создал ассоциативный массив атрибутов устройств, возвращаемых устройство по моей просьбе. У меня теперь есть уникальный идентификатор, который всегда будет таким же для этого устройства, и я могу использовать его для создания своего рода файлов cookie для входа. Когда печенье вытирается? Просто перенаправьте и снова получите UDID! Никаких логинов, паролей, всех настроек в моей базе данных до того, как он покинет мое здание. Забавные вещи.
Что касается Android, то МДМ гораздо менее централизованно. Есть много серверов MDM, но я думаю, что более простым решением было бы использовать уже разработанную программу управления киосками, такую как SureFox, а не изобретать колесо. Хотя это точно не отвечает на мой вопрос в отношении Android UDID, он работает для моего решения, и с деньгами, которые я сэкономил бы на покупке Android-планшета вместо iPad, более чем стоит платить за несколько лицензий.
Вы управляете «устройством» (по крайней мере, в том смысле, что вы можете изменить настройки браузера)? –
Да, я установил устройство, поместил его в режим киоска и отправил его. Если возникнут какие-либо проблемы, пользователь позвонит мне. – Dexter
Какие устройства (ы) мы говорим? – VolkerK