标签: touch-id

取消的Touch ID返回未知错误,未取消

长期读者,第一次作家.感谢一个伟大的社区.

我正在开发的应用程序已经实现了应用内购买并且运行良好,但是我遇到了一个奇怪的错误情况,我没有看到明显的解决方案.可以在购买时使用Touch ID的iPhone 5S上看到该场景.当用户选择要购买的项目时,将弹出Touch ID对话框.如果用户取消这个特定的对话框中,SKPayment委托收到一个SKPaymentTransactionStateFailed与事件SKErrorUnknown代码- SKErrorPaymentCancelled为人们所期望的,当我取消密码输入对话框收到什么.由于代码无法将此分类为用户取消购买,因此用户将看到一般错误警报视图.我不认为这是一个沙盒问题,因为购买本身在沙箱和现场测试都很有效.

关于如何将未知错误检测为取消的想法,任何人?

iphone objective-c ios touch-id

5
推荐指数
0
解决办法
348
查看次数

Touch ID会冻结AVCaptureDevice

我有一个AVCaptureDevice在屏幕上显示实时相机预览.

当触摸ID视图覆盖在相机预览上时(使用CAContext's' evaluatePolicy),相机预览会冻结.取消触摸ID视图后,相机预览会在重新启动前闪烁黑屏.

冷冻和黑屏闪光都是有问题的.如何在Touch ID视图覆盖的情况下保持相机预览活动?

ios avcapturedevice touch-id ios8

5
推荐指数
1
解决办法
349
查看次数

becomeFirstResponder 有时在 ios 10 上打不开键盘

我正在使用代码创建本机触摸 ID 警报:

    let context = LAContext()

    guard deviceCanUseTouchId(context: context) else {
        return
    }

    presentingAlert = true
    [context.evaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, localizedReason: "touch_id_auth_message".localized(), reply: { [unowned self] success, error -> Void in
        self.presentingAlert = false
        self.canPresentAlert = true

        dispatch_async(dispatch_get_main_queue()) {    
            completionHandler?(success)
        }
    })]
Run Code Online (Sandbox Code Playgroud)

调用本机 Touch ID 警报的按钮处理程序如下所示:

@IBAction func touchUpInsideUseTouchIdButton(sender: AnyObject) {
    ACTouchId.sharedManager.authenticateWithTouchId(completionHandler: { [weak self] in
        self?.handleTouchIdAuthentication(granted: $0)
        })

    view.endEditing(true)
}
Run Code Online (Sandbox Code Playgroud)

这是handleTouchIdAuthentication的代码:

private func handleTouchIdAuthentication(granted granted: Bool) {
    if granted {
        //...
    } else {
        passcodeDigitTextField1.becomeFirstResponder()
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是,大多数时候,当我取消 Touch ID 本机对话框时,警报会正确关闭,并变为FirstResponder() …

becomefirstresponder ios touch-id swift ios10

5
推荐指数
1
解决办法
1570
查看次数

触摸ID未显示StoreKit

我正在使用StoreKit处理应用内购买,这非常有效.我
在网上找不到解决方案的唯一问题是:在尝试进行IAP的其他应用程序中,我被要求使用Touch ID(所以这不是我的设备设置错误等),而在我的应用程序中它始终要求用于密码.如何使用Touch ID进行iTunes身份验证?先感谢您!

storekit in-app-purchase ios touch-id swift

5
推荐指数
1
解决办法
483
查看次数

如果TouchID失败,请转发到系统密码验证

我想使用TouchID验证我的应用程序,验证成功.如果TouchID不匹配,则会打开"再试一次"警报,并在该警报中输入"密码"选项.如果用户选择该选项,则应显示系统密码验证,但我该怎么办呢?

在这里分享我的代码:

func touchIDAuthentication() {
    let context = LAContext() //1
    var error:NSError?
    guard context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &error) else {
        showAlertViewIfNoBiometricSensorHasBeenDetected()
        return
    }
    if context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &errorPointer) {
        context.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, localizedReason: reason, reply: { (success, error) in
            if success {
                DispatchQueue.main.async {
                    print("Authentication was successful")
                }
            }else {
                DispatchQueue.main.async {
                    self.displayErrorMessage(error: error as! LAError )
                    print("Authentication was error")
                }
            }
        })
    }else {
        self.showAlertWith(title: "Error", message: (errorPointer?.localizedDescription)!)
    }
}



func displayErrorMessage(error:LAError) {
        var message = ""
        switch error.code {
        case LAError.authenticationFailed:
            message = …
Run Code Online (Sandbox Code Playgroud)

cocoa-touch ios touch-id swift localauthentication

5
推荐指数
2
解决办法
5742
查看次数

用户拒绝使用时无法检查Face ID

如果设备支持Face IDTouch ID,我想对用户采取不同的操作.

使用Face ID时,iOS要求使用权限.(与Touch ID不同).

如果用户拒绝权限,则context.biometryType返回LABiometryTypeNone.

无论如何都要检查设备支持的Touch IDFace ID.

LAContext *context = [[LAContext alloc] init];

NSError *error;

if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) {

}

if (@available(iOS 11.0, *)) {
    if (context.biometryType == LABiometryTypeFaceID) {
        // support FaceID 
    }
}

// support TouchID
Run Code Online (Sandbox Code Playgroud)

控制台输出

(lldb) po error
Error Domain=com.apple.LocalAuthentication Code=-6 "User has denied the use of biometry for this app." UserInfo={NSLocalizedDescription=User has denied the use of biometry for this …
Run Code Online (Sandbox Code Playgroud)

ios touch-id face-id

5
推荐指数
1
解决办法
1056
查看次数

如何显示输入密码并重试警报视图

所以我想进行touchid身份验证,但如果touchid不匹配,则会提示输入密码并重试

我正在使用 XCode 9.0.0

@IBAction func ac(_ sender: Any) {

    let context:LAContext=LAContext()
    if context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: nil){

        context.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, localizedReason: "use your touch id", reply: {(wasCorrect,error) in

            if wasCorrect {

                print("correct")
            }else{

                print("incorrect")
            }


        })
    }else{


    }
}
Run Code Online (Sandbox Code Playgroud)

xcode touch-id swift

5
推荐指数
1
解决办法
2603
查看次数

身份验证失败,再次尝试面容 ID 不执行任何操作

我只是按照本教程通过面容 ID 对用户进行身份验证,但实际上在身份验证失败后,它不适用于“再次尝试面容 ID”按钮,没有调用回调,我不知道为什么。这是代码:

@IBAction func touchIdAction(_ sender: UIButton) {

    print("hello there!.. You have clicked the touch ID")

    let myContext = LAContext()
    let myLocalizedReasonString = "Biometric Authntication testing !! "

    var authError: NSError?
    if #available(iOS 8.0, macOS 10.12.1, *) {
        if myContext.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &authError) {
            myContext.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, localizedReason: myLocalizedReasonString) { success, evaluateError in

                DispatchQueue.main.async {
                    if success {
                        // User authenticated successfully, take appropriate action
                        self.successLabel.text = "Awesome!!... User authenticated successfully"
                    } else {
                        // User did not authenticate successfully, look …
Run Code Online (Sandbox Code Playgroud)

ios touch-id swift face-id

5
推荐指数
1
解决办法
2079
查看次数

在不存储用户生物特征的情况下使用 Touch ID 或 Face ID

如果这个话题不适合 Stackoverflow,我提前道歉(我要求版主在适当的地方移动它)。谢谢。

我想知道应用程序如何使用 Touch ID 或 Face ID 来验证身份而不将生物识别数据存储到他们的服务器中。

没有 Touch/Face ID 的身份验证(此处过于简化)

  1. 用户登录他们的银行应用程序。
  2. 用户名和密码发送到服务器进行验证。
  3. 根据存储在银行服务器中的信息检查用户名和密码。
  4. 在有效的用户名和密码组合上,会发出一个令牌以用于当前会话。

在用户允许应用使用他们的 Touch/Face ID 之后...

使用 Touch/Face ID 进行身份验证

  1. 用户登录他们的银行应用程序。
  2. 他们使用 Touch/Face ID 进行验证

……这里发生了什么?发送到服务器要验证的内容是什么?

我读到生物识别数据存储在手机上的安全芯片中,而不存储在任何服务器上。

对于 iOS,除了 Touch/Face ID 包之外,我们还需要使用钥匙串访问。为什么?这里存储了什么?

谢谢你。

android ios touch-id face-id

5
推荐指数
1
解决办法
1185
查看次数

Swift 应用程序在关闭时有奇怪的行为

我正在开发一个在开头使用 Face/Touch ID 的应用程序。我通过将此 func 添加到我的 MainViewController() 来实现此目的:

let context = LAContext()

    if context.canEvaluatePolicy(.deviceOwnerAuthentication, error: nil) {
        context.evaluatePolicy(.deviceOwnerAuthentication, localizedReason: "Verifying") { (success, err) in
            if success {
                DispatchQueue.main.async {
                    self.loginSuccessfull()
                    self.button.removeFromSuperview()
                }
            } else {
                if let err = err {
                    print(err)
                }
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

这在 ViewDidLoad 和按钮中都会被调用,如本视频所示。

正如你所看到的,当我尝试关闭我的应用程序时,它有一个非常奇怪的行为,我确定这是由 FaceID 引起的。

有什么建议可以解决这个问题吗?

崩溃日志:

Error Domain=com.apple.LocalAuthentication Code=-4 "Caller moved to background." UserInfo={NSLocalizedDescription=Caller moved to background.}
Run Code Online (Sandbox Code Playgroud)

ios touch-id swift face-id

5
推荐指数
1
解决办法
438
查看次数