Xamarin.iOS Añade Touch ID a tu aplicación


Ejemplo

Primero, establezca si el dispositivo es capaz de aceptar la entrada Touch ID.

if (context.CanEvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, out AuthError))

Si lo hace, entonces podemos mostrar la interfaz de usuario de Touch ID utilizando:

context.EvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, myReason, replyHandler);

Hay tres datos que debemos pasar a EvaluatePolicy : la política en sí misma, una cadena que explica por qué es necesaria la autenticación y un controlador de respuestas. El controlador de respuestas le dice a la aplicación lo que debe hacer en el caso de una autenticación exitosa o no exitosa.

Una de las advertencias de la autenticación local es que debe ejecutarse en primer plano, así que asegúrese de usar InvokeOnMainThread para el controlador de respuesta:

var replyHandler = new LAContextReplyHandler((success, error) =>
{
    this.InvokeOnMainThread(() =>
    {
        if (success)
        {
            Console.WriteLine("You logged in!");
            PerformSegue("AuthenticationSegue", this);
        }
        else {
            //Show fallback mechanism here
        }
    });
});

Para determinar si la base de datos de huellas dactilares autorizadas se ha modificado, puede verificar la estructura opaca (NSData) que devuelve context.EvaluatedPolicyDomainState . Su aplicación deberá almacenar y comparar el estado de la política para detectar cambios. Una cosa a tener en cuenta que Apple dice:

Sin embargo, la naturaleza del cambio no se puede determinar a partir de estos datos.

if (context.CanEvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, out AuthError))
{
    var policyState = context.EvaluatedPolicyDomainState;

    var replyHandler = new LAContextReplyHandler((success, error) =>
    {

        this.InvokeOnMainThread(() =>
        {
            if (success)
            {
                Console.WriteLine("You logged in!");
                PerformSegue("AuthenticationSegue", this);
            }
            else {
                //Show fallback mechanism here
            }
        });

    });
    context.EvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, myReason, replyHandler);
};

Ejemplo de botón

partial void AuthenticateMe(UIButton sender)
{
    var context = new LAContext();
    //Describes an authentication context 
    //that allows apps to request user authentication using Touch ID.
    NSError AuthError;
    //create the reference for error should it occur during the authentication.
    var myReason = new NSString("To add a new chore");
    //this is the string displayed at the window for touch id

    if (context.CanEvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, out AuthError)) 
    // check if the device have touchId capabilities.
    {
        var replyHandler = new LAContextReplyHandler((success, error) =>
        {

            this.InvokeOnMainThread(() =>
            {
                if (success)
                {
                    Console.WriteLine("You logged in!");
                    PerformSegue("AuthenticationSegue", this);
                }
                else {
                    //Show fallback mechanism here
                }
            });

        });
        context.EvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, myReason, replyHandler);//send touch id request
    };
}