public void Authenticate(Action successAction, Action failAction)
        {
            FingerprintManagerCompat fingerprintManager = FingerprintManagerCompat.From(Android.App.Application.Context);
            const int          flags        = 0; /* always zero (0) */
            CryptoObjectHelper cryptoHelper = new CryptoObjectHelper();
            // Using the Support Library classes for maximum reach
            FingerprintManagerCompat fingerPrintManager = FingerprintManagerCompat.From(Android.App.Application.Context);

            // AuthCallbacks is a C# class defined elsewhere in code.
            FingerprintManagerCompat.AuthenticationCallback authenticationCallback = new AuthenticationCallBack();

            var page = new FingerprintAuthenticationPage((int)Android.OS.Build.VERSION.SdkInt);

            Xamarin.Forms.Application.Current.MainPage.Navigation.PushPopupAsync(page);

            MessagingCenter.Subscribe <string, string>("FingerprintAuthentication", "Authenticate", (sender, arg) =>
            {
                string result = arg;

                if (arg == "true")
                {
                    MessagingCenter.Unsubscribe <string, string>("FingerprintAuthentication", "Authenticate");
                    Device.BeginInvokeOnMainThread(() =>
                    {
                        Xamarin.Forms.Application.Current.MainPage.Navigation.PopPopupAsync();
                    });
                    //Do the thing when success to pass
                    if (successAction != null)
                    {
                        successAction.Invoke();
                    }
                }
                else if (arg == "false")
                {
                    Device.BeginInvokeOnMainThread(() =>
                    {
                        page.SetFailLabelText("Fail to authenticate!");
                    });
                }
                else
                {
                    MessagingCenter.Unsubscribe <string, string>("FingerprintAuthentication", "Authenticate");
                    Device.BeginInvokeOnMainThread(() =>
                    {
                        Xamarin.Forms.Application.Current.MainPage.Navigation.PopPopupAsync();
                    });
                    //Do the thing when fail to pass
                    if (failAction != null)
                    {
                        failAction.Invoke();
                    }
                }
            });



            cancellationSignal = new Android.Support.V4.OS.CancellationSignal();
            // Here is where the CryptoObjectHelper builds the CryptoObject.
            fingerprintManager.Authenticate(cryptoHelper.BuildCryptoObject(), flags, cancellationSignal, authenticationCallback, null);
        }
Exemplo n.º 2
0
        private void LogUserIn()
        {
            var authenticationCallback = new AuthenticationCallback(this, _userId);

            Toast.MakeText(this, "Place fingerprint on sensor", ToastLength.Long).Show();
            _fingerprintManager.Authenticate(null, 0, _cancellationSignal, authenticationCallback, null);
        }
Exemplo n.º 3
0
        private async Task <bool> Authenticate()
        {
            SimpleAuthCallbacks callback = new SimpleAuthCallbacks();

            Android.Content.Context context = Android.App.Application.Context;
            Permission isUsingFingerprint   = ContextCompat.CheckSelfPermission(context, Manifest.Permission.UseFingerprint);

            if (isUsingFingerprint == Permission.Granted)
            {
                Android.Support.V4.OS.CancellationSignal cancellationSignal = new Android.Support.V4.OS.CancellationSignal();
                CryptoObjectHelper       cryptHelper        = new CryptoObjectHelper();
                FingerprintManagerCompat fingerprintManager = FingerprintManagerCompat.From(context);
                fingerprintManager.Authenticate(
                    cryptHelper.BuildCryptoObject(),
                    (int)FingerprintAuthenticationFlags.None, /* flags */
                    cancellationSignal,
                    callback,
                    null
                    );
            }

            while (callback.IsWaiting)
            {
                await Task.Delay(87);
            }

            return(callback.Status == SimpleAuthCallbacks.AuthenticateResult.Success);
        }
Exemplo n.º 4
0
 private void LogUserIn()
 {
     _cancelation = new global::Android.Support.V4.OS.CancellationSignal();
     FingerprintManagerCompat.AuthenticationCallback authenticationCallback = new AuthenticationCallback(this, _userId);
     Toast.MakeText(this, "Place fingerprint on sensor", ToastLength.Long).Show();
     _fingerprintManagerCompat.Authenticate(null, 0, _cancelation, authenticationCallback, null);
 }
Exemplo n.º 5
0
        public void GetFingerprint(EventHandler evt, bool encrypt, byte[] data)
        {
            //make sure the device is secured
            KeyguardManager keyguardManager = (KeyguardManager)Application.Context.GetSystemService(Context.KeyguardService);

            if (!keyguardManager.IsKeyguardSecure)
            {
                return;
            }
            //make sure fingerprints are enrolled
            if (!m_fingerprintManager.HasEnrolledFingerprints)
            {
                return;
            }
            //check permissions
            Android.Content.PM.Permission permissionResult = ContextCompat.CheckSelfPermission(Application.Context, Manifest.Permission.UseFingerprint);
            if (permissionResult != Android.Content.PM.Permission.Granted)
            {
                return;
            }

            m_evt  = evt;
            m_data = data;
            m_mode = encrypt ? CipherMode.EncryptMode : CipherMode.DecryptMode;

            CryptoObjectHelper cryptoHelper = new CryptoObjectHelper();

            cancellationSignal = new Android.Support.V4.OS.CancellationSignal();

            //prompt user to scan their fingerprint
            m_fingerprintManager.Authenticate(cryptoHelper.BuildCryptoObject(m_mode), 0, cancellationSignal, this, null);
        }
Exemplo n.º 6
0
        public bool Login()
        {
            var retVal = true;

            Android.Content.PM.Permission permissionResult = ContextCompat.CheckSelfPermission(context, Manifest.Permission.UseFingerprint);

            if (permissionResult == Android.Content.PM.Permission.Granted)
            {
            }
            else
            {
                // No permission.
                // https://developer.android.com/training/permissions/requesting.html
            }

            FingerprintManagerCompat fingerprintManager = FingerprintManagerCompat.From(context);

            const int flags = 0;

            CryptoObjectHelper cryptoHelper = new CryptoObjectHelper();

            // cancellationSignal - stop scanning
            _cancellationSignal = new Android.Support.V4.OS.CancellationSignal();

            fingerprintManager = FingerprintManagerCompat.From(context);

            // Callback method
            FingerprintManagerCompat.AuthenticationCallback authenticationCallback = new AuthResultsCallback();

            // Start scanning
            fingerprintManager.Authenticate(cryptoHelper.BuildCryptoObject(), flags, _cancellationSignal, authenticationCallback, null);

            return(retVal);
        }
Exemplo n.º 7
0
        private void LogUserIn()
        {
            var cancellation = new Android.Support.V4.OS.CancellationSignal();

            FingerprintManagerCompat.AuthenticationCallback authenticationCallback = new AuthenticationCallback(this, userId);
            Toast.MakeText(this, "Поднесите палец к сенсору", ToastLength.Long).Show();
            fingerprintManager.Authenticate(null, 0, cancellation, authenticationCallback, null);
        }
Exemplo n.º 8
0
        private void UserFPMLogin()
        {
            var cancel = new global::Android.Support.V4.OS.CancellationSignal();

            FingerprintManagerCompat.AuthenticationCallback authentication = new AuthenticationCallback(this, UserId);
            Toast.MakeText(this, "Place fingerprint on sensor", ToastLength.Long).Show();
            fpm.Authenticate(null, 0, cancel, authentication, null);
        }
Exemplo n.º 9
0
        /// <summary>
        /// Initialize fingerprint authentication mechanism
        /// </summary>
        /// <param name="activity">Root activity</param>
        public static void FingerprintAuthenticate(Activity activity)
        {
            FingerprintManagerCompat fingerprint = FingerprintManagerCompat.From(activity);
            KeyguardManager          keyGuard    = activity.GetSystemService(Context.KeyguardService) as KeyguardManager;

            Android.Content.PM.Permission permission = activity.CheckSelfPermission(Android.Manifest.Permission.UseFingerprint);
            if (fingerprint.IsHardwareDetected &&
                keyGuard.IsKeyguardSecure &&
                fingerprint.HasEnrolledFingerprints &&
                permission == Android.Content.PM.Permission.Granted)
            {
                const int           flags        = 0;
                CryptoObjectFactory cryptoHelper = new CryptoObjectFactory();
                FingerprintManagerCompat.AuthenticationCallback authCallback = new AuthCallback(activity as Activities.LoginActivity);
                fingerprint.Authenticate(cryptoHelper.BuildCryptoObject(), flags, new Android.Support.V4.OS.CancellationSignal(), authCallback, null);
            }
        }
Exemplo n.º 10
0
        public void StartScanning()
        {
            const int flags = 0; /* always zero (0) */

            CryptoObjectHelper cryptoHelper = new CryptoObjectHelper();

            // cancellationSignal can be used to manually stop the fingerprint scanner.
            // On: cancellationSignal.Cancel();
            cancellationSignal = new CancellationSignal();

            // NOTE: For more security, like online transactions,etc...
            // Consider using Asymmetric keys
            // Send public key to server to identity user
            // When bio-auth succeed, send private to server to decrypted
            // https://android-developers.googleblog.com/2015/10/new-in-android-samples-authenticating.html

            // Start the fingerprint scanner.
            fingerprintManager.Authenticate(cryptoHelper.BuildCryptoObject(), flags, cancellationSignal, RegisterAuthCallback(), null);
            System.Diagnostics.Debug.WriteLine("Start scanning...");
        }
Exemplo n.º 11
0
        public Task <bool> Scan()
        {
            tcs = new TaskCompletionSource <bool>();
            var Context = Android.App.Application.Context;
            // Using the Android Support Library v4
            FingerprintManagerCompat fingerprintManager = FingerprintManagerCompat.From(Context);


            if (!fingerprintManager.IsHardwareDetected)
            {
                Toast.MakeText(Context, "FingerPrint authentication permission not enable", ToastLength.Short).Show();
                tcs.SetResult(false);
                return(tcs.Task);
            }

            if (!fingerprintManager.HasEnrolledFingerprints)
            {
                Toast.MakeText(Context, "Register at least one fingerprint in Settings", ToastLength.Short).Show();
            }
            else
            {
                const int flags = 0; /* always zero (0) */

                // CryptoObjectHelper is described in the previous section.
                CryptoObjectHelper cryptoHelper = new CryptoObjectHelper();

                // cancellationSignal can be used to manually stop the fingerprint scanner.
                var cancellationSignal = new Android.Support.V4.OS.CancellationSignal();


                // AuthenticationCallback is a base class that will be covered later on in this guide.
                //FingerprintManagerCompat.AuthenticationCallback authenticationCallback = new MyAuthCallbackSample(this);

                // Start the fingerprint scanner.
                fingerprintManager.Authenticate(cryptoHelper.BuildCryptoObject(), flags, cancellationSignal, this, null);

                Toast.MakeText(Context, "Put your finger to scan", ToastLength.Short).Show();
            }

            return(tcs.Task);
        }
Exemplo n.º 12
0
        public void fingerPrintDetection(Activity context)
        {
            // Using the Android Support Library v4
            FingerprintManagerCompat fingerprintManager = FingerprintManagerCompat.From(context);

            if (fingerprintManager.IsHardwareDetected)
            {
                if (fingerprintManager.HasEnrolledFingerprints)
                {
                    // The context is typically a reference to the current activity.
                    Android.Content.PM.Permission permissionResult = ContextCompat.CheckSelfPermission(context, Manifest.Permission.UseFingerprint);
                    if (permissionResult == Android.Content.PM.Permission.Granted)
                    {
                        // Permission granted - go ahead and start the fingerprint scanner.
                        CryptoObjectHelper cryptoHelper = new CryptoObjectHelper();
                        var cancellationSignal          = new Android.Support.V4.OS.CancellationSignal();

                        // AuthCallbacks is a C# class defined elsewhere in code.
                        FingerprintManagerCompat.AuthenticationCallback authenticationCallback = new SimpleAuthCallbacks(context);

                        // Here is where the CryptoObjectHelper builds the CryptoObject.
                        fingerprintManager.Authenticate(cryptoHelper.BuildCryptoObject(), (int)FingerprintAuthenticationFlags.None, cancellationSignal, authenticationCallback, null);
                    }
                    else
                    {
                        // No permission. Go and ask for permissions and don't start the scanner. See
                        // http://developer.android.com/training/permissions/requesting.html
                    }
                }
                else
                {
                    //user has not enrolled for fingerprint
                }
            }
            else
            {
                //Device is not compatible for fingerprint scanning
            }
        }
        /// <summary>
        /// Starts the authentication.
        /// </summary>
        public void StartAuthentication()
        {
            // Stop any previous scan.
            StopAuthentication();

            if (!InternalIsFingerprintAvailable())
            {
                return;
            }

            try
            {
                mCancellationSignal = new CancellationSignal();
                _fingerprintManager.Authenticate(CryptoObjectBuilder.Build(),
                                                 (int)FingerprintAuthenticationFlags.None,
                                                 mCancellationSignal,
                                                 new AuthenticationCallbacks(this),
                                                 null);
            }
            catch (Exception ex)
            {
                _authenticationCallback.AuthenticationError(AuthenticationErrorCodes.Unexpected, ex.Message);
            }
        }
Exemplo n.º 14
0
        internal void StartAuthentication(FingerprintManagerCompat fingerprintManager, FingerprintManagerCompat.CryptoObject cryptoObject)
        {
            CancellationSignal cancellationSignal = new CancellationSignal();

            fingerprintManager.Authenticate(cryptoObject, 0, cancellationSignal, this, null);
        }
 private void LogUserIn()
 {
     fingerprintStatusTextView.Text = "Authenticating...";
     FingerprintManagerCompat.AuthenticationCallback authenticationCallback = new AuthenticationCallback(this, "user321032");
     fingerprintManagerCompat.Authenticate(null, 0, cancelationSignal, authenticationCallback, null);
 }
Exemplo n.º 16
0
        public static async System.Threading.Tasks.Task Authenticate(DialogConfiguration dialogConfiguration)
        {
            //Android 10+ Q SdkInt 29+
            if ((int)Build.VERSION.SdkInt >= 29)
            {
                CancellationSignal BiometricCancellationSignal = new CancellationSignal();
                //Android 10
                BiometricCancellationSignal = new CancellationSignal();
                BiometricPrompt biometricPrompt;
                if (dialogConfiguration.IsUseAlternativeAuthentication)
                {
                    //Allow using PIN / Passcode as alternative, will disable crypto in authentication
                    biometricPrompt = new BiometricPrompt
                                      .Builder(Configuration.CurrentActivity)
                                      .SetTitle(dialogConfiguration.DialogTitle)
                                      .SetDescription(dialogConfiguration.DialogDescription)
                                      .SetDeviceCredentialAllowed(true)
                                      .Build();
                }
                else
                {
                    biometricPrompt = new BiometricPrompt
                                      .Builder(Configuration.CurrentActivity)
                                      .SetTitle(dialogConfiguration.DialogTitle)
                                      .SetDescription(dialogConfiguration.DialogDescription)
                                      .SetNegativeButton(dialogConfiguration.AlternativeActionMessage, Configuration.CurrentActivity.MainExecutor, new NegativeButtonOnClickListener(() =>
                    {
                        BiometricCancellationSignal.Cancel();
                        dialogConfiguration.AlternativeAction?.Invoke();
                    }))
                                      .Build();
                }
                BiometricPrompt.AuthenticationCallback authenticationCallback = new BiometricAuthenticationCallback();
                AuthenticationResult = null;
                AuthenticationResult = (arg) =>
                {
                    string result = arg;
                    if (arg == SystemMessages.Success)
                    {
                        BiometricCancellationSignal.Cancel();
                        dialogConfiguration.SuccessAction?.Invoke();
                    }
                    else if (arg == SystemMessages.Error)
                    {
                        BiometricCancellationSignal.Cancel();
                        dialogConfiguration.FailedAction?.Invoke();
                    }
                };
                if (dialogConfiguration.IsUseAlternativeAuthentication)
                {
                    //Secret key is not allowed to use when SetDeviceCredentialAllowed is true
                    biometricPrompt.Authenticate(BiometricCancellationSignal, Configuration.CurrentActivity.MainExecutor, authenticationCallback);
                }
                else
                {
                    if (Configuration.IsUseSecretKey)
                    {
                        CryptoObjectHelper cryptoHelper = new CryptoObjectHelper();
                        biometricPrompt.Authenticate(cryptoHelper.BuildBiometricPromptCryptoObject(), BiometricCancellationSignal, Configuration.CurrentActivity.MainExecutor, authenticationCallback);
                    }
                    else
                    {
                        biometricPrompt.Authenticate(BiometricCancellationSignal, Configuration.CurrentActivity.MainExecutor, authenticationCallback);
                    }
                }
            }
            //Android 9+ P SdkInt 28
            else if ((int)Build.VERSION.SdkInt >= 28)
            {
                //Android 9
                try
                {
                    CancellationSignal BiometricCancellationSignal = new CancellationSignal();
                    BiometricPrompt    biometricPrompt;
                    biometricPrompt = new BiometricPrompt
                                      .Builder(Configuration.CurrentActivity)
                                      .SetTitle(dialogConfiguration.DialogTitle)
                                      .SetDescription(dialogConfiguration.DialogDescription)
                                      .SetNegativeButton(dialogConfiguration.AlternativeActionMessage, Configuration.CurrentActivity.MainExecutor, new NegativeButtonOnClickListener(() =>
                    {
                        BiometricCancellationSignal.Cancel();
                        dialogConfiguration.AlternativeAction?.Invoke();
                    }))
                                      .Build();

                    BiometricCancellationSignal = new CancellationSignal();

                    BiometricPrompt.AuthenticationCallback authenticationCallback = new BiometricAuthenticationCallback();
                    AuthenticationResult = null;
                    AuthenticationResult = (arg) =>
                    {
                        string result = arg;
                        if (arg == SystemMessages.Success)
                        {
                            BiometricCancellationSignal.Cancel();
                            dialogConfiguration.SuccessAction?.Invoke();
                        }
                        else if (arg == SystemMessages.Error)
                        {
                            BiometricCancellationSignal.Cancel();
                            dialogConfiguration.FailedAction?.Invoke();
                        }
                    };
                    if (Configuration.IsUseSecretKey)
                    {
                        CryptoObjectHelper cryptoHelper = new CryptoObjectHelper();
                        biometricPrompt.Authenticate(cryptoHelper.BuildBiometricPromptCryptoObject(), BiometricCancellationSignal, Configuration.CurrentActivity.MainExecutor, authenticationCallback);
                    }
                    else
                    {
                        biometricPrompt.Authenticate(BiometricCancellationSignal, Configuration.CurrentActivity.MainExecutor, authenticationCallback);
                    }
                }
                catch (Exception ex)
                {
                    Configuration.CurrentActivity.RunOnUiThread(() =>
                    {
                        Toast.MakeText(Configuration.CurrentActivity, $"Throw exception : {ex.Message}", ToastLength.Long).Show();
                    });
                }
            }
            //Android 6+ to 8.x SdkInt 23
            else if ((int)Build.VERSION.SdkInt >= 23)
            {
                //Android 6+ to 8.x
                FingerprintManagerCompat fingerprintManager = FingerprintManagerCompat.From(Configuration.CurrentActivity);
                const int          flags        = 0; /* always zero (0) */
                CryptoObjectHelper cryptoHelper = new CryptoObjectHelper();
                // Using the Support Library classes for maximum reach
                FingerprintManagerCompat fingerPrintManager = FingerprintManagerCompat.From(Configuration.CurrentActivity);
                // AuthCallbacks is a C# class defined elsewhere in code.

                Android.Support.V4.OS.CancellationSignal        FingerprintCancellationSignal = new Android.Support.V4.OS.CancellationSignal();
                FingerprintManagerCompat.AuthenticationCallback authenticationCallback        = new AuthenticationCallBack();

                Android.Support.V4.App.FragmentTransaction transcation = ((FragmentActivity)Configuration.CurrentActivity).SupportFragmentManager.BeginTransaction();
                FingerprintDialog fingerprintDialog = new FingerprintDialog(dialogConfiguration, authenticationCallback, FingerprintCancellationSignal);
                fingerprintDialog.Show(transcation, "Dialog Fragment");

                AuthenticationResult = null;
                AuthenticationResult = (arg) =>
                {
                    string result = arg;
                    if (arg == SystemMessages.Success)
                    {
                        FingerprintCancellationSignal.Cancel();
                        dialogConfiguration.SuccessAction?.Invoke();
                    }
                    else if (arg == SystemMessages.Error)
                    {
                        FingerprintCancellationSignal.Cancel();
                        dialogConfiguration.FailedAction?.Invoke();
                    }
                };
                try
                {
                    fingerprintManager.Authenticate(cryptoHelper.BuildFingerprintManagerCompatCryptoObject(), flags, FingerprintCancellationSignal, authenticationCallback, null);
                }
                catch (Exception ex)
                {
                    Toast.MakeText(Configuration.CurrentActivity, $"Throw exception : {ex.Message}", ToastLength.Long);
                }
            }
        }