Xamarin.iOS
ID tactile
Recherche…
Paramètres
Colonne | Colonne |
---|---|
Cellule | Cellule |
Remarques
Tout d'abord, déterminez si le périphérique est capable d'accepter une entrée Touch ID.
if (context.CanEvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, out AuthError))
Si c'est le cas, nous pouvons afficher l'interface utilisateur Touch ID en utilisant:
context.EvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, myReason, replyHandler);
Il y a trois informations à transmettre à EvaluatePolicy
: la politique elle-même, une chaîne expliquant pourquoi l'authentification est nécessaire et un gestionnaire de réponse. Le gestionnaire de réponse indique à l'application ce qu'il doit faire en cas de réussite ou d'échec de l'authentification.
L'une des mises en garde de l'authentification locale est qu'il doit être exécuté au premier plan. Veillez donc à utiliser InvokeOnMainThread
pour le gestionnaire de réponse:
var replyHandler = new LAContextReplyHandler((success, error) =>
{
this.InvokeOnMainThread(() =>
{
if (success)
{
Console.WriteLine("You logged in!");
PerformSegue("AuthenticationSegue", this);
}
else {
//Show fallback mechanism here
}
});
});
Pour déterminer si la base de données des empreintes digitales autorisées a été modifiée, vous pouvez vérifier la structure opaque (NSData) renvoyée par context.EvaluatedPolicyDomainState
. Votre application devra stocker et comparer l'état de la stratégie pour détecter les modifications. Une chose à noter: Apple déclare:
Cependant, la nature du changement ne peut pas être déterminée à partir de ces données.
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);
};
Ajouter un identifiant tactile à votre application
Tout d'abord, déterminez si le périphérique est capable d'accepter une entrée Touch ID.
if (context.CanEvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, out AuthError))
Si c'est le cas, nous pouvons afficher l'interface utilisateur Touch ID en utilisant:
context.EvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, myReason, replyHandler);
Il y a trois informations à transmettre à EvaluatePolicy
: la politique elle-même, une chaîne expliquant pourquoi l'authentification est nécessaire et un gestionnaire de réponse. Le gestionnaire de réponse indique à l'application ce qu'il doit faire en cas de réussite ou d'échec de l'authentification.
L'une des mises en garde de l'authentification locale est qu'il doit être exécuté au premier plan. Veillez donc à utiliser InvokeOnMainThread
pour le gestionnaire de réponse:
var replyHandler = new LAContextReplyHandler((success, error) =>
{
this.InvokeOnMainThread(() =>
{
if (success)
{
Console.WriteLine("You logged in!");
PerformSegue("AuthenticationSegue", this);
}
else {
//Show fallback mechanism here
}
});
});
Pour déterminer si la base de données des empreintes digitales autorisées a été modifiée, vous pouvez vérifier la structure opaque (NSData) renvoyée par context.EvaluatedPolicyDomainState
. Votre application devra stocker et comparer l'état de la stratégie pour détecter les modifications. Une chose à noter: Apple déclare:
Cependant, la nature du changement ne peut pas être déterminée à partir de ces données.
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);
};
Exemple de bouton
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
};
}
Utilisation du trousseau
Source de travail - https://github.com/benhysell/V.TouchIdExample
Description du formulaire long - 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;
}
}