eSDK BYOD IOS防截圖功能實際應用(截圖審計)
由於安卓和IOS系統的差異,eSDK對安卓提供了應用級針對activity的防截圖介面,可以方便的包含企業應用防止截圖操作。但是受IOS系統限制,無法支援應用級別的防截圖。唯一可以實現防截圖的辦法就是去蘋果製作配置檔案禁用截圖功能(注意,這是系統級的防截圖,只要安裝該配置檔案後,手機整個系統將無法截圖)。因此在實際專案中,IOS防截圖很少會使用。取而代之的是應用通過增加水印和做截圖審計功能進行代替。水印的介面使用說明可以參考前一份帖子()。本文重點介紹截圖審計的使用方法。
iOS eSDK提供應用截圖審計日誌上報功能。當用戶在iOS裝置上使用eSDK應用時執行了截圖動作,相關的操作資訊將會被立即上傳到後臺。相關操作資訊包括截圖裝置基本資訊、截圖的eSDK應用名稱、截圖圖片、截圖描述等。其中,截圖描述預設為當前截圖介面的類名,如“DocumentViewController”。為了讓截圖描述資訊更加直觀易懂,iOS eSDK提供截圖事件通知介面,當用戶截圖時,eSDK通過代理通知應用並攜帶當前介面的類名,應用負責將截圖介面的類名轉換為截圖描述或介面相關業務資訊回傳給eSDK,替換預設記錄的類名。如下圖所示:
1.1 截圖事件通知協議定義
截圖時間通知協議定義在標頭檔案SDKMdm.h中
@protocolSDKMdmDelegate <NSObject>
@optional
//截圖事件回撥函式定義:
-(NSString*)didReceivedScreenShotEvent:(NSString *)className;
@end
引數說明:
名稱 |
長度 |
示例 |
必輸/選輸 |
說明 |
className | 無 |
DocumentViewController |
必輸 |
由eSDK傳入引數。表示當前截圖所在的類的名稱 |
返回值:
應用需返回當前類的描述給eSDK。如果返回空則使用類名作為預設值。
示例程式碼:
AppDelegate.h
#import <UIKit/UIKit.h> #import "sdkmdm.h" @interface AppDelegate : UIResponder <UIApplicationDelegate, SDKMdmDelegate> @property (strong, nonatomic) UIWindow *window; @end |
AppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [[SDKMdm getInstance] setDelegate:self]; //應用啟動時設定截圖代理 return YES; } //由應用實現此協議,例如 -(NSString *)didReceivedScreenShotEvent:(NSString *)className { NSString *description; if([className isEqualToString:@"SecWebViewController"]) { description = @"安全瀏覽器"; } else if([className isEqualToString:@"DocumentViewController"]) { description = @"文件瀏覽"; } else if([className isEqualToString:@"MenuViewController"]) { description = @"選單"; } return description; //返回描述 } |
注意:截圖審計功能在SDK初始化後有效。
1.2 截圖審計開關
應用可以自定義是否開啟截圖審計,預設為開啟狀態。注意:後臺有安全審計日誌開關,截圖審計屬於安全日誌審計。若後臺未開啟安全日誌審計,應用即使設定開啟截圖審計也是無效的。只有當後臺開啟了截圖日誌審計,應用才能自定義開啟或關閉截圖審計。
應用可通過以下eSDK介面開啟或關閉截圖審計。介面定義於標頭檔案SDKMdm.h中。
介面定義:
//開啟截圖審計
-(void)startScreenShotAuditing;
//關閉截圖審計
-(void)stopScreenShotAuditing;
示例程式碼:
[SDKMdm getInstance] startScreenShotAuditing]; //開啟截圖審計 [SDKMdm getInstance] stopScreenShotAuditing]; //關閉截圖審計 |