2018-03-05

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.指纹密码,不能存储于自己的服务器,最多可以存储该用户是否启用了指纹密码识别功能。
    Screenshot_20180306-133810.png
Screenshot_20180306-133821.png

你可能感兴趣的:(2018-03-05)