Ejemplo n.º 1
0
        internal void StartAuthentication(FingerprintManagerCompat fingerprintManager, FingerprintManagerCompat.CryptoObject cryptoObject)
        {
            CancellationSignal cancellationSignal = new CancellationSignal();

            fingerprintManager.Authenticate(cryptoObject, 0, cancellationSignal, this, null);
        }
        public Task <bool> AuthenticateUserIDWithTouchID()
        {
            var tcs = new TaskCompletionSource <bool>();//used to wait the mainUI to get the response of the touchId

            KeyguardManager          keyguardManager    = (KeyguardManager)context.GetSystemService(Context.KeyguardService);
            FingerprintManagerCompat fingerprintManager = FingerprintManagerCompat.From(context);

            if (Build.VERSION.SdkInt >= BuildVersionCodes.P)
            {
                if (ActivityCompat.CheckSelfPermission(context, Manifest.Permission.UseBiometric)
                    != (int)Android.Content.PM.Permission.Granted)
                {
                    return(tcs.Task);
                }
                if (!fingerprintManager.IsHardwareDetected)
                {
                    Toast.MakeText(context, "FingerPrint authentication permission not enable", ToastLength.Short).Show();
                }
                else
                {
                    if (!fingerprintManager.HasEnrolledFingerprints)
                    {
                        Toast.MakeText(context, "Register at least one fingerprint in Settings", ToastLength.Short).Show();
                    }
                    else
                    {
                        if (!keyguardManager.IsKeyguardSecure)
                        {
                            Toast.MakeText(context, "Lock screen security not enable in Settings", ToastLength.Short).Show();
                        }
                        else
                        {
                            GenKey();
                        }
                        if (CipherInit())
                        {
                            FingerprintManagerCompat.CryptoObject cryptoObject = new FingerprintManagerCompat.CryptoObject(cipher);
                            BiometricHandler handler = new BiometricHandler(context);
                            handler.StartAuthentication(fingerprintManager, cryptoObject);
                        }
                    }
                }
            }
            else if (Build.VERSION.SdkInt >= BuildVersionCodes.M)
            {
                if (ActivityCompat.CheckSelfPermission(context, Manifest.Permission.UseFingerprint)
                    != (int)Android.Content.PM.Permission.Granted)
                {
                    return(tcs.Task);
                }
                if (!fingerprintManager.IsHardwareDetected)
                {
                    Toast.MakeText(context, "FingerPrint authentication permission not enable", ToastLength.Short).Show();
                }
                else
                {
                    if (!fingerprintManager.HasEnrolledFingerprints)
                    {
                        Toast.MakeText(context, "Register at least one fingerprint in Settings", ToastLength.Short).Show();
                    }
                    else
                    {
                        if (!keyguardManager.IsKeyguardSecure)
                        {
                            Toast.MakeText(context, "Lock screen security not enable in Settings", ToastLength.Short).Show();
                        }
                        else
                        {
                            GenKey();
                        }
                        if (CipherInit())
                        {
                            FingerprintManagerCompat.CryptoObject cryptoObject = new FingerprintManagerCompat.CryptoObject(cipher);
                            BiometricHandler handler = new BiometricHandler(context);
                            handler.StartAuthentication(fingerprintManager, cryptoObject);
                        }
                    }
                }
            }
            else
            {
                return(tcs.Task);
            }
            tcs.SetResult(IsAutSucess);
            return(tcs.Task);
        }