如何访问新的iPhone X的FaceID?
iPhone X推出FaceID解锁手机并制作Apple Pay。如何访问新的iPhone X的FaceID?
我们可以访问API吗?
我知道上次我们必须等到TouchID发布给开发人员。
也许有什么日期?
它实际上已经可以在Xcode 9中找到TouchID功能。例如,Look at LocalAuthentication -> LAContext ->LABiometryType
。
如果您查看更高级别的文档LAContext
,则新API现在可以在其上找到“Beta”标签(假设这些将在Xcode 9 & iOS 11正式发布后立即删除) 。
您是否能够在实际设备上使用此功能?在模拟器上,它对我来说工作正常。但在具有iOS 11的设备上,我得到: - [LAContext biometryType]:无法识别的选择器发送到实例。 – r3c0d3
请看下面的“答案”@ r3c0d3(它应该是一个注释):“Xcode 9.1 beta(9B37)对Face ID有工作支持。” –
谢谢,我应该更清楚我的问题。我确实在Xcode 9.1 beta(9B37)的模拟器中看到了Face ID的功能。但是,如果我在仅具有TouchID的iOS 11.0设备上构建,则调用LAContext()。biometryType表示它是无法识别的选择器。我想使用biometryType为不同的生物识别功能呈现不同的用户界面。 – r3c0d3
有评论这里的答案,每个告诉只是故事的一部分,所以让我们把他们聚在一起:
如前所述by @Paulw11 in comments,这些API用于提供与触摸ID认证 - LAContext
canEvaluatePolicy
检查对于可用性,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:LAContext
biometryType
告诉你哪种生物识别当前设备支持。
如果相同的API用于调用Touch ID和Face ID,那么为什么还需要新的东西?这是你的应用程序可以在你的用户界面中讨论它。想想所有的银行,信用卡和密码管理器以及您曾经使用过的应用程序 - 您使用密码登录该应用程序,之后会询问您下次是否要使用Touch ID而不是密码。所有这些都是来自这些应用程序开发人员的自定义用户界面,因此他们需要使用这个新的API,以便他们的UI可以根据当前设备正确说出“使用Touch ID”或“使用Face ID”。
嗯......这似乎不起作用(至少与模拟器)。如果我在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
名称。
我已经提供了这个答案,因为问题是关于什么时候可用的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很重要生物识别类型。
请注意,在刚刚发布的Xcode 9.2 beta版本中,对于iOS 11.2,“LABiometryType”枚举值已更改为“faceID”和“touchID”。 – tfrank377
@ 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仅设备的应用程序崩溃。
您只需使用您用于TouchID的相同API来请求生物特征验证。在iPhone X上,它将使用Face ID,在其他设备上使用TouchID – Paulw11