【问题标题】:Getting a device UDID from .mobileconfig从 .mobileconfig 获取设备 UDID
【发布时间】:2011-08-12 11:38:29
【问题描述】:

我正在尝试编写类似于 http://whatismyudid.com/ 的函数,该函数在获得批准后将返回用户 UDID 并将其存储到数据库中以供该用户将来参考。

我已经编写了一个 .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's UDID.</string>
    <key>PayloadType</key>
    <string>Profile Service</string>
</dict>
</plist>

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

【问题讨论】:

    标签: ios configuration utility udid


    【解决方案1】:

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

    【讨论】:

    • 刚刚回到这个问题,但我想我可以帮助您解决您的问题,然后我会尝试您的建议!信息应存储在 php 输入流中,因此您应该能够执行 $return = file_get_contents('php://input'); 之类的操作
    • 删除 .php 并没有帮助,不幸的是
    【解决方案2】:

    我发现通过使用上面的方法,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');
    

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

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

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

    【讨论】:

    • 凯夫!太棒了,我很快就会试试这个,让你知道它是如何工作的。如果它解决了问题,那么我给你道具。
    • 我可以通过 asp.net 得到这个吗?
    • 如何从 .mobileconfig 文件中获取 asp.net c# 中的 udid?
    • 对我来说,apps.mortlabs.com/device/retrieve.php</string> 是以 GET 方法打开的。所以我没有在 file_get_contents('php://input');
    【解决方案3】:

    您遇到的错误是因为 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 请求正文,而不尝试将其解析为通常的名称/值对。我现在建议reading the documentation,但它并不能告诉你太多。

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

    【讨论】:

      【解决方案4】:

      注意最后一页 (FOLDER)。

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

      你可以改变这个:

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

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

      来源:header function on php.net manual

      成功了!

      【讨论】:

      • 对于其他人,如果您没有 301 重定向,您将获得无效的个人资料。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-22
      • 2012-12-08
      相关资源
      最近更新 更多