Xamarin.iOS
टच आईडी
खोज…
पैरामीटर
स्तंभ | स्तंभ |
---|---|
सेल | सेल |
टिप्पणियों
सबसे पहले, स्थापित करें कि डिवाइस टच आईडी इनपुट को स्वीकार करने में सक्षम है या नहीं।
if (context.CanEvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, out AuthError))
अगर ऐसा होता है तो हम टच आईडी यूआई का उपयोग करके प्रदर्शित कर सकते हैं:
context.EvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, myReason, replyHandler);
जानकारी के तीन टुकड़े हैं जिन्हें हमें EvaluatePolicy
में पारित करना होगा - नीति ही, एक स्ट्रिंग जो यह समझाती है कि प्रमाणीकरण क्यों आवश्यक है, और एक उत्तर हैंडलर है। उत्तर हैंडलर एप्लिकेशन को बताता है कि उसे सफल, या असफल, प्रमाणीकरण के मामले में क्या करना चाहिए।
लोकल ऑथेंटिकेशन के InvokeOnMainThread
से एक यह है कि इसे अग्रभूमि पर चलाया जाना चाहिए, इसलिए उत्तर हैंडलर के लिए InvokeOnMainThread
का उपयोग करना सुनिश्चित करें:
var replyHandler = new LAContextReplyHandler((success, error) =>
{
this.InvokeOnMainThread(() =>
{
if (success)
{
Console.WriteLine("You logged in!");
PerformSegue("AuthenticationSegue", this);
}
else {
//Show fallback mechanism here
}
});
});
यह निर्धारित करने के लिए कि क्या अधिकृत फ़िंगरप्रिंट के डेटाबेस को संशोधित किया गया है, आप context.EvaluatedPolicyDomainState
द्वारा लौटा हुआ अपारदर्शी संरचना (NSData) की जांच कर सकते हैं। context.EvaluatedPolicyDomainState
। आपके ऐप को परिवर्तनों का पता लगाने के लिए नीति स्थिति को संग्रहीत और तुलना करने की आवश्यकता होगी। एक बात पर ध्यान दें जो Apple बताता है:
हालाँकि, परिवर्तन की प्रकृति इस डेटा से निर्धारित नहीं की जा सकती है।
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);
};
अपने ऐप में टच आईडी जोड़ें
सबसे पहले, स्थापित करें कि डिवाइस टच आईडी इनपुट को स्वीकार करने में सक्षम है या नहीं।
if (context.CanEvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, out AuthError))
अगर ऐसा होता है तो हम टच आईडी यूआई का उपयोग करके प्रदर्शित कर सकते हैं:
context.EvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, myReason, replyHandler);
जानकारी के तीन टुकड़े हैं जिन्हें हमें EvaluatePolicy
में पारित करना होगा - नीति ही, एक स्ट्रिंग जो यह समझाती है कि प्रमाणीकरण क्यों आवश्यक है, और एक उत्तर हैंडलर है। उत्तर हैंडलर एप्लिकेशन को बताता है कि उसे सफल, या असफल, प्रमाणीकरण के मामले में क्या करना चाहिए।
लोकल ऑथेंटिकेशन के InvokeOnMainThread
से एक यह है कि इसे अग्रभूमि पर चलाया जाना चाहिए, इसलिए उत्तर हैंडलर के लिए InvokeOnMainThread
का उपयोग करना सुनिश्चित करें:
var replyHandler = new LAContextReplyHandler((success, error) =>
{
this.InvokeOnMainThread(() =>
{
if (success)
{
Console.WriteLine("You logged in!");
PerformSegue("AuthenticationSegue", this);
}
else {
//Show fallback mechanism here
}
});
});
यह निर्धारित करने के लिए कि क्या अधिकृत फ़िंगरप्रिंट के डेटाबेस को संशोधित किया गया है, आप context.EvaluatedPolicyDomainState
द्वारा लौटा हुआ अपारदर्शी संरचना (NSData) की जांच कर सकते हैं। context.EvaluatedPolicyDomainState
। आपके ऐप को परिवर्तनों का पता लगाने के लिए नीति स्थिति को संग्रहीत और तुलना करने की आवश्यकता होगी। एक बात पर ध्यान दें जो Apple बताता है:
हालाँकि, परिवर्तन की प्रकृति इस डेटा से निर्धारित नहीं की जा सकती है।
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);
};
बटन उदाहरण
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
};
}
किचेन का उपयोग करना
वर्किंग सोर्स - https://github.com/benhysell/V.TouchIdExample
लंबे रूप का विवरण - 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;
}
}