由于我的应用程序将处理用户的敏感数据,我想知道是否有一种方法可以从我的应用程序中检查是否在iOS中设置了密码锁。
我需要检查的原因是,假设用户在应用程序中有一些信息,然后将其放在桌子上,然后出去几分钟。默认情况下,iPad/iPhone会进入待机模式。如果设置了密码锁,只有输入正确的密码,任何人都可以使用ipad。这将提供额外的安全措施,以防止任何路人查看应用程序中的敏感数据。
所以基本上,我希望我的应用程序检查是否设置了密码锁,如果没有,就提示用户这样做。
这个是可能的吗?
发布于 2011-06-01 10:34:21
请看一下The Application Runtime Environment上的文件保护部分。文件保护要求用户启用密码锁定设置并设置有效的密码。如果您的应用程序写入/创建文件,请使用NSDataWritingFileProtectionComplete选项。如果您的应用程序不使用任何文件,则创建一个虚拟文件并启用保护。
发布于 2016-03-16 19:36:21
从iOS 9
开始,LocalAuthentication框架中就有了一个标志LAPolicyDeviceOwnerAuthentication
。
+ (BOOL)isPasscodeEnabled
{
NSError *error = nil;
LAContext *context = [[LAContext alloc] init];
BOOL passcodeEnabled = [context canEvaluatePolicy:LAPolicyDeviceOwnerAuthentication error:&error];
if(passcodeEnabled) {
NSLog(@"Passcode enabled.");
return YES;
}
NSLog(@"Passcode NOT enabled: %@", error.localizedDescription);
return NO;
}
自iOS 8
以来,出现了另一个用于检查是否启用了TouchID
的标志:
+ (BOOL)isTouchIdEnabled
{
NSError *error = nil;
LAContext *context = [[LAContext alloc] init];
BOOL touchIDEnabled = [context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error];
if(touchIDEnabled) {
NSLog(@"TouchID enabled.");
return YES;
}
NSLog(@"TouchID NOT enabled: %@", error.localizedDescription);
return NO;
}
发布于 2014-10-22 09:06:37
Xamarin.iOS针对iOS 8...note的解决方案我在每次检查时都会调用SecKeyChain.Remove(secRecord)
。我发现如果不包括这一点,我可能会让设备进入一种奇怪的状态,在这种状态下,它会尝试在每次调用SecKeyChain.Add(secRecord)
时向用户进行身份验证
private bool DetectIfPasscodeIsSet ()
{
var secRecord = new SecRecord (SecKind.GenericPassword) {
Label = "Check if passcode is set",
Description = "Check if passcode is set",
Account = "Check if passcode is set",
Service = "Check if passcode is set",
Comment = "Check if passcode is set",
ValueData = NSData.FromString ("Check if passcode is set"),
Generic = NSData.FromString ("Check if passcode is set")
};
SecKeyChain.Remove (secRecord);
secRecord.AccessControl = new SecAccessControl (SecAccessible.WhenPasscodeSetThisDeviceOnly);
var status = SecKeyChain.Add (secRecord);
if (SecStatusCode.Success == status) {
SecKeyChain.Remove (secRecord);
return true;
}
return false;
}
https://stackoverflow.com/questions/6191592
复制相似问题