标签:官网 名称 对话框 第一个 use dism string 点击 生物
最近在app端开发增加一个功能:设备锁 就是进入app时验证指纹或者锁屏密码。
首先看下翻译的官网文档 https://www.cnblogs.com/peterYong/p/12434683.html
系统默认每段时间内验证指纹次数为5次,如果5次后还没验证成功,则关闭验证,并且30秒内不允许再次验证,即使你调api也没用。
参考:【确认凭证】
https://docs.microsoft.com/zh-cn/xamarin/android/platform/marshmallow
注意:
核心是:调用系统的锁屏密码界面,输入密码,判断返回结果是否正确,正确则执行后续逻辑
KeyguardManager keyguardManager = (KeyguardManager)GetSystemService(Context.KeyguardService); Intent intent = keyguardManager.CreateConfirmDeviceCredentialIntent("输入锁屏密码", null); if (intent != null) { StartActivityForResult(intent, REQUEST_CODE_CONFIRM_DEVICE_CREDENTIALS); } protected override async void OnActivityResult(int requestCode, Result resultCode, Intent data) { if (requestCode == REQUEST_CODE_CONFIRM_DEVICE_CREDENTIALS && resultCode == Result.Ok) { if (resultCode == Result.Ok) { HUD hUD = new HUD(); hUD.ShowProgress(AppResource.加载中); await Task.Delay(500); StartMainActivity(); hUD.Dismiss(); } else { Toast.MakeText(this, "密码错误,请重试。", ToastLength.Long).Show(); } } }
Activity跳转及传递参数,参考:
startActivity与startActivityForResult的使用小结
到了AndroidP(Android9.0),FingerprintManager
就正式退役了,系统新增了BiometricPrompt
接口(包括面部识别)【暂未对接】
问题:
1、在实际运行中,碰到后续逻辑是比较耗时的情况,想提前关闭打开的锁屏界面,FinishActivity(REQUEST_CODE_CONFIRM_DEVICE_CREDENTIALS);
但是一直不生效。而且想打开一个进度圈提醒用户也不生效。
方案:于是将OnActivityResult 改为异步方法,等待500毫秒,再去打开进度圈。
2、CreateConfirmDeviceCredentialIntent 打开系统的锁屏密码输入框
对于Android10和以上版本的系统,会自动打开含指纹和密码的验证框;
对于Android10以下的,只会打开密码的验证框。想打开指纹验证框,需要自定义,见 Android的Fingerprint Authentication
canEvaluatePolicy:error:
方法用来检查当前设备是否可用touchID,返回一个BOOL值;不会弹验证指纹密码框evaluatePolicy:localizedReason:reply:
调用验证方法,会弹验证指纹密码框没有设置指纹,则会自动回退到锁屏密码框,都是调系统的弹窗!
1、说明
虽然安装iOS 7系统的5s机型可以使用系统提供的指纹解锁功能,但由于API并未开放,所以理论上第三方软件不可使用。
指纹验证功能的最低硬件支持为iPhone5s,iPad 6,iPad mini 3这些有touch ID硬件支持的设备。
2、TouchID 的校验方式
LAPolicyDeviceOwnerAuthenticationWithBiometrics :
生物指纹识别。验证弹框有两个按钮,第一个是取消按钮,第二个按钮可以自定义标题名称(输入密码)。只有在第一次指纹验证失败后才会出现第二个按钮,这种鉴定方式的第二个按钮的功能自定义。前三次指纹验证失败,指纹验证框不再弹出。再次重新进入验证,还有两次验证机会,如果还是验证失败,TOUCH ID 被锁住不再继续弹出指纹验证框。以后的每次验证都将会弹出设备密码输入框直至输入正确的设备密码方可解除TOUCH ID锁。
LAPolicyDeviceOwnerAuthentication:
生物指纹识别或系统密码验证。如果TOUCH ID 可用,且已经录入指纹,则优先调用指纹验证。其次是调用系统密码验证,如果没有开启设备密码,则不可以使用这种验证方式。指纹识别验证失败三次将弹出设备密码输入框,如果不进行密码输入。再次进来还可以有两次机会验证指纹,如果都失败则TOUCH ID被锁住,以后每次进来验证都是调用系统的设备密码直至输入正确的设备密码方可解除TOUCH ID锁。
验证错误枚举:
-1=LAErrorAuthenticationFailed, // 验证信息出错,就是说你指纹不对。【授权失败,代表连续三次指纹识别错误】
-2=LAErrorUserCancel // 用户取消了验证 【在TouchID对话框中点击了 取消按钮】
-3=LAErrorUserFallback // 用户点击了手动输入密码的按钮,所以被取消了
-4=LAErrorSystemCancel // 被系统取消,就是说你现在进入别的应用了【TouchID对话框被系统取消,例如按下Home或者电源键】
-5=LAErrorPasscodeNotSet // 用户设备没有设置密码
-6=LAErrorTouchIDNotAvailable // 用户设备不支持TouchID
-7=LAErrorTouchIDNotEnrolled // 用户没有设置手指指纹
-8=LAErrorTouchIDLockout // 用户错误次数太多,现在被锁住了 【三次之后,又错了两次,下一次需要输入系统密码】
-9=LAErrorAppCancel // 在验证中被其他app中断 【如突然来了电话,电话应用进入前台,APP被挂起啦】
-10=LAErrorInvalidContext // 请求验证出错
3、常见问题
版本问题
iOS 9 之前是没有LAErrorTouchIDLockout
锁定这个选项的,默认错误5次后;第6次验证是自动弹出输入密码界面;
iOS 9 之后(现在设备大多是这个版本)锁定指纹识别之后,如果需要立即弹出输入密码界面需要使用LAPolicyDeviceOwnerAuthentication
这个属性重新发起验证
EvaluatePolicy函数中第二个参数localizedReason
var localizedReason = new NSString("Verify fingerprint"); //验证指纹【下图再试一次下面的文字】,(参数不能为空,否则报错)
feedback按钮显示
feedBackTitle = @""
指纹识别慢的问题
参考:
TouchID--kLAErrorTouchIDLockout--解除
iOS 指纹识别常见问题汇总(**)
标签:官网 名称 对话框 第一个 use dism string 点击 生物
原文地址:https://www.cnblogs.com/peterYong/p/12510642.html