web-dev-qa-db-ja.com

.mobileconfigからデバイスUDIDを取得する

http://whatismyudid.com/ に似た関数を作成しようとしています。これは、承認されると、ユーザーのUDIDを返し、そのユーザーが後で参照できるようにデータベースに保存します。

プロファイルインストーラーで正常に開く.mobileconfigxmlドキュメントを作成しましたが、プロファイルをインストールするように指示すると、[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 に移動することで初期化されます

21
joseym

上記を使用することで、ApacheがIpad/Iphoneによって話されていたことがわかりました-Kyle2011による投稿 https://discussions.Apple.com/thread/3089948?start=0&tstart= 残りのソリューションに入力します。

基本的に、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の例を試してください)

また、whatismyudid.comを使用するだけでなく、Macのターミナルでudidgenを使用して、ペイロードUDIDを別のものに変更しました。

更新:iOS 7.1以降、一部のファイル(.plist IIRC)はhttps://経由で提供する必要があります-すべてがhttp://経由で提供されると、インストールに失敗します-.ipa以上を含むすべてを提供するのがおそらく最善ですhttps:// Apple側の将来の変更が問題を引き起こさないようにするために、.

13
Kev

最後のページ(FOLDER)についての注意。

フォルダの代わりに最終的なリダイレクトにページスクリプトを使用する場合。

あなたはこれを変えることができます:

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

沿って

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

ソース: php.netマニュアルのヘッダー関数

それは仕事です!

6
Pixman

URLを.php拡張子のないアドレスに設定してみてください。これは私にとって問題を解決しました。今の私の唯一の問題は、iOSデバイスからサーバーに送信されたデータを取得する方法がわからないことです。 $ _POST変数に含まれていないようです。

1
steffenborup

発生するエラーは、iOSがプロファイルサービスURL(UDIDを送信するURL)が構成プロファイル(つまり、.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リクエスト本文をキャプチャすることです。この時点で ドキュメントを読む をお勧めしますが、実際にはあまりわかりません。

セキュリティのヒント:ユーザーがリクエスト本文で送信するものは何でも、サーバー上のファイルに書き込んでいます。ユーザーがシェルスクリプト、PHPファイル、またはその他の実行可能コンテンツを送信することを決定した後、作成したファイルのURLにアクセスすると、Webサーバーにアップロードしたばかりのコードを実行できます。したがって、書き込み先のファイルにHTTP経由でアクセスできないことを確認してください!(.htaccessファイルでうまくいくか、書き込みますWebルートの外側のどこかに。)

1
Calrion