banner
李大仁博客

李大仁博客

天地虽大,但有一念向善,心存良知,虽凡夫俗子,皆可为圣贤。

iOS開發之APP進入後台禁止自動截圖

iOS 在 7.0 以後,APP 進入後台後會把當前 APP 的 Window 狀態記錄,並對 Window 進行截圖操作,會在 APP 的 Sandbox\Library\Caches\Snapshots\xxxx.xxx.xxx 文件夾中增加以下幾個文件。這有可能會造成用戶敏感數據的洩漏。 UIApplicationAutomaticSnapshotDefault-LandscapeLeft.png UIApplicationAutomaticSnapshotDefault-LandscapeRight.png UIApplicationAutomaticSnapshotDefault-LandscapeLeft@2x.png UIApplicationAutomaticSnapshotDefault-LandscapeRight@2x.png

解決辦法: 1. 將文件夾清空後設置為只讀,文件將不能被寫入。本方法需要越獄情況下使用。

system("chmod 444 Library\Caches\Snapshots\xxxx.xxx.xxx\* -R");

2. 重寫 UIApplication 的_saveSnapshotWithName。本方法需要越獄情況下使用。

@interface UIApplication(NoSaveSnapshotWithName)

-(void) _saveSnapshotWithName:(NSString *)name;

@end

@implementation UIApplication
-(void) _saveSnapshotWithName:(NSString *)name
{
return;
}

@end

3. 在 applicationDidEnterBackground 時,將 window 的 hidden 屬性設置為 YES,在 applicationWillEnterForeground 時,將 window 的 hidden 屬性設置為 NO。此時的截圖將會是一片黑色,什麼也看不到。如果不喜歡黑色,在 window 中添加一個全屏的 Subview 就可以設置自己想要的內容。

//- (void)applicationWillResignActive:(UIApplication *)application
//{
// self.window.hidden = YES;
//}

  • (void)applicationDidEnterBackground:(UIApplication *)application
    {
    self.window.hidden = YES;
    }

  • (void)applicationWillEnterForeground:(UIApplication *)application
    {
    self.window.hidden = NO;
    }

//- (void)applicationDidBecomeActive:(UIApplication *)application
//{
// self.window.hidden = NO;
//}

補充,如果要在兩次點擊 HOME 鍵或者四指收起時也讓畫面全屏顯示,可以在 info.plist 中添加 "UIRequiresFullScreen" 鍵,並設置為 YES。

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。