首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过生物识别api检查用户的生物计量偏好?

如何通过生物识别api检查用户的生物计量偏好?
EN

Stack Overflow用户
提问于 2019-04-09 08:26:04
回答 4查看 5.9K关注 0票数 8

大家都知道,从Android9.0开始,安卓引入了BiometricPrompt Api,为越来越多的生物识别传感器(如指纹、人脸ID等)提供标准的认证体验。

现在,通过这种新的BiometricPrompt,Api用户可以通过指纹、人脸扫描仪或虹膜扫描(取决于他们的生物特征偏好)进行身份验证。BiometricPrompt api将处理这一问题,并将通过各种回调通知我们。

下面是我显示生物识别提示的代码。

代码语言:javascript
复制
 biometricPrompt = new BiometricPrompt.Builder(context)
            .setTitle("FingerPrint Authentication")
            .setSubtitle("Login via Fingerprint")
            .setDescription("Touch Fingerprint Sensor")
            .setNegativeButton("Cancel", context.getMainExecutor(),
                    new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialogInterface, int i) {
                            Log.d(TAG,"Cancelled");
                        }
                    })
            .build();

现在,如果您看到我的代码,我将标题设置为指纹身份验证。现在在设备设置中,如果用户将生物识别首选项设置为Face 而不是 fingerprint ,则此将通过faceID对用户进行身份验证,即使用户一直触摸传感器,指纹传感器也无法工作。这将造成混淆,因为生物识别标题是说“指纹认证”和用户实际上是通过faceID认证的。

有什么方法可以让我们知道用户选择了什么生物识别偏好(例如指纹或FaceID)?因此,基于这种偏好,我可以在BiometricPrompt上显示适当的消息,这样用户就不会感到困惑。

我已经从BiometricPrompt中探索了所有api,但是可以找到任何与BiometricPreference相关的内容。

任何帮助都将不胜感激。

EN

回答 4

Stack Overflow用户

发布于 2019-06-18 11:52:30

目前还不可能知道这类信息,去年已经有一个问题开始要求它(https://issuetracker.google.com/issues/111315641)。由于Android试图简化开发人员在其应用程序中实现身份验证的路径,BiometricPrompt实现中缺少选项(参见BiometricPrompt实现的Android )。

票数 3
EN

Stack Overflow用户

发布于 2020-11-24 17:25:20

虽然不是一个完美的解决方案,但您可以使用PackageManager API来确定设备是否具有验证器硬件,例如:

代码语言:javascript
复制
if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_FACE))
{
}

我创建了一个助手类,如下所示:

代码语言:javascript
复制
class BiometricAuthenticator
{
 public enum BiometricType
 {
  FINGERPRINT,
  FACE, 
  IRIS,
  NONE
 }

 public static boolean hasBiometricAuthenticator(Context context)
 {
    int biometry = BiometricManager.BIOMETRIC_ERROR_UNSUPPORTED;
    if (VERSION.SDK_INT >= 30)
        biometry = BiometricManager.from(context).canAuthenticate(Authenticators.BIOMETRIC_STRONG | Authenticators.BIOMETRIC_WEAK);
    else
        biometry = BiometricManager.from(context).canAuthenticate();

    switch (biometry)
    {
        case BiometricManager.BIOMETRIC_ERROR_HW_UNAVAILABLE:
        case BiometricManager.BIOMETRIC_ERROR_NONE_ENROLLED:
        case BiometricManager.BIOMETRIC_ERROR_NO_HARDWARE:
             return (false);
        case BiometricManager.BIOMETRIC_SUCCESS:
             return true;
    }
    return (false);
 }

 /**
  * biometricType()
  *
  * returns type of biometry supported
  */
 public static BiometricType biometricType(Context context)
 {
    if (VERSION.SDK_INT < 23)
        return BiometricType.NONE;

    PackageManager packageManager = context.getPackageManager();

    // SDK 29 adds FACE and IRIS authentication
    if (VERSION.SDK_INT >= 29)
    {
        if (packageManager.hasSystemFeature(PackageManager.FEATURE_FACE))
            return BiometricType.FACE;
        if (packageManager.hasSystemFeature(PackageManager.FEATURE_IRIS))
            return BiometricType.IRIS;
        if (packageManager.hasSystemFeature(PackageManager.FEATURE_FINGERPRINT))
            return BiometricType.FINGERPRINT;
        return BiometricType.NONE;
    }

    // SDK 23-28 offer FINGERPRINT only
    return (packageManager.hasSystemFeature(PackageManager.FEATURE_FINGERPRINT) ? BiometricType.FINGERPRINT : BiometricType.NONE);
 }
}

这允许您确定是否存在生物鉴别器(hasBiometricAuthenticator),如果存在,则将身份验证器的类型作为BiometricType枚举返回。

理论上,一个设备可以有多个身份验证器,而biometricType()将返回API30+设备上的FACE、IRIS,然后按偏好顺序进行指纹识别。

希望Google将来能公开更好的API,但这些技巧至少有助于在对话框中获得适当的提示。

票数 3
EN

Stack Overflow用户

发布于 2020-01-13 17:35:43

在您的情况下,您可以简单地将标题字符串更改为“生物识别身份验证”,以及其他字符串。关于一个例子,请看下面的博客文章。

您的代码可能如下所示。但我还建议您使用strings.xml资源文件,而不是在代码中对字符串进行硬编码。例如,在将来,您可能需要翻译服务。

代码语言:javascript
复制
biometricPrompt = new BiometricPrompt.Builder(context)
        .setTitle("Biometric Authentication")
        .setSubtitle("Login via biometrics")
        .setDescription("Use the Biometrics Sensor")
        .setNegativeButton("Cancel", context.getMainExecutor(),
                new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        Log.d(TAG,"Cancelled");
                    }
                })
        .build();

更广泛地说,在API团队决定开发人员是否应该知道用户的生物特征偏好之前,必须评估其对隐私的影响。现在还不清楚为什么开发人员需要这些信息。已经发表了两篇关于生物特征以及如何实现它们的博客文章(博客一博客二)。除了这种区别(即强与弱)之外,用户喜欢或最终使用什么形式因素似乎不相关。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55588234

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档