最近,客户要求在”在线考试“功能中加入防舞弊相关的修改。其中主要有2点:
1.禁止进入后台;
2.禁止复制试题,禁止截屏;
解决思路:
1、禁止进入后台,根本不可能。解决方法是,监测应用进入后台次数,应用进入后台超过三次视为违规操作;应用再次进入前台视为交卷。
2、禁止复制试题很简单,禁止截屏功能经过调研,企业账号可以通过配置文件达到效果文档在这里,个人账号面谈;又考虑在截屏照片存入相册之前去图片进行模糊处理,但是通知只有UIApplicationUserDidTakeScreenshotNotification,接收到回调图片已经放在相册里了;最后,经过小伙伴们提示,是不是可以生成后删除这张截图即可,删除可以,iOS8得到相册权限后,就可以删,但是会有提示,你可以选择不删.......无奈之下,就按照禁止进入后台的逻辑做了
涉及代码
//监听截屏事件
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(screenshotAction) name:UIApplicationUserDidTakeScreenshotNotification object:nil];
//删除对应相册最新的照片
PHFetchResult *collectonResuts = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeAny options:[PHFetchOptions new]] ;
[collectonResuts enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
PHAssetCollection *assetCollection = obj;
//你想进入的相册
if ([assetCollection.localizedTitle isEqualToString:@"Camera Roll"] || [assetCollection.localizedTitle isEqualToString:@"相机胶卷"]) {
PHFetchResult *assetResult = [PHAsset fetchAssetsInAssetCollection:assetCollection options:[PHFetchOptions new]];
[assetResult enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{ //获取相册的最后一张照片
if (idx == [assetResult count] - 1) {
[PHAssetChangeRequest deleteAssets:@[obj]];
}
} completionHandler:^(BOOL success, NSError *error) { NSLog(@"Error: %@", error);
}];
}];
}
}];