Получение UDID устройства из .mobileconfig
Я пытаюсь написать функцию, похожую на http://whatismyudid.com/, которая затем будет одобрена, вернет UDID пользователей и сохранит их в базе данных для дальнейшего использования с этим пользователем.
Я написал dm файл .mobileconfig xml, который открывается в установщике профиля просто отлично, но когда я говорю ему, чтобы установить профиль, который он отвечает с помощью [alert] Invalid Profile
, но без тела предупреждения. Без описания, без кода, без помощи.
Я новичок в игре для мобильных устройств, поэтому любая помощь будет волновать меня.
Вот мой файл конфигурации:
<?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://apps.mortlabs.com/device/retrieve.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>MortLabs.com</string>
<key>PayloadDisplayName</key>
<string>Profile Service</string>
<key>PayloadVersion</key>
<integer>1</integer>
<key>PayloadUUID</key>
<string>B958E359-34C2-42F4-BD0C-C985E6D5376B</string>
<key>PayloadIdentifier</key>
<string>com.mortlabs.profile-service</string>
<key>PayloadDescription</key>
<string>This temporary profile will be used to find and display your current device UDID.</string>
<key>PayloadType</key>
<string>Profile Service</string>
</dict>
</plist>
Профиль инициализируется путем перехода на http://apps.mortlabs.com/device/enroll.php с помощью мобильного сафари
Ответы
Ответ 1
Я обнаружил, что, используя вышеизложенное, с Apache обсуждался Ipad/Iphone - сообщение Kyle2011 на https://discussions.apple.com/thread/3089948?start=0&tstart=0 заполнено в остальной части решения.
В основном внизу страницы retrieve.php вам необходимо перенаправить браузер в каталог, используя строку, похожую на следующую: -
header("Location: https://www.example.com/enrolment?params={$params}");
Где регистрация является каталогом - это вызывает DirectoryIndex (обычно index.php), который затем может отображать информацию для вашего пользователя.
Чтобы заполнить переменную $params, вам понадобится следующая строка вверху вашего файла retrieve.PHP скрипт
$data = file_get_contents('php://input');
Затем вы можете разобрать строку данных $, чтобы получить то, что вам нужно (пример file_put_contents("data.txt", $data);
или пример Kyle2011)
Я также изменил UDID полезной нагрузки на что-то другое, используя udidgen
в терминале на Mac, а не просто используя whatismyudid.com.
Обновление: с iOS 7.1 некоторые файлы (.plist IIRC) должны быть переданы по https://- они не смогут установить, если все обслуживается через http://- возможно, лучше всего обслуживать все, включая .ipa над https://для обеспечения будущих изменений на стороне Apple не вызывает проблем.
Ответ 2
Обратите внимание на последнюю страницу (FOLDER).
Если вы хотите использовать страницу script для окончательного перенаправления вместо папки.
вы можете изменить это:
заголовок ( "Location: https://www.example.com/enrolment?params= {$ params}" );
заголовок ( "Location: https://www.example.com/enrolment.php?params= {$ params}", true, 301);
Источник: функция заголовка в руководстве php.net
он работает!
Ответ 3
Попробуйте настроить URL-адрес на адрес без расширения .php. Это решило проблему для меня.
Теперь моя единственная проблема заключается в том, что я не могу узнать, как получить данные, отправленные с устройства iOS на мой сервер.
Кажется, он не находится в переменной $_POST.
Ответ 4
Ошибка, которую вы получаете, заключается в том, что iOS ожидает, что ваш URL-адрес службы профилей (тот, для которого он отправляет свой UDID), возвращает профиль конфигурации (т.е. файл .mobileconfig
). В настоящее время я захватываю UDID устройства без возврата этого профиля; мои устройства генерируют оповещение, которое вы описываете, но данные находятся на моем сервере.
Для справки, здесь (очень) простой PHP файл, который я использую для захвата данных:
<?php
// set file to write
$file = 'device_data/data.p7s';
$fp = fopen($file, 'w') or die('Could not open file!');
fwrite($fp, $HTTP_RAW_POST_DATA) or die('Could not write to file');
fclose($fp);
?>
Ключевым моментом здесь является использование переменной $HTTP_RAW_POST_DATA
для захвата тела запроса HTTP точно так же, как отправлено, не пытаясь разобрать его в обычные пары имя/значение. Я бы предложил прочитать документацию на данный момент, но это действительно не говорит вам много.
Совет безопасности: независимо от того, что пользователь отправляет в тело запроса, вы пишете файл на своем сервере. Если пользователь решает отправить оболочку script, файл PHP или другой исполняемый контент, затем просматривает URL-адрес создаваемого вами файла, он может выполнить код, который только что был загружен на ваш веб-сервер. Итак, убедитесь, что файл, на который вы пишете, недоступен через HTTP! (Файл A .htaccess
мог бы сделать трюк или написать где-то вне корня веб-сайта.)