如何访问新的iPhone X的FaceID?

如何访问新的iPhone X的FaceID?

问题描述:

iPhone X推出FaceID解锁手机并制作Apple Pay。如何访问新的iPhone X的FaceID?

我们可以访问API吗?

我知道上次我们必须等到TouchID发布给开发人员。

也许有什么日期?

+1

您只需使用您用于TouchID的相同API来请求生物特征验证。在iPhone X上,它将使用Face ID,在其他设备上使用TouchID – Paulw11

它实际上已经可以在Xcode 9中找到TouchID功能。例如,Look at LocalAuthentication -> LAContext ->LABiometryType

如果您查看更高级别的文档LAContext,则新API现在可以在其上找到“Beta”标签(假设这些将在Xcode 9 & iOS 11正式发布后立即删除) 。

+0

您是否能够在实际设备上使用此功能?在模拟器上,它对我来说工作正常。但在具有iOS 11的设备上,我得到: - [LAContext biometryType]:无法识别的选择器发送到实例。 – r3c0d3

+0

请看下面的“答案”@ r3c0d3(它应该是一个注释):“Xcode 9.1 beta(9B37)对Face ID有工作支持。” –

+1

谢谢,我应该更清楚我的问题。我确实在Xcode 9.1 beta(9B37)的模拟器中看到了Face ID的功能。但是,如果我在仅具有TouchID的iOS 11.0设备上构建,则调用LAContext()。biometryType表示它是无法识别的选择器。我想使用biometryType为不同的生物识别功能呈现不同的用户界面。 – r3c0d3

有评论这里的答案,每个告诉只是故事的一部分,所以让我们把他们聚在一起:


如前所述by @Paulw11 in comments,这些API用于提供与触摸ID认证 - LAContextcanEvaluatePolicy检查对于可用性,evaluatePolicy实际上请求验证 - 对于面部识别ID的工作方式相同。您可能会注意到,所有这些API从未实际提及过Touch ID,只是摘录中的“生物识别技术”......这几乎就好像苹果公司在iOS 8发布该API时一样在考虑。

Apple's Craig Federighi证实这在a recent appearance on The Talk Show podcast。他表示,他和携带iPhone X的其他苹果员工一直在运行现有的应用程序 - 银行应用程序,航空应用程序等 - 使用这些API,并且它们只与Face ID一起工作。相同的API调用只会自动调用新的用户界面,除非它通常更快,因为用户可能已经在查看手机,因此他们无需执行任何操作。现在


,为@MichaelDautermann’s answer笔记,也有从面部识别区分触摸ID新的API:LAContextbiometryType告诉你哪种生物识别当前设备支持。

如果相同的API用于调用Touch ID和Face ID,那么为什么还需要新的东西?这是你的应用程序可以在你的用户界面中讨论它。想想所有的银行,信用卡和密码管理器以及您曾经使用过的应用程序 - 您使用密码登录该应用程序,之后会询问您下次是否要使用Touch ID而不是密码。所有这些都是来自这些应用程序开发人员的自定义用户界面,因此他们需要使用这个新的API,以便他们的UI可以根据当前设备正确说出“使用Touch ID”或“使用Face ID”。

+0

嗯......这似乎不起作用(至少与模拟器)。如果我在SIM卡中注册了TouchID或FaceID,就好像什么都没有发生。有没有我错过的技巧? –

Xcode 9.0.1和9.1 beta(9B37)对Face ID有工作支持。

API在Xcode 9.0 GM中不起作用。

而且,还有一个影响iOS 11.0.0(iOS 11的第一个公共版本)的错误,这会导致biometryType函数崩溃。因此,您必须使用此检查:

if #available(iOS 11.0.1, *) {...} 

AND,Apple更改了Xcode 9.2中的LABiometryType enum名称。

+1

我已经提供了这个答案,因为问题是关于什么时候可用的API。答案是“是的,你现在可以访问API,现在Apple已经在Xcode 9.1中修复了它,而在9.0.1中只是昨天”。选定的答案表明该API在Xcode 9.0中工作。这是行不通的。我从第一手经验和一篇文章中了解到这一点。有一个不能做任何事情的破坏API是相当无用的。 – Daniel

我可以证实,有一个错误在模拟器的Xcode 9

如果我使用的Xcode 9.1测试版,This code作品:

let authenticationContext = LAContext() 
var error: NSError? = nil 

if #available(iOS 11.0, *) { 
    if authenticationContext.canEvaluatePolicy(LAPolicy.deviceOwnerAuthenticationWithBiometrics, error: &error) { 
     let bioType = authenticationContext.biometryType 
     if bioType == .typeFaceID { 
      touchIDButton.setImage(UIImage(named:"FaceIDLogo"), for: UIControlState.normal) 
      touchIDButton.setImage(UIImage(named:"FaceIDLogo-Highlight"), for: UIControlState.highlighted) 
     } 
    } 
} 

我应该注意,检查之前运行LAContext.canEvaluatePolicy很重要生物识别类型。

+1

请注意,在刚刚发布的Xcode 9.2 beta版本中,对于iOS 11.2,“LABiometryType”枚举值已更改为“faceID”和“touchID”。 – tfrank377

+0

@ tfrank377当然。 > :(感谢提醒。 –

斯威夫特4

enum BioType { 
case kFace 
case kTouch 
case kNone 
} 

func checkForBiometry() -> BioType { 
    let context = LAContext() 

       if #available(iOS 11.0, *),context.responds(to: #selector(getter: LAContext.biometryType)) { 
      if context.biometryType == .typeFaceID { 

       return .kFace 
     } 
     return .kTouch 
    } 
    return .kNone 
} 
} 

编辑:

新增responds(to: #selector)检查与-[LAContext biometryType]: unrecognized selector在iOS 11.0.0仅设备的应用程序崩溃。