Suche…


Parameter

Säule Säule
Zelle Zelle

Bemerkungen

Stellen Sie zunächst fest, ob das Gerät die Touch ID-Eingabe akzeptieren kann.

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

Wenn dies der Fall ist, können Sie die Touch-ID-Benutzeroberfläche anzeigen, indem Sie Folgendes verwenden:

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

Es gibt drei Informationen, die wir an EvaluatePolicy - die Richtlinie selbst, eine Zeichenfolge, aus der hervorgeht, warum eine Authentifizierung erforderlich ist, und einen Antworthandler. Der Antworthandler teilt der Anwendung mit, was sie im Falle einer erfolgreichen oder erfolglosen Authentifizierung tun soll.

Eine der Einschränkungen der lokalen Authentifizierung besteht darin, dass sie im Vordergrund ausgeführt werden muss. InvokeOnMainThread daher sicher, dass Sie InvokeOnMainThread für den InvokeOnMainThread :

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

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

    });

Um festzustellen, ob die Datenbank autorisierter Fingerabdrücke geändert wurde, können Sie die von context.EvaluatedPolicyDomainState undurchsichtige Struktur (NSData) context.EvaluatedPolicyDomainState . Ihre App muss den Richtlinienstatus speichern und vergleichen, um Änderungen zu erkennen. Eine Sache, die Apple feststellt:

Die Art der Änderung kann jedoch nicht aus diesen Daten bestimmt werden.

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);
};

Fügen Sie Ihrer App eine Touch-ID hinzu

Stellen Sie zunächst fest, ob das Gerät die Touch ID-Eingabe akzeptieren kann.

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

Wenn dies der Fall ist, können Sie die Touch-ID-Benutzeroberfläche anzeigen, indem Sie Folgendes verwenden:

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

Es gibt drei Informationen, die wir an EvaluatePolicy - die Richtlinie selbst, eine Zeichenfolge, aus der hervorgeht, warum eine Authentifizierung erforderlich ist, und einen Antworthandler. Der Antworthandler teilt der Anwendung mit, was sie im Falle einer erfolgreichen oder erfolglosen Authentifizierung tun soll.

Eine der Einschränkungen der lokalen Authentifizierung besteht darin, dass sie im Vordergrund ausgeführt werden muss. InvokeOnMainThread daher sicher, dass Sie InvokeOnMainThread für den InvokeOnMainThread :

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

Um festzustellen, ob die Datenbank autorisierter Fingerabdrücke geändert wurde, können Sie die von context.EvaluatedPolicyDomainState undurchsichtige Struktur (NSData) context.EvaluatedPolicyDomainState . Ihre App muss den Richtlinienstatus speichern und vergleichen, um Änderungen zu erkennen. Eine Sache, die Apple feststellt:

Die Art der Änderung kann jedoch nicht aus diesen Daten bestimmt werden.

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);
};

Schaltflächenbeispiel

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
    };
}

Schlüsselbund verwenden

Arbeitsquelle - https://github.com/benhysell/V.TouchIdExample

Langformbeschreibung - http://benjaminhysell.com/archive/2014/11/authentication-in-xamarin-ios-with-touch-id-or-passcode/

//Simple View with a switch to enable / disable Touch ID and 
//a button to invoke authentication 

/// <summary>
/// Enable/Disable Touch ID
/// </summary>
/// <param name="sender">Sender.</param>
partial void TouchIdEnableDisable(UISwitch sender)
{
    if (sender.On)
    {
        //enable Touch ID          
        //set our record
        //note what you fill in here doesn't matter, just needs to be 
        //consistent across all uses of the record
        var secRecord = new SecRecord(SecKind.GenericPassword)
        {
            Label = "Keychain Item",
            Description = "fake item for keychain access",
            Account = "Account",
            Service = "com.yourcompany.touchIdExample",
            Comment = "Your comment here",
            ValueData = NSData.FromString("my-secret-password"),
            Generic = NSData.FromString("foo")
        };

        secRecord.AccessControl = new SecAccessControl(SecAccessible.WhenPasscodeSetThisDeviceOnly, SecAccessControlCreateFlags.UserPresence);
        SecKeyChain.Add(secRecord);
                                
        authenticateButton.Enabled = true;
    }
    else
    {
        //disable Touch ID
        var record = new SecRecord(SecKind.GenericPassword)
        {
            Service = "com.yourcompany.touchIdExample",
            UseOperationPrompt = "Authenticate to Remove Touch ID / Passcode from Test App"
        };

        SecStatusCode result;

        //query one last time to ensure they can remove it
        SecKeyChain.QueryAsRecord(record, out result);
        if (SecStatusCode.Success == result || SecStatusCode.ItemNotFound == result)
        {
            //remove the record
            SecKeyChain.Remove(record);
            authenticateButton.Enabled = false;
        }
        else
        {
            //could not authenticate, leave switch on
            sender.On = true;
         }                
    }
}

/// <summary>
/// Show Touch ID to user and evaluate authentication
/// </summary>
/// <param name="sender">Sender.</param>
partial void AuthenticateUser(UIButton sender)
{
    var rec = new SecRecord(SecKind.GenericPassword)
    {
        Service = "com.yourcompany.touchIdExample",
        UseOperationPrompt = "Authenticate to access Test App"
    };
    SecStatusCode res;
    SecKeyChain.QueryAsRecord(rec, out res);
    if (SecStatusCode.Success == res || SecStatusCode.ItemNotFound == res)
    {
        //Success!!  
        //add your code here to continue into your application
        AuthenticatedLabel.Hidden = false;
    }
    else
    {
        //Failure
        AuthenticatedLabel.Hidden = true;
    }
}


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow