|
分类: 首页- >MDM专栏 | 阅读: 6801 | 评论: 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 博客文章版权属于作者,受法律保护。未经作者同意不得转载。
|
|
|