Как я могу наблюдать, когда пользователь аутентифицирует приложение с помощью биометрии?

Просто в коде я использую это так:

let context = LAContext()
if context.canEvaluatePolicy(.deviceOwnerAuthentication, error: nil)
    context.evaluatePolicy(.deviceOwnerAuthentication, localizedReason: "jjj") { success, error in
        print(error)
        print(success)
    }
}

Затем пользователь может увидеть:

Все хорошо, пока пользователь не нажмет Cancel, Затем я отображаю метку:

"Please use biometrics to authenticate", СЕЙЧАС мне нужно получить обратный вызов после проверки подлинности пользователя в любое время после отмены первой попытки. Как я могу это обнаружить?

2 ответа

Решение

Вам не нужен "обратный вызов" для этого. Если пользователь отказывается от аутентификации в ответ на диалоговое окно, аутентификация может произойти только в настройках, то есть за пределами вашего приложения. Так что просто проверяйте аутентификацию каждый раз, когда ваше приложение выходит на первый план.

Попробуйте с кодом Obj-C, я думаю, что Swift та же логика

self.context = [[LAContext alloc] init];
[self.context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics
        localizedReason:strMessage
                  reply:^(BOOL success, NSError *error) {

                      dispatch_async(dispatch_get_main_queue(), ^{

                          if (error) {
                              if (error.code == LAErrorUserFallback) {
                                  //Do some thing
                              }else if (error.code == LAErrorAuthenticationFailed) {
                                  //User authen failed
                              }else if (error.code == LAErrorUserCancel) {
                                  //User cancel
                              }else{
                                  //Something wrong...
                              }
                              return;
                          }

                          if (success) {
                             //Success
                          } else {
                            //Failed
                              return;
                          }
                      });

                  }];
Другие вопросы по тегам