关于mobileconfig是否移除的检查方法

分类: 首页- >MDM专栏 | 阅读: 5504 | 评论: 0 | 2014-07-24 16:28:21 
摘要:我们在安装mobileconfig文件时,我们一般会附带一个app程序,这个app程序就是我们解决问题的工具,我们就是利用app的打开时检查mobileconfig文件来实现
导读:在前面,我们讲了当移除mobileconfig文件时,设备发送“CheckOut”消息给MDM Server(参见:移除mobileconfig文件,设备发送CheckOut消息通知MDM Server),这样来判断设备是否可控的问题,但是这只是在移除设备描述文件时网络打开的情况下。如果没有无网情况下移除mobileconfig文件怎样检查呢?接下来我们介绍一种方式来解决这样的问题。

方案描述:我们在安装mobileconfig文件时,我们一般会附带一个app程序,这个app程序就是我们解决问题的工具,我们就是利用app的打开时检查mobileconfig文件来实现。具体步骤如下:

1、在MDM Server端写一个发送检查mobileconfig文件的接口:
   例如:
   /**
     * 设备App请求后台,后台检测更新是否可控
     * 说明:
     * @throws Exception
     */
    @GET
    @Path("/reply/:deviceId")
    public void deviceRepay() throws Exception {
        System.out.println("-------------------Reply Start---------------");
        Map map = new HashMap();
        /**获取当期设备信息**/
        String deviceId = ControllerContext.getContext().getPathParamMap().get("deviceId");
        DBService dbService = ControllerContext.getContext().getDBService(Mdm.class);
        Mdm mdm = (Mdm) dbService.find("deviceId = ?", new Object[]{deviceId});
        /**对设备进行锁屏**/
        String pemFile = PushConfig.getConfig("APNS_P12MDM");
        HttpServletRequest request = (HttpServletRequest) ControllerContext.getContext().getHttpRequest();
        String pemPath = request.getRealPath("mdmtool") + pemFile;
        int pushState = PushUtils.singleMDMLockPush(pemPath, mdm);
        /**发送查询命令**/
        if (pushState == 1) {
            DBService commandService = ControllerContext.getContext().getDBService(Command.class);
            Command command = new Command();
            command.setCommand(MdmUtils.Repay);
            command.setDeviceId(deviceId);
            command.setDoIt("0");
            commandService.saveOrUpdate(command);
            mdm.setControl("-1");
            dbService.saveOrUpdate(mdm);
        }else{
            throw new UserOperateException(Response.Status.BAD_REQUEST.getStatusCode(), "接口参数不完整!");
        }
        System.out.println("-------------------Reply End---------------");
        toResult(Response.Status.OK.getStatusCode(), null);
    }

这个接口是APP打开并在网的情况下调用一次,这个接口的主要功能就是:推送一个命令给Apns服务器,设备当前如果在线就会收到这个命令,然后设备就会来请求MDM Server并带着请求参数“Idle”,我们的MDM Server在“Server URL”中拦截这个查询状态为“Repay”的请求,如果有拦截到,那么设备就可控,及安装了mobileconfig文件,否则不可控。

2、“Server URL”中拦截方法代码如下:
 if (command.getCommand().equals(MdmUtils.Repay)) {
     /**查询设备状态,如果又返回,则修改状态就行了:1 表示设备在线**/
     command.setDoIt("1");
     commandService.saveOrUpdate(command);
     //更新设备是否可控状态
     mdm.setControl("2");
     dbService.saveOrUpdate(mdm);
  }
在这一步中,如果我们收到了返回的结果,那么我们就可以标记设备可控(第一步中我们发送命令的时候标记设备为不可控了)


3、我们提供一个查询设备可控状态的接口给APP
   参考:
   /**
     * 检查设备是否可控(MDM是否激活成功)
     * @throws Exception
     */
    @GET
    @Path("/active/:deviceId")
    public void deviceActive() throws Exception {
        System.out.println("-------------------Active Start---------------");
        JSONObject rJson = new JSONObject();
        /**获取当期设备信息**/
        String deviceId = ControllerContext.getContext().getPathParamMap().get("deviceId");
        DBService dbService = ControllerContext.getContext().getDBService(Mdm.class);
        Mdm mdm = (Mdm) dbService.find("deviceId = ?", new Object[]{deviceId});
        /**判断设备是否可控**/
        if ((mdm != null) && ("2".equals(mdm.getControl()))) {
            rJson.put("msg", "已安装配置描述文件,设备可控!");
        } else {
       throw new UserOperateException(Response.Status.BAD_REQUEST.getStatusCode(), "未安装配置描述文件,设备不可控!");
        }
        System.out.println("-------------------Active End---------------");
        toResult(Response.Status.OK.getStatusCode(), rJson);
    }

这样设备就可以通过这个接口查询设备是否可控了!

完结!
 声明:www.mbaike.net 博客文章版权属于作者,受法律保护。未经作者同意不得转载。
标签 mobileconfig CheckOut
相关搜索

共有 0 条网友评论

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

发布评论:

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