首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >以编程方式检查是否设置了密码锁

以编程方式检查是否设置了密码锁
EN

Stack Overflow用户
提问于 2011-06-01 02:03:29
回答 3查看 7K关注 0票数 20

由于我的应用程序将处理用户的敏感数据,我想知道是否有一种方法可以从我的应用程序中检查是否在iOS中设置了密码锁。

我需要检查的原因是,假设用户在应用程序中有一些信息,然后将其放在桌子上,然后出去几分钟。默认情况下,iPad/iPhone会进入待机模式。如果设置了密码锁,只有输入正确的密码,任何人都可以使用ipad。这将提供额外的安全措施,以防止任何路人查看应用程序中的敏感数据。

所以基本上,我希望我的应用程序检查是否设置了密码锁,如果没有,就提示用户这样做。

这个是可能的吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-06-01 10:34:21

请看一下The Application Runtime Environment上的文件保护部分。文件保护要求用户启用密码锁定设置并设置有效的密码。如果您的应用程序写入/创建文件,请使用NSDataWritingFileProtectionComplete选项。如果您的应用程序不使用任何文件,则创建一个虚拟文件并启用保护。

票数 3
EN

Stack Overflow用户

发布于 2016-03-16 19:36:21

iOS 9开始,LocalAuthentication框架中就有了一个标志LAPolicyDeviceOwnerAuthentication

代码语言:javascript
复制
+ (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的标志:

代码语言:javascript
复制
+ (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;
}
票数 6
EN

Stack Overflow用户

发布于 2014-10-22 09:06:37

Xamarin.iOS针对iOS 8...note的解决方案我在每次检查时都会调用SecKeyChain.Remove(secRecord)。我发现如果不包括这一点,我可能会让设备进入一种奇怪的状态,在这种状态下,它会尝试在每次调用SecKeyChain.Add(secRecord)时向用户进行身份验证

代码语言:javascript
复制
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;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6191592

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档