如何为新 iPhone X 访问 FaceID?
How to access FaceID for new iPhone X?
iPhone X 即将推出 FaceID 以解锁 phone 并使用 Apple Pay。
我们可以访问 API 吗?
我知道上次我们必须等到 TouchID 发布给开发者。
大概什么时候有日期线?
它实际上已经在 Xcode 9 中可用,与发现 TouchID 功能的位置相同。 Look at LocalAuthentication -> LAContext -> LABiometryType
例如。
如果您查看更高级别的文档,LAContext
,目前可以找到新的 API,上面带有 "Beta" 标签(大概这些将是Xcode 9 和 iOS 11 正式发布后立即删除。
这里有一个评论和一个答案,每一个都只讲述了部分故事,所以让我们把它们放在一起:
如前所述 , the APIs for authenticating with Touch ID — LAContext
canEvaluatePolicy
to check for availability, evaluatePolicy
实际请求身份验证 - 与 Face ID 的工作方式相同。您可能会注意到,所有这些 API 从未真正提到 Touch ID,只是抽象的“生物识别技术”……这几乎就像 Apple 在 [=] 发布 API 时在超前思考一样30=] 8.
Apple 的 Craig Federighi 在 a recent appearance on The Talk Show podcast 中证实了这一点。他说,他和其他携带 iPhone X 的 Apple 员工已经 运行 现有应用程序——银行应用程序、航空公司应用程序等——使用这些 APIs,他们“只是工作”面部识别码。相同的 API 调用会自动调用新的 UI,只是它通常更快,因为用户可能已经在查看 phone,因此他们无需执行任何操作。
现在, notes, there are also new APIs for distinguishing Touch ID from Face ID: LAContext
biometryType
告诉您当前设备支持哪种生物识别技术。
如果相同的 API 可以同时调用 Touch ID 和 Face ID,为什么还有新功能?这样您的应用程序就可以在您的 UI 中谈论它。想一想所有银行、信用卡和密码管理器以及您曾经使用过的诸如此类的应用程序——您使用密码登录到该应用程序,然后它会询问您是否要在下次使用 Touch ID 而不是密码。所有这些都是这些应用程序开发人员自定义的 UI,因此他们需要使用这个新的 API,这样他们的 UI 才能正确地说“使用 Touch ID”或“使用 Face ID” ” 取决于当前设备。
Xcode 9.0.1 和 9.1 beta (9B37) 对 Face ID 提供了工作支持。
API 在 Xcode 9.0 GM 中不起作用。
并且,有一个错误会影响 iOS 11.0.0(iOS 11 的第一个 public 版本),这将导致 biometryType
函数碰撞。因此,您必须使用此检查:
if #available(iOS 11.0.1, *) {...}
并且,Apple 在 Xcode 9.2 中更改了 LABiometryType enum
名称。
我可以确认 Xcode 9.
的模拟器中存在错误
如果我使用 Xcode 9.1 beta,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 很重要。
Swift 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)
检查应用程序在 iOS 11.0.0 设备上崩溃 -[LAContext biometryType]: unrecognized selector
。
iPhone X 即将推出 FaceID 以解锁 phone 并使用 Apple Pay。
我们可以访问 API 吗?
我知道上次我们必须等到 TouchID 发布给开发者。
大概什么时候有日期线?
它实际上已经在 Xcode 9 中可用,与发现 TouchID 功能的位置相同。 Look at LocalAuthentication -> LAContext -> LABiometryType
例如。
如果您查看更高级别的文档,LAContext
,目前可以找到新的 API,上面带有 "Beta" 标签(大概这些将是Xcode 9 和 iOS 11 正式发布后立即删除。
这里有一个评论和一个答案,每一个都只讲述了部分故事,所以让我们把它们放在一起:
如前所述 LAContext
canEvaluatePolicy
to check for availability, evaluatePolicy
实际请求身份验证 - 与 Face ID 的工作方式相同。您可能会注意到,所有这些 API 从未真正提到 Touch ID,只是抽象的“生物识别技术”……这几乎就像 Apple 在 [=] 发布 API 时在超前思考一样30=] 8.
Apple 的 Craig Federighi 在 a recent appearance on The Talk Show podcast 中证实了这一点。他说,他和其他携带 iPhone X 的 Apple 员工已经 运行 现有应用程序——银行应用程序、航空公司应用程序等——使用这些 APIs,他们“只是工作”面部识别码。相同的 API 调用会自动调用新的 UI,只是它通常更快,因为用户可能已经在查看 phone,因此他们无需执行任何操作。
现在,LAContext
biometryType
告诉您当前设备支持哪种生物识别技术。
如果相同的 API 可以同时调用 Touch ID 和 Face ID,为什么还有新功能?这样您的应用程序就可以在您的 UI 中谈论它。想一想所有银行、信用卡和密码管理器以及您曾经使用过的诸如此类的应用程序——您使用密码登录到该应用程序,然后它会询问您是否要在下次使用 Touch ID 而不是密码。所有这些都是这些应用程序开发人员自定义的 UI,因此他们需要使用这个新的 API,这样他们的 UI 才能正确地说“使用 Touch ID”或“使用 Face ID” ” 取决于当前设备。
Xcode 9.0.1 和 9.1 beta (9B37) 对 Face ID 提供了工作支持。
API 在 Xcode 9.0 GM 中不起作用。
并且,有一个错误会影响 iOS 11.0.0(iOS 11 的第一个 public 版本),这将导致 biometryType
函数碰撞。因此,您必须使用此检查:
if #available(iOS 11.0.1, *) {...}
并且,Apple 在 Xcode 9.2 中更改了 LABiometryType enum
名称。
我可以确认 Xcode 9.
的模拟器中存在错误如果我使用 Xcode 9.1 beta,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 很重要。
Swift 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)
检查应用程序在 iOS 11.0.0 设备上崩溃 -[LAContext biometryType]: unrecognized selector
。