PhoneGap暂停事件,模糊当前屏幕以防止敏感数据显示在快照中

Posted

技术标签:

【中文标题】PhoneGap暂停事件,模糊当前屏幕以防止敏感数据显示在快照中【英文标题】:PhoneGap pause event, blur current screen to prevent sensitive data from being shown in snapshot 【发布时间】:2013-08-16 22:53:56 【问题描述】:

我正在开发一个带有 phonegap 和 jquery mobile 的 iphone 应用程序。当应用程序关闭并进入后台模式时,我试图模糊屏幕,以便在应用程序恢复时,屏幕上的敏感数据将被模糊掉。

我正在尝试在暂停事件中执行此操作,但看起来 ios 在暂停事件之前截取了应用程序的屏幕截图,因此我的模糊代码没有在 IOS 恢复时显示的屏幕截图中被捕获应用程序。

有没有人知道如何让它发挥作用?

暂停事件是由 UIApplicationDidEnterBackgroundNotification 触发的,这意味着已经在后台的应用程序已经拍摄了屏幕截图。在此之前是否有我可以参与的活动?

当您双击主页按钮时显示屏幕截图时,这在 ios7 中将更加重要。在 ios6 中,它仅在应用恢复和加载时显示一瞬间。

谢谢!

我在暂停和恢复 phonegap 监听器中尝试过的代码。

// listen for events
document.addEventListener("resume",      onResume, false);
document.addEventListener("pause",       onPause, false);

// show passcode if enabled, maybe even re-fresh app to start new session and clean up  memory issues?
function onResume() 
    // unblur page
    var filterVal = 'blur(0px)';
    $('.ui-page').delay(1000).css('webkitFilter', filterVal);


function onPause() 
    var filterVal = 'blur(10px)';
    $('.ui-page').css('webkitFilter', filterVal);   

【问题讨论】:

我最终使用了启动画面插件,并在 onPause 事件中通过 javascript api 显示启动画面。但这仅适用于 IOS,不适用于 android 【参考方案1】:

phonegap 插件 cordova-plugin-privacyscreen 可以解决问题 - 它在背景之前将视图替换为初始图像,然后将其清除。

https://www.npmjs.com/package/cordova-plugin-privacyscreen

【讨论】:

【参考方案2】:

我在这里面临同样的问题。如果您的应用启用了多任务处理。您可以通过添加当前代码来更改 appdelegate 中的原生代码

- (void)applicationDidEnterBackground:(UIApplication *)application 

    NSLog(@"Application Did Enter Background");
    self.viewController.webView.hidden = YES;

    NSString *splashImage;
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 
        splashImage = @"Default-Portrait~ipad.png";
    
    else 
        splashImage = @"Default~iphone.png";
    

    UIImageView *splash = [[UIImageView alloc]initWithFrame:[self.window frame]];
    [splash setImage:[UIImage imageNamed:splashImage]];
    [self.window addSubview:splash];



- (void) applicationDidBecomeActive:(UIApplication *)application 

    NSLog(@"Application Did Become Active");
    if([[self.window subviews] count]>1) 
        [NSThread sleepForTimeInterval:0.3];
        [[[self.window subviews] lastObject] removeFromSuperview];
    
    self.viewController.webView.hidden = NO;


- (void)applicationWillResignActive:(UIApplication *)application 

    NSLog(@"Application Did Resign Active");
    self.viewController.webView.hidden = YES;

    NSString *splashImage;
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 
        splashImage = @"Default-Portrait~ipad.png";
    
    else 
        splashImage = @"Default~iphone.png";
    

    UIImageView *splash = [[UIImageView alloc]initWithFrame:[self.window frame]];
    [splash setImage:[UIImage imageNamed:splashImage]];
    [self.window addSubview:splash];


但是,请确保您的应用支持多任​​务处理。否则这将不起作用,因为关闭多任务功能时不会调用 applicationDidEnterBackground。以及应该调用的函数(applicationWillTerminate),它也没有被调用。

【讨论】:

以上是关于PhoneGap暂停事件,模糊当前屏幕以防止敏感数据显示在快照中的主要内容,如果未能解决你的问题,请参考以下文章

暂停事件在 PhoneGap iPhone 中无法正常工作?

youtube api - 防止标题覆盖暂停

如何防止在PhoneGap中双击移动滚动?

应用程序暂停时如何在 iPhone 上获取屏幕锁定/解锁事件?

JavaScript / DOM:如果焦点丢失到另一个窗口(应用程序),如何防止模糊事件

播放或暂停视频时防止暂停