2014-12-11 6 views
6

Ich möchte iPhone UDID durch Mobile Safari erhalten. Iam Verwendung .mobileconifg alsAbrufen einer iPhone UDID und IMEI von Mobile Safari Verwenden von Java-Servlet

<plist version="1.0"> 
    <dict> 
     <key>PayloadContent</key> 
     <dict> 
      <key>URL</key> 
      <string>http://192.168.12.45:8080/enroll/retrieve</string> 
      <key>DeviceAttributes</key> 
      <array> 
       <string>UDID</string> 
       <string>SERIAL</string> 
       <string>CHALLENGE</string> 
       <string>IMEI</string> 
       <string>ICCID</string> 
       <string>VERSION</string> 
       <string>PRODUCT</string> 
       <string>DEVICE_NAME</string> 
       <string>MAC_ADDRESS_EN0</string> 
      </array> 
     </dict> 
     <key>PayloadOrganization</key> 
     <string>Org</string> 
     <key>PayloadDisplayName</key> 
     <string>Profile Service</string> 
     <key>PayloadVersion</key> 
     <integer>1</integer> 
     <key>PayloadUUID</key> 
     <string>D6F1B2A3-0039-48B5-915B-8E2B35663816</string> 
     <key>PayloadIdentifier</key> 
     <string>Identifer</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> 

retrieve.php

<?php 
    $data = file_get_contents('php://input'); 
    header('Location: http://192.168.12.45/enroll/info?'.$data, true, 301); 
?> 

Informationen ein Verzeichnis ist und nicht eine Seite, habe ich erstellt index.php in diesem Verzeichnis I-Daten in $ erhalten _BEKOMMEN.

Aber ich bin in der Lage, von PHP zu bekommen.

Aber ich möchte Java-Servlet verwenden, änderte ich URL in Mobileconfig-Datei auf Servlet-URL, aber ich bin nicht in der Lage, irgendwelche Werte in Java zu bekommen.

abrufen Java-Code

Enumeration headerNames = request.getHeaderNames(); 
    while (headerNames.hasMoreElements()) { 
     String paramName = (String) headerNames.nextElement(); 
     String paramValue = request.getHeader(paramName); 
     System.out.println("paramValue :" + paramValue); 
    } 

Ausgang:

paramValue :192.168.12.45:8080 
paramValue :keep-alive 
paramValue :gzip, deflate 
paramValue :Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_1 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D201 Safari/9537.53 
paramValue :en-us 
paramValue :text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 

es zeigt Fehler wie diese

enter image description here

Aber ich wa NT-Java-Servlet zum Erhalten von IMEI. Ich möchte den obigen PHP-Code in Java-Servlet ändern. So lösen Sie dieses Problem und installieren Profil, um UDID und IMEI zu erhalten

+0

Das Link sagt: Quirk ACHTUNG :: ** Die einzige Art, wie ich (und andere) bekommen haben es arbeiten zu umleiten ist ein Verzeichnis. Ich habe versucht, auf eine ASPX-Seite umzuleiten, und es ist fehlgeschlagen. Wenn Sie das nicht richtig verstanden haben, wird dem Benutzer eine vage Fehlermeldung angezeigt, die sich festsetzt. ** Haben Sie das Verzeichnis umgeleitet? –

+0

dieser Link sagt, es gibt einen Fehler. –

+0

Ich auch nicht. Gerade erwähnt, falls Sie das verpasst haben. Es tut uns leid! –

Antwort

3

Dies kann daran liegen, dass die Verschlüsselung für Ihre Datenbankdatei oder das Verzeichnis, das sie enthält, aktiviert ist. Verwendung:

NSFileManager's setAttributes:ofItemAtPath:error: mit NSFileProtectionNone

0

So scheint es, Sie ein Java-Servlet statt PHP verwenden möchten. Nach this article, könnte dies nicht funktionieren, , da sie die Aufnahme URL in Ihrer .mobileconfig Datei angegeben scheinen eine PHP-Datei sein muss:

Quirk ACHTUNG: Aus welchem ​​Grunde auch immer, ist der Prozess EXTREM besonders über Wie reagiert Ihr Server, wenn er den Benutzer an Ihre voreingestellte URL sendet? Nach vielen Versuchen glaube ich, dass Ihre empfangende URL eine .php-Datei sein muss. Das klingt verrückt, aber ich meine es ernst.

Aber Sie könnten trotzdem versuchen. Nach this post, diese Java-Code sollte in etwa äquivalent zu PHP php://input, sein dies dies in Ihrem Servlet:

InputStream stream = request.getInputStream(); 
    byte[] buffer = new byte[512]; 
    StringBuilder builder = new StringBuilder(); 
    while (stream.read(buffer) != -1) { 
     builder.append(new String(buffer)); 
    } 
    System.out.println(builder); 

Wenn das immer noch nicht funktioniert, ich Ihnen keine andere Wahl annehmen, aber was zu tun ist der Autor des Artikels hat, und verwenden Sie PHP, nur um zum Servlet umzuleiten. In diesem Fall ist es besser, wenn in retrieve.php, Sie $data als benannte Abfrage-Parameter übergeben müssen, von '/info?'.$data zu '/info?data='.$data, wie dies zu ändern:

<?php 
    $data = file_get_contents('php://input'); 
    header('Location: http://192.168.12.45/enroll/info?data='.rawurlencode($data)); 
?> 

ich auch $data in rawurlencode($data) gewickelt und entfernt die zusätzlichen Parameter, die nicht notwendig zu sein scheinen.

Dann in Ihrem Servlet, können Sie den data Parameter wie folgt zugreifen:

protected void doGet(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    String data = request.getParameter("data"); 
    System.out.println(data); 
} 
Verwandte Themen