今回はアプリ内でFaceID(TouchID)での認証を実装する方法についてです。
Xamarin.Formsでの実装方法を例に紹介していきます。
1.info.plistに
<key>NSFaceIDUsageDescription</key>
<string>Authenticate with FaceID</string>
を追加
2.Xamarin.Formsの場合、ネイティブの処理を呼び出すための共通プロジェクト内にインターフェースを定義
using System;
using System.Threading.Tasks;
namespace TestPrj {
public interface IAuth {
Task<bool> BioAuth();
}
}
3.iOSプロジェクト内にに認証処理を書く
using System;
using System.Threading.Tasks;
using Foundation;
using LocalAuthentication;
using TestPrj.iOS;
using UIKit;
using Xamarin.Forms;
[assembly: Dependency(typeof(Auth))]
namespace TestPrj.iOS {
public class Auth : IAuth {
public Auth(){}
public Task<bool> BioAuth() {
var cmp = new TaskCompletionSource<bool>();
var context = new LAContext();
NSError AuthError;
var localizedReason = new NSString("Auth");
// 生体認証可能かチェック
if (context.CanEvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, out AuthError)) {
var replyHandler = new LAContextReplyHandler((success, error) => {
Device.BeginInvokeOnMainThread(() => {
cmp.SetResult(success);
});
});
context.EvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, localizedReason, replyHandler);
} else if (context.CanEvaluatePolicy(LAPolicy.DeviceOwnerAuthentication, out AuthError)) {
// PIN認証
var replyHandler = new LAContextReplyHandler((success, error) => {
Device.BeginInvokeOnMainThread(() => {
cmp.SetResult(success);
});
});
context.EvaluatePolicy(LAPolicy.DeviceOwnerAuthentication, localizedReason, replyHandler);
} else {
//認証機能なし
var title = "認証不可";
var msg = "認証できません。";
Xamarin.Forms.Device.BeginInvokeOnMainThread(async () => {
await App.Current.MainPage.DisplayAlert(title, msg, "OK");
cmp.SetResult(false);
});
}
return cmp.Task;
}
}
}
4.共通プロジェクトで処理を呼び出す
var result = await DependencyService.Get<IAuth>().BioAuth();
以上です。