Android指纹密码
使用场景以及方向
- 指纹解锁,在支持指纹识别的手机中,几乎每个支持指纹识别芯片的手机都支持指纹解锁,这也是指纹识别在手机中应用最多的场景了。在此基础上,有些手机可以支持不同的手指进入不同的桌面,有点类似Windows系统下多账户的意思,不同的是,别人根本看不出来。在我们APP开发中,如用户的一些操作,例如业务审批,请假审批,报销审批等一些需要对操作人员进行身份认证的项目
- 指纹支付,基于指纹识别技术,苹果、三星、魅族、ZUK等都推出了自家的支付解决方案,在国内,iPhone的指纹识别已经可以支持支付宝、微信支付,三星、魅族也是与支付宝进行合作,ZUK虽然没有公布具体的合作方,但已经指出在为支付宝、微信、财付通等进行调试。在我们APP开发中, p2p,消费金融,o2o,管理软件等项目中涉及到的一些用户操作,例如订单确认,指纹付款,指纹还贷,查看薪资等涉及到需要对操作人员进行身份认证,隐私安全类的项目
使用条件
- 手机是否支持指纹识别
- 手机是否录入了指纹
核心代码
-
BaseTools工具类,主要同于对是否能使用指纹密码进行的一些硬件检测等
//android6.0以及以上的api @RequiresApi(api = Build.VERSION_CODES.M) public static boolean isFinger() { FingerprintManager manager; KeyguardManager mKeyManager; manager = (FingerprintManager) ExApplication.mContext.getSystemService(Context.FINGERPRINT_SERVICE); mKeyManager = (KeyguardManager) ExApplication.mContext.getSystemService(Context.KEYGUARD_SERVICE); //android studio 上,没有这个会报错 if (ActivityCompat.checkSelfPermission( ExApplication.mContext, Manifest.permission.USE_FINGERPRINT) != PackageManager.PERMISSION_GRANTED) { return false; } //判断手机硬件是否支持指纹识别,如果不支持,那么则不能使用与指纹 有关的所有操作 if (!manager.isHardwareDetected()) { return false; } //判断 是否开启锁屏密码,可以提示用户去设置指纹解锁 if (!mKeyManager.isKeyguardSecure()) { return false; } //判断是否有指纹录入,可以提示用户去设置指纹解锁 if (!manager.hasEnrolledFingerprints()) { return false; } return true; }
-
zhiwen包是对于指纹密码的封装,FingerprintUiHelper只用于对指纹密码业务的封装所提供的主要接口
//识别失败 @Override public void onAuthenticationHelp(int helpMsgId, CharSequence helpString) { showError(helpString); } //识别失败 @Override public void onAuthenticationFailed() { showError(mIcon.getResources().getString( “指纹无法识别。再试一次!”)); } //识别成功 @Override public void onAuthenticationSucceeded(FingerprintManager.AuthenticationResult result) { mErrorTextView.removeCallbacks(mResetErrorTextRunnable); mIcon.setImageResource(R.drawable.ic_fingerprint_success); mErrorTextView.setTextColor( mErrorTextView.getResources().getColor(R.color.success_color, null)); mErrorTextView.setText( mErrorTextView.getResources().getString(R.string.pin_code_fingerprint_success)); mIcon.postDelayed(new Runnable() { @Override public void run() { mCallback.onAuthenticated(); } }, SUCCESS_DELAY_MILLIS); }
注意
- 1.在app开发中,指纹密码无法得到任何标识,官方目前只提供指纹校验成功与失败的方法
-
2.指纹密码,不能存储于自己的服务器,最多可以存储该用户是否启用了指纹密码识别功能。