从.mobileconfig获取设备UDID

| 我正在尝试编写类似于http://whatismyudid.com/的功能,然后该功能获得批准,该功能将返回用户UDID并将其存储到数据库中,以供该用户将来参考。 我写了一个.mobileconfig xml文档,可以在Profile Installer中很好地打开它,但是当我告诉它安装配置文件时,它会以
[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来初始化配置文件     
已邀请:
我发现通过使用以上内容,Ipad / Iphone正在与Apache进行对话-解决方案的其余部分中,Kyle2011在https://discussions.apple.com/thread/3089948?start=0&tstart=0上发布的帖子已被Apache交谈。 。 基本上在retrieve.php页面的底部,您需要使用类似于以下内容的行将浏览器重定向到目录:-
header(\"Location: https://www.example.com/enrolment?params={$params}\");
注册是一个目录-然后调用DirectoryIndex(通常为index.php),然后可以向您的用户显示内容。 要填充$ params变量,您需要在restore.php脚本顶部的以下行
$data = file_get_contents(\'php://input\');
然后,您可以解析$ data字符串以获取所需的内容(尝试
file_put_contents(\"data.txt\", $data);
或Kyle2011的示例) 我还通过在Mac终端上使用ѭ5而不是仅使用whatismyudid.com来将Payload UDID更改为其他内容。 更新:从iOS 7.1开始,某些文件(.plist IIRC)需要通过https://提供-如果通过http://提供所有内容,它们将无法安装-可能最好是通过.ipa提供所有内容https://以确保Apple方面的未来更改不会造成问题。     
请注意最后一页(FOLDER)。 如果要使用页面脚本代替文件夹进行最终重定向。 您可以更改此:   标头(\“位置:   https://www.example.com/enrolment?params= {$ params} \“); 通过   标头(\“位置:   https://www.example.com/enrolment.php?params= {$ params} \“,是,真,301); 来源:php.net手册上的标头函数 是工作 !     
尝试将URL设置为不带.php扩展名的地址。这为我解决了问题。 现在,我唯一的问题是我无法找到如何检索从iOS设备发送到服务器的数据。 它似乎不在$ _POST变量中。     
您收到的错误是因为iOS希望您的配置文件服务网址(向其发送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请求主体,使其完全与发送的一样,而不会尝试将其解析为通常的名称/值对。我建议此时阅读文档,但实际上并不能告诉您太多。 安全提示:无论用户在请求正文中发送的内容如何,​​您都在写服务器上的文件。如果用户决定发送Shell脚本,PHP文件或其他可执行内容,然后访问您创建的文件的URL,则他们可以执行刚上传到Web服务器上的代码。因此,请确保无法通过HTTP访问您写入的文件! (一个
.htaccess
文件可以解决问题,或写入根目录之外的地方。)     

要回复问题请先登录注册