L'obtention d'un appareil UDID.mobileconfig

j'essaie d'écrire une fonction similaire à http://whatismyudid.com / qui, alors approuvé, retournera les utilisateurs UDID et le stocker dans une base de données pour référence future avec cet utilisateur.

j'ai écrit un .mobileconfig xml doc qui s'ouvre dans L'installateur de profil très bien mais quand je lui dis d'installer le profil il répond avec [alert] Invalid Profile mais pas de corps d'alerte. Pas de description, pas de code, pas d'aide.

je suis nouveau au jeu de configuration mobile pour que n'importe quelle aide me fasse frissonner.

Voici mon fichier de configuration:

<?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>

le profil est initialisé en naviguant sur http://apps.mortlabs.com/device/enroll.php avec safari mobile

21
demandé sur joseym 2011-04-25 21:52:20

4 réponses

j'ai trouvé qu'en utilisant ce qui précède Qu'Apache était parlé par L'Ipad / Iphone - le post de Kyle 2011 à https://discussions.apple.com/thread/3089948?start=0&tstart=0 remplir le reste de la solution.

en gros, au fond de la récupération.page php vous devez rediriger le navigateur vers un répertoire en utilisant une ligne similaire à la suivante:-

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

où l'inscription est un répertoire - ce alors appelle le DirectoryIndex (typiquement index.php) qui peut afficher des trucs à votre utilisateur.

pour remplir la variable $params, vous avez besoin de la ligne suivante en haut de votre recherche.PHP script

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

vous pouvez ensuite analyser la chaîne de données $pour obtenir ce dont vous avez besoin (essayez file_put_contents("data.txt", $data); ou L'exemple de Kyle2011)

j'ai aussi changé la charge utile UDID en quelque chose de différent en utilisant udidgen dans un terminal sur un Mac plutôt que juste à l'aide de whatismyudid.com'.

mise à Jour: iOS 7.1 certains des fichiers (l' .plist IIRC) doivent être servis sur https://, ils ne parviennent pas à installer si tout est servi sur http:// probablement mieux pour répondre à tout, y compris l' .ipa over https: / / pour s'assurer que les changements futurs du côté D'Apple ne causent pas de problème.

13
répondu Kev 2014-06-26 08:09:53

note à propos de la dernière page ( dossier ).

si vous voulez utiliser un script de page pour la redirection finale à la place d'un dossier.

vous pouvez changer ceci :

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

par

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

Source : en-tête de la fonction sur php.net manuel

c'est le travail !

6
répondu Pixman 2012-10-26 12:51:06

essayez de définir L'URL à une adresse sans .PHP extension. Cela a résolu le problème pour moi. Maintenant mon seul problème est que je ne peux pas trouver comment récupérer les données envoyées depuis le périphérique iOS vers mon serveur. Il ne semble pas être dans la variable $_POST.

1
répondu steffenborup 2011-05-03 16:08:33

l'erreur que vous obtenez est parce que iOS s'attend à ce que votre URL de service de profil (celle à laquelle il envoie son UDID) renvoie un profil de configuration (c.-à-d. un fichier .mobileconfig ). Je capture actuellement des UDIDs sans retourner ce profil; Mes appareils génèrent l'alerte que vous décrivez mais les données sont sur mon serveur.

pour référence, voici le (très) simple fichier PHP que j'utilise pour capturer les données:

<?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);
?>

La clé ici est l'utilisation de la $HTTP_RAW_POST_DATA variable pour capturer le corps de la requête HTTP exactement tel qu'il est envoyé, sans tenter de le séparer dans les paires nom/valeur habituelles. Je suggérerais en lisant la documentation à ce stade, mais ça ne vous dit pas grand chose.

Conseil de sécurité: peu importe ce que l'utilisateur envoie dans le corps de la demande, vous écrivez à un fichier sur votre serveur. Si l'utilisateur décide d'envoyer un script shell, un fichier PHP, ou tout autre contenu exécutable, puis visite L'URL du fichier que vous créer, ils peuvent exécuter le code juste téléchargé sur votre serveur web. Donc, assurez-vous que le fichier auquel vous écrivez ne peut pas être accédé via HTTP ! (Un fichier .htaccess ferait l'affaire, ou écrirait quelque part en dehors de la racine du web.)

1
répondu Calrion 2012-04-18 09:03:49