Beispiel #1
0
 public void CancelFingerprint()
 {
     if (cancellationSignal != null)
     {
         cancellationSignal.Cancel();
     }
 }
            public override void OnAuthenticationError(int errMsgId, ICharSequence errString)
            {
                bool   reportError = (errMsgId == (int)FingerprintState.ErrorCanceled);
                string debugMsg    = $"OnAuthenticationError: {errMsgId}:`{errString}`.";

                if (reportError)
                {
                    debugMsg += (errMsgId, errString.ToString());
                    debugMsg += " Reporting the error.";
                }
                else
                {
                    debugMsg += " Ignoring the error.";
                }

                Console.WriteLine(debugMsg);
                if (_tcsWeak.TryGetTarget(out var tcs))
                {
                    tcs.TrySetResult(new AuthenticationResult(false, debugMsg));
                }

                _cancellationSignal?.Cancel();
                _cancellationSignal?.Dispose();
                _cancellationSignal = null;

                _dialog.Dismiss();
            }
Beispiel #3
0
 internal void CancelAuthentication()
 {
     cancellationSignal?.Cancel();
     newCancelSignal?.Cancel();
     newCancelSignal    = null;
     cancellationSignal = null;
 }
Beispiel #4
0
 public void CancelCurrentAuthentication()
 {
     cancellationSignal.Cancel();
     Device.BeginInvokeOnMainThread(() =>
     {
         Xamarin.Forms.Application.Current.MainPage.Navigation.PopAllPopupAsync();
     });
 }
 /// <summary>
 /// Stops the authentication.
 /// </summary>
 public void StopAuthentication()
 {
     if (mCancellationSignal != null)
     {
         mCancellationSignal.Cancel();
         mCancellationSignal = null;
     }
 }
 public void CancelCurrentAuthentication()
 {
     MessagingCenter.Unsubscribe <string, string>("FingerprintAuthentication", "Authenticate");
     cancellationSignal.Cancel();
     Device.BeginInvokeOnMainThread(() =>
     {
         Xamarin.Forms.Application.Current.MainPage.Navigation.PopPopupAsync();
     });
 }
 void ReportAuthenticationFailed(string errorMessage)
 {
     System.Diagnostics.Debug.WriteLine(errorMessage);
     if (_tcsWeak.TryGetTarget(out var tcs))
     {
         tcs.TrySetResult(new AuthenticationResult(false, errorMessage));
     }
     _cancellationSignal.Cancel();
     _dialog.Dismiss();
 }
Beispiel #8
0
 public override async Task <SecureFingerprintAuthenticationResult> AuthenticateSecureNoDialogAsync(IAuthenticationFailedListener failedListener, string key, CancellationToken cancellationToken)
 {
     using (var cancellationSignal = new Android.Support.V4.OS.CancellationSignal())
         using (cancellationToken.Register(() => cancellationSignal.Cancel()))
         {
             CryptoObjectHelper crypto = new CryptoObjectHelper();
             var callback = new SecureFingerprintAuthenticationCallback(failedListener, key);
             GetServiceCompat().Authenticate(crypto.BuildCryptoObject(), (int)FingerprintAuthenticationFlags.None, cancellationSignal, callback, null);
             return(await callback.GetTask());
         }
 }
        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);
                }
            }
        }