通过APNS发送MDM的查询设备信息的命令

分类: 首页- >MDM专栏 | 阅读: 3600 | 评论: 0 | 2014-07-24 16:17:42 
摘要:前面的第一步和第二部基本上和设备的锁屏和清除数据一致,可以参考: 通过APNS发送MDM的锁屏命令 通过APNS发送MDM的恢复出厂设置命令
1、前面的第一步和第二部基本上和设备的锁屏和清除数据一致,可以参考:
通过APNS发送MDM的锁屏命令
通过APNS发送MDM的恢复出厂设置命令
但是,在发送数据的时候需要注意,具体代码如下:

System.out.println("-------------------DeviceInformation Start---------------");
/**发送获取设备信息命令**/
String commandString = MdmUtils.getCommandInfoPList(MdmUtils.Info, command.getId());
command.setDoIt("1");
commandService.saveOrUpdate(command);
//设置下载的头信息
HttpServletResponse response = (HttpServletResponse) ControllerContext.getContext().getHttpResponse();
response.setHeader("content-type", "application/xml;charset=UTF-8");
response.setCharacterEncoding("UTF-8");
String configTitle = "UBangApp_DeviceInformation";
response.setHeader("Content-Disposition", "attachment; filename=" + configTitle + ".plist");
PrintWriter sos = response.getWriter();
System.out.println("-------------------DeviceInformation End---------------");
sos.write(commandString);
sos.flush();
sos.close();

其中的 MdmUtils.getCommandInfoPList(MdmUtils.Info, command.getId());方法就是查询设备需要传递的参数xml格式的数据,具体组装过程可以参考:

   /**
     * 发送命令的pList格式的模板文件(获取设备信息)
     * @return
     */
    public static String getCommandInfoPList(String command,String commandUUID){
        StringBuffer backString = new StringBuffer();
        backString.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
        backString.append("<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\"");
        backString.append("\"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">");
        backString.append("<plist version=\"1.0\">");
        backString.append("<dict>");
        backString.append("<key>Command</key>");
        backString.append("<dict>");
        backString.append("<key>RequestType</key>");
        backString.append("<string>");
        backString.append(command);
        backString.append("</string>");
        backString.append("<key>Queries</key>");
        backString.append("<array>");
        backString.append("<string>IMEI</string>");
        backString.append("<string>BluetoothMAC</string>");
        backString.append("<string>PhoneNumber</string>");
        backString.append("</array>");
        backString.append("</dict>");
        backString.append("<key>CommandUUID</key>");
        backString.append("<string>");
        backString.append(commandUUID);
        backString.append("</string>");
        backString.append("</dict></plist>");
        return backString.toString();
    }

注意这里的数据:
backString.append("<array>");backString.append("<string>IMEI</string>");
backString.append("<string>BluetoothMAC</string>");
backString.append("<string>PhoneNumber</string>");
backString.append("</array>");
这里我们只是查询了设备的:IMEI、BluetoothMAC、PhoneNumber三个信息,其他的可以参考Apple提供的文档,例如:
 

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>CommandUUID</key>
    <string>7C28313A-BFE7-4430-A516-BB16C8F6F750</string>
    <key>Command</key>
    <dict>
      <key>RequestType</key>
      <string>DeviceInformation</string>
      <array>
        <string>DeviceName</string>
        <string>OSVersion</string>
        <string>BuildVersion</string>
        <string>ModelName</string>
        <string>Model</string>
        <string>ProductName</string>
        <string>SerialNumber</string>
        <string>DeviceCapacity</string>
        <string>AvailableDeviceCapacity</string>
        <string>BatteryLevel</string>
        <string>CellularTechnology</string>
        <string>IMEI</string>
        <string>MEID</string>
        <string>ModemFirmwareVersion</string>
      </array>
    </dict>
  </dict>
</plist>
2、解析返回的数据:
当我们收到返回的数据时,我们这样解析:

 System.out.println("-------------------QueryResponses Start---------------");
 Map<String, String> plistMap = MdmUtils.parseInformation(info);
 for (String key : plistMap.keySet()) {
          System.out.println(key + ":" + plistMap.get(key));
 }
 String CommandUUID = plistMap.get("CommandUUID");
 Command command = (Command) ServiceUtil.getEntityById(Command.class, CommandUUID);
 if (command != null) {
         command.setResult(MdmUtils.Acknowledged);
         command.setDoIt("2");
         commandService.saveOrUpdate(command);
 }
System.out.println("-------------------QueryResponses End---------------");

其中的:MdmUtils.parseInformation(info);方法参见:

   /**
     * 获取Information的pList文件Map数据
     * @param pList
     * @return
     */
    public static Map<String, String> parseInformation(String pList){
        /**组装查询结果中重要的数据(一)**/
        String strBlank = replaceBlank(pList);
        strBlank =  strBlank.replace("<key>QueryResponses</key><dict>","");
        strBlank =  strBlank.replace("</dict><key>Status</key>","<key>Status</key>");
        Map<String, String> plistMap = new HashMap<String, String>();
        /**获取key、string列表数据**/
        List<String> keyList = getList(KEY,strBlank);
        List<String> stringList = getList(STRING,strBlank);
        /**组装数据称plistMap**/
        for(int i=0;i<stringList.size();i++){
            plistMap.put(keyList.get(i), stringList.get(i));
        }
        return plistMap;
    }

这样解析的目的就是为了回去key/value格式键值对,去掉不需要的数据。比如,我们需要回去返回的IMEI数据,就可以通过:plistMap.get("IMEI")来获取,你懂得。这样,我们的MDM查询设备数据就完成了。
 声明:www.mbaike.net 博客文章版权属于作者,受法律保护。未经作者同意不得转载。
标签 APNS MDM TokenUpdate
相关搜索

共有 0 条网友评论

还木有留言,还不抢沙发?

发布评论:

昵称: 邮箱: 验证码:
文明上网,理性发言!
© 移动互联百科(www.mbaike.net) | WAP站点 | 站长QQ:459104018 | 备案号:蜀ICP备14008230号-2