23

我正在尝试编写类似于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>

通过使用移动 safari导航到http://apps.mortlabs.com/device/enroll.php来初始化配置文件

4

4 回答 4

14

我发现通过使用上述内容,Ipad/Iphone 正在与 Apache 对话 - 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');

然后您可以解析 $data 字符串以获取您需要的内容(尝试file_put_contents("data.txt", $data);或 Kyle2011 的示例)

udidgen我还通过在 Mac 上的终端中使用而不是仅使用 whatismyudid.com将 Payload UDID 更改为不同的东西。

更新:从 iOS 7.1 开始,一些文件(.plist IIRC)需要通过 https:// 提供 - 如果所有内容都通过 http:// 提供,它们将无法安装 - 可能最好提供包括 .ipa 在内的所有内容https:// 以确保 Apple 方面的未来更改不会造成问题。

于 2011-06-22T15:13:05.537 回答
6

注意最后一页(文件夹)。

如果您想使用页面脚本代替文件夹进行最终重定向。

你可以改变这个:

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

经过

header("位置: https ://www.example.com/enrolment.php?params= {$params}", true, 301);

来源:php.net 手册上的标头函数

这是工作 !

于 2012-10-26T12:51:06.633 回答
1

尝试将 URL 设置为不带 .php 扩展名的地址。这为我解决了这个问题。现在我唯一的问题是我不知道如何检索从 iOS 设备发送到我的服务器的数据。它似乎不在 $_POST 变量中。

于 2011-05-03T16:08:33.670 回答
1

您遇到的错误是因为 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 请求正文完全相同的内容,而无需尝试将其解析为通常的名称/值对。我建议此时阅读文档,但它并没有告诉你太多。

安全提示:无论用户在请求正文中发送什么,您都在写入服务器上的文件。如果用户决定发送一个 shell 脚本、PHP 文件或其他可执行内容,然后访问您创建的文件的 URL,他们可以执行刚刚上传到您的 Web 服务器上的代码。因此,请确保您写入的文件无法通过 HTTP 访问!(.htaccess文件可以解决问题,或者写入 Web 根目录之外的某个地方。)

于 2012-04-18T09:03:49.913 回答