使用生物识别授权控件TBioMetricAuth

发布时间 2023-05-24 10:45:36作者: 红鱼儿

11.3带来一个新的不可视控件TBioMetricAuth,实现在Android和iOS 设备上通过生物识别技术(例如Face ID、指纹)进行授权。注意,对于Android平台,仅支持Android 10以上版本。

以下内容转组Delphi盒子:How to use TBioMetricAuth component FMX in Android project by Emailx45

1) Needs 2 permissions involved:
.....USE_BIOMETRIC = 11.3用这个权限
.....USE_FINGERPRINT = 小于11.3用这个权限2) Project->Options:
.....Entitlement List -> Biometric Authorization Service

 .....Permissions:

..........Use Biometric   (new IDE)
..........Use Fingerprint (旧版本用,新版本被Biometric取代)
或者在AndroidManifest.template.xml中直接增加

  <uses-permission android:name="android.permission.USE_BIOMETRIC"/> 

  <uses-permission android:name="android.permission.USE_FINGERPRINT"/>

3) TBiometricAuth component: mandatory choices:
.....BiometricAuth1.PromptDescription (必须设置)
.....BiometricAuth1.PromptTitle (必须设置)
.....BiometricAuth1.BiometricStrengths (必须设置)

4) Request/Rationale events from request permissions!
5) Biometric events if: success or failed!

on code:

var 
  PermissionBiometric: TArray<string>;
//...
OnCreate Form:
----------
PermissionBiometric := ['android.permission.USE_BIOMETRIC']; // , 'android.permission.USE_FINGERPRINT'];  // NOT mandatory!!!
BiometricAuth1.PromptDescription := 'my description'; // 必须设置
BiometricAuth1.PromptTitle       := 'my title'; // 必须设置
BiometricAuth1.BiometricStrengths := [ TBiometricStrength.DeviceCredential  { ,  others... }]; //BiometricStrengths属性指定所需的强度
//...
procedure TForm1.BiometricPermissionRequestResult(Sender: TObject; const APermissions: TClassicStringDynArray; const AGrantResults: TClassicPermissionStatusDynArray);
begin
  // 2 permissions involved: USE_BIOMETRIC / USE_FINGERPRINT
  if (Length(AGrantResults) = 1 {2}) and (AGrantResults[0] = TPermissionStatus.Granted) then // and (AGrantResults[1] = TPermissionStatus.Granted) then
    BiometricAuth1.Authenticate;
  //...
end;
//...
procedure TForm1.Button1Click(Sender: TObject);
begin
  PermissionsService.RequestPermissions( { }
    PermissionBiometric,          { }
    BiometricPermissionRequestResult);
end;
// ...
procedure TForm1.BiometricAuth1AuthenticateFail(Sender: TObject; const FailReason: TBiometricFailReason; const ResultMessage: string);
begin
  TDialogService.ShowMessage('Failed!');
end;

procedure TForm1.BiometricAuth1AuthenticateSuccess(Sender: TObject);
begin
  TDialogService.ShowMessage('Successed!');
end;