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 中无法正常工作?
应用程序暂停时如何在 iPhone 上获取屏幕锁定/解锁事件?