為什么要做這件事兒?
當(dāng)應(yīng)用進(jìn)入后臺時,系統(tǒng)會自動在當(dāng)前應(yīng)用的頁面截屏并存儲到手機(jī)內(nèi),如果當(dāng)前頁面涉及敏感信息時,被攻擊會造成泄密。
方案一 模糊背景圖片
在應(yīng)用被掛起時,在當(dāng)前頁面添加一層高斯模糊,在應(yīng)用重新進(jìn)入前臺時,刪除模糊效果。
- (void)applicationDidEnterBackground:(UIApplication *)application {
[super applicationDidEnterBackground:application];
UIToolbar *bar = [[UIToolbar alloc] initWithFrame:self.window.bounds];
bar.barStyle = UIBarStyleDefault;
bar.tag = 101;
[UIApplication.sharedApplication.keyWindow.subviews.lastObject addSubview:bar];
}
- (void)applicationWillEnterForeground:(UIApplication *)application {
[super applicationWillEnterForeground:application];
UIView *view = (UIView *)[UIApplication.sharedApplication.keyWindow.subviews.lastObject viewWithTag:101];
[view removeFromSuperview];
}
方案二 自定義背景圖片
使用啟動圖作為進(jìn)入后臺的背景圖片
- (void)applicationDidEnterBackground:(UIApplication *)application {
[super applicationDidEnterBackground:application];
UIImage * img = [VRLaunchApi getSplashImg];
imageView.tag = 101;
UIImageView *imageView = [[UIImageView alloc] initWithFrame:self.window.bounds];
[imageView setImage:img];
[UIApplication.sharedApplication.keyWindow.subviews.lastObject addSubview:imageView];
}
- (void)applicationWillEnterForeground:(UIApplication *)application {
[super applicationWillEnterForeground:application];
UIImageView *imageView = (UIImageView *)[UIApplication.sharedApplication.keyWindow.subviews.lastObject viewWithTag:101];
[imageView removeFromSuperview];
}
獲取啟動圖片
+ (UIImage *)getSplashImg
{
NSString *launchimg = @"";
NSArray *imagesDict = [[[NSBundle mainBundle] infoDictionary] valueForKey:@"UILaunchImages"];
CGSize viewSize = [UIScreen mainScreen].bounds.size;
for (NSDictionary* dict in imagesDict)
{
CGSize imageSize = CGSizeFromString(dict[@"UILaunchImageSize"]);
if (CGSizeEqualToSize(imageSize, viewSize) && [@"Portrait" isEqualToString:dict[@"UILaunchImageOrientation"]])
{
launchimg = dict[@"UILaunchImageName"];
break;
}
}
DLog(@"getSplashImg:%@",launchimg);
return [UIImage imageNamed:launchimg];
}