Получение UDID устройства.mobileconfig-файл

Я пытаюсь написать функцию, похожую на http://whatismyudid.com/ это, затем утверждено, вернет UDID пользователей и сохранит его в базе данных для дальнейшего использования с этим пользователем.

Я написал .mobileconfig xml doc, который открывается в установщике профиля просто отлично, но когда я говорю ему установить профиль, он отвечает [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's UDID.</string>
    <key>PayloadType</key>
    <string>Profile Service</string>
</dict>
</plist>

профиль инициализируется путем перехода кhttp://apps.mortlabs.com/device/enroll.php с мобильным safari

4 ответов


я обнаружил, что, используя выше, что Apache разговаривал с Ipad / Iphone-сообщение от Kyle2011 в https://discussions.apple.com/thread/3089948?start=0&tstart=0 заполненный внутри остальная часть решения.

в основном в нижней части извлечения.php страница вам нужно перенаправить браузер в каталог, используя строку, похожую на следующую: -

header("Location: https://www.example.com/enrolment?params={$params}");

где зачисление является каталогом-это затем вызывает DirectoryIndex (обычно индекс.php), который затем может отображать материал для вашего пользователя.

чтобы заполнить переменную $params, вам нужна следующая строка в верхней части вашего извлечения.PHP-скрипт

$data = file_get_contents('php://input');

затем вы можете проанализировать строку $data, чтобы получить то, что вам нужно (попробуйте file_put_contents("data.txt", $data); или пример Kyle2011)

Я также изменил UDID полезной нагрузки на что-то другое, используя udidgen в терминале на Mac, а не просто с помощью whatismyudid.com ' s.

обновление: от iOS 7.1 некоторые файлы (.plist IIRC) необходимо обслуживать по https:// - они не смогут установить, если все подается по http:// - вероятно, лучше всего обслуживать все, включая .ipa через https: / / для обеспечения будущих изменений на стороне Apple не вызывает проблем.


обратите внимание на последнюю страницу (папку).

Если вы хотите использовать скрипт страницы для окончательного перенаправления вместо папки.

вы можете изменить это :

("место: https://www.example.com/enrolment?params= {$params}");

by

("место: https://www.example.com/enrolment.php?params={$params}", true, 301);

источник : функция заголовка дальше php.net руководство

Это работа !


попробуйте установить URL-адрес без .расширение PHP. Это решило проблему для меня. Теперь моя единственная проблема заключается в том, что я не могу узнать, как получить данные, отправленные с устройства iOS на мой сервер. Похоже, что он не находится в переменной $_POST.


ошибка, которую вы получаете, заключается в том, что iOS ожидает, что Ваш URL-адрес службы профиля (тот, которому он отправляет свой UDID) вернет профиль конфигурации (т. е. ). В настоящее время я захватываю UDIDs устройства, не возвращая этот профиль; Мои устройства генерируют описанное Вами предупреждение, но данные находятся на моем сервере.

для справки, вот (очень) простой 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 тело запроса точно так же, как отправлено, без попытки проанализировать его на обычные пары имя/значение. Я бы предложил чтение документации на данный момент, но это действительно не говорит.

совет по безопасности: независимо от того, что пользователь отправляет в теле запроса, вы пишете в файл на своем сервере. Если пользователь решает отправить сценарий оболочки, файл PHP или другое исполняемое содержимое, а затем посещает URL-адрес файла, который вы создаете, они могут выполнить код, только что загруженный на ваш веб-сервер. Итак,убедитесь, что файл, в который вы пишете, не может быть доступен через HTTP! (A .htaccess файл сделает трюк, или написать где-то за пределами веб-корня.)