BiometricPrompt:为什么我们应该在启用 setDeviceCredentialAllowed 之前检查 KeyguardManager.isDeviceSecure()?

2024-03-04

的文档BiometricPrompt.PromptInfo's setDeviceCredentialAllowed方法指出:

[...] 开发人员应在启用此功能之前首先检查 KeyguardManager.isDeviceSecure()。如果设备不安全,BiometricPrompt.ERROR_NO_DEVICE_CREDENTIAL 将在 BiometricPrompt.AuthenticationCallback.onAuthenticationError(int, CharSequence) 中返回。

https://developer.android.com/reference/androidx/biometric/BiometricPrompt.PromptInfo.Builder.html#setDeviceCredentialAllowed(boolean) https://developer.android.com/reference/androidx/biometric/BiometricPrompt.PromptInfo.Builder.html#setDeviceCredentialAllowed(boolean)

然而,为了首先启用生物识别身份验证,您必须设置设备 PIN 或密码。当我们已经有了这个检查(仅在 API 23+ 上可用)时,这不是多余的吗?BiometricManager.canAuthenticate?


这是一个很好的问题!提供逐步的响应可能很重要。首先,让我们将特定设备上发生的情况与应用程序中发生的情况分开。然后我们将解决更具体的问题。

Device

运行 API 23+ 的设备可能有也可能没有设置设备登录凭据。设备所有者无需设置设备 PIN、图案、密码或生物识别模板。这是一个选择。

App

无论设备登录凭据是否已设置,用户都应该能够安装您的应用程序。因此,您的应用程序的编写方式必须能够处理尚未设置登录凭据的用例。

回答您更具体的问题

推荐意见 https://medium.com/androiddevelopers/migrating-from-fingerprintmanager-to-biometricprompt-4bc5f570dccd是你传入一个CryptoObject to authenticate()实施生物识别 API 时。如果您遵循该建议,那么是的,您会检查canAuthenticate()打电话之前authenticate(promptInfo, cryptoObject)。造成这种情况的原因有很多,您可以通过阅读上面提到的博客文章来了解这些原因。

因为你的问题具体是关于setDeviceCredentialAllowed(true),重要的是要记住什么canAuthenticate()做。它检查三件事:设备上是否有可用的生物识别硬件、用户是否注册了模板,或者用户是否启用了生物识别身份验证。

因此,您不能使用canAuthenticate()就你而言,因为它完全与生物识别技术有关,而setDeviceCredentialAllowed(true)接受设备 PIN、图案或密码。

请注意,虽然建议您使用CryptoObject, setDeviceCredentialAllowed()不兼容CryptoObject也不与setNegativeButtonText().

附:您也可能会从阅读中受益这篇博文 https://android-developers.googleblog.com/2019/10/one-biometric-api-over-all-android.html.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

BiometricPrompt:为什么我们应该在启用 setDeviceCredentialAllowed 之前检查 KeyguardManager.isDeviceSecure()? 的相关文章

  • 如何在createQueryBuilder中使用通配符?

    在我的存储库类中 我使用 public function getItemsByTag tag qb this gt createQueryBuilder c gt select c gt where c tags LIKE bipolar
  • 如何使盒子阴影显示在容器中的下一个元素上?

    请看这段代码 http codepen io Varin pen kkGgVd http codepen io Varin pen kkGgVd div class container div class outside2 div clas
  • 使用 php 变量更改 css 类

    这里需要您的帮助 正如标题所示 我正在尝试使用 PHP 变量更改 css 类 所以基本上我想创建一个回显某些代码的循环 但我希望第一个循环中的 div 类有所不同 它应该被隐藏 这是我为使问题变得清晰而编写的简化代码 我不知道错误在哪里 请
  • 如何在odoo中重写js函数

    我想加载 shop checkout url 函数是 odoo define change info order website sale change info order function require use strict oe w
  • 如何在 Angular 2 中订阅 DOMContentLoaded 事件?

    我正在将 UI 主题从 Angular 1 移植到 Angular 2 在第 1 个版本中 我有 viewContentLoaded事件 我想将其重新制作为 Angular 2 我正在尝试使用 HostListener DOMContent
  • 为什么 .each 在我的 Rails 视图中完成后会重复数组? [复制]

    这个问题在这里已经有答案了 在我的 Rails 视图页面中 我有以下循环 它应该循环遍历我的 tag list 数组并打印每个标签 由于某种原因 它在打印每个单独的标签后会重复该数组 例如 这个数组有两个元素 ruby python 每个方
  • addEventListener keydown 不起作用

    我在互联网上找到了一些基本的 Pong 代码 并尝试添加按键 代码在这里 http cssdeck com labs ping pong game tutorial with html5 canvas and sounds http css
  • Google 地图 api 中的 infoWindow 数组

    我寻找错误 但找不到它 由于某种原因 任何谷歌地图信息窗口总是显示相同的信息 这是一个咖啡脚本代码 infowindow new google maps InfoWindow for company in companiesData mar
  • 使用 PowerShell 检查 AD 中是否存在组

    我想为该组创建代码来检查该组是否存在 但是 我无法开始工作 因为它成功地将用户和组的部分成员仅添加到一个组中 而不是其他组 因为我设法在活动目录中创建一个组并从 csv 中读取 这是我的代码和结果 似乎在成功添加用户并添加组成员后我总是收到
  • 新的 .NET 6 控制台模板中的 C# 函数重载不起作用

    我在尝试重载该函数时遇到错误Print object in the 新的 NET 6 C 控制台应用程序模板 https learn microsoft com en us dotnet core tutorials top level t
  • 如何在 yii 中设置 cron 作业

    我是 yii 的新手 我正在做一个项目 我写了一个向客户发送自动提醒的功能 假设这个函数位于 url http somedomain com index php somecontroller someaction 我想为此网址设置 cron
  • python中匹配3个或更多相同的字符

    我正在尝试使用正则表达式在字符串中查找三个或更多相同的字符 例如 你好 不匹配 噢 会的 我尝试过做类似的事情 re compile 1 3 a zA Z re compile w 1 5 但似乎都不起作用 w 1 2 是您正在寻找的正则表
  • Android 使用非公历

    我正在创建一个DatePickerDialogFragment用户将在其中选择出生日期 我想确保我可以处理非公历日期 我无法更改在我的设备上使用的日历类型 Android 是否允许用户切换日历类型 如果是的话 步骤是什么 到目前为止我还没有
  • 如何在运行时更改 UIMenu 内 UIAction 的状态?

    如何更改 UIAction 的状态 目标是切换 UIMenu 内 UIAction 旁边的状态复选标记 更改 UIAction 的state通过存储在视图控制器中的引用似乎根本不会改变状态 我错过了什么吗 View Controller i
  • PDO 返回不正确但重复的数据。密钥不在数据库中。

    我刚开始使用 pdo 语句 所以可能是一些简单的东西 我还没有在 php net 上读过 查询数据库时我收到重复的结果 Result 0 gt Array umeta id gt 31 0 gt 31 user id gt 2 1 gt 2
  • Shap - 颜色条不显示在摘要图中

    显示summary plot时 不显示颜色条 shap summary plot shap values X train 我尝试过改变plot size 当绘图较高时 会出现颜色条 但它非常小 看起来不应该 shap summary plo
  • FindAsync 很慢,但是延迟加载很快

    在我的代码中 我曾经使用加载相关实体await FindAsync 希望我能更好地遵守 C 异步指南 var activeTemplate await exec DbContext FormTemplates FindAsync exec
  • Javascript:修改原型不会影响现有实例[重复]

    这个问题在这里已经有答案了 我创建了原型的 2 个实例 更改了原型中的函数 更改反映在两个实例中 很棒 但是 当我通过删除该函数来修改原型时 该函数对于现有实例仍然存在 function A this name cool A prototy
  • 如何检测文本是否可读?

    我想知道是否有一种方法可以告诉给定的文本是人类可读的 我所说的人类可读的意思是 它有一些含义 格式就像某人写的文章 或者至少是由软件翻译器生成的供人类阅读的文章 这是背景故事 最近我正在制作一个应用程序 允许用户将短文本上传到数据库 在部署
  • 如何使用反应本机在数字键盘上添加“完成”按钮

    我在react native中使用数字键盘 我想在单击完成按钮时隐藏键盘 因为我想在键盘上方添加完成按钮 是否有可能像IOS应用程序一样隐藏键盘 任何帮助非常感激 我不确定这是否正是您想要的 但您可以使用 prop returnKeyTyp

随机推荐

  • 在同一服务器上部署 ASP.net Ajax 1.0 和 3.5 Web 应用程序

    我们有一个生产服务器 其中运行 Ajax 1 0 的 ASP net 2 0 应用程序和相应的工具包 工具包版本 1 0 20229 我被要求使用 ASP net 3 5 移动另一个应用程序构建 该应用程序也利用了最新的 ASP NET A
  • 如何计算 NSArray 中的重复值?

    我的价值NSArray包括重复项 我找到了重复项 但现在我怎样才能找到没有 他们重复 您可以使用NSCountedSet http developer apple com library ios documentation Cocoa Re
  • pandas 过滤和比较日期

    我有一个 sql 文件 其中包含我读入 pandas 的数据 df pandas read sql Database count details con engine index col id parse dates newest avai
  • 雪花不旋转

    我需要转置一个表 其中column1 是实体的名称 column2 到column366 是一年中包含美元金额的日期 表 select语句 输出结果都给定了 以下 问题 此语法要求我创建一个逗号分隔的列列表 基本上是 365 个日期 并在
  • 找不到模块:错误:无法解析“sass-loader”

    刚接触 webpack 尝试让 sass loader 与我的 React 项目配合良好 已遵循教程 配置似乎正确 但结果始终是 无法解析 sass loader 我怀疑这是一些明显的错误 但我还没有通过任何搜索或谷歌搜索找到它 任何帮助表
  • 如何使用 jQuery (IE) 删除禁用属性[重复]

    这个问题在这里已经有答案了 我面临的情况是 我必须使用禁用属性来停用我不希望用户编辑的所有输入
  • iOS 7 UIImagePickerController 有黑色预览

    我有一个使用 sourceType 相机调用的 UIImagePickerController 80 的时间我得到黑色预览 如果我等待 假设大约 30 秒 我会得到一个很好的预览 并且在大约 50 的时间内它会很好 然后它可能会再次中断 所
  • 从 Private Repo 下载 Git 存档 tarball 时遇到问题

    我需要能够在特定标签下载我们的应用程序 但我无法为此找到可行的解决方案 基于 git 标签下载 tarball 似乎很有前途 但我无法使用 Curl 让它工作 我尝试了以下方法 但我得到的只是 github 404 页面的源代码 curl
  • C++ 使用计算参数调用超类构造函数

    也许这非常简单 但是有人可以告诉我如何使用子类构造函数中计算的参数来调用超类构造函数吗 像这样的东西 class A A int i int j class B A B int i B B int i int complex calcula
  • 如何在heroku应用程序中使用npm pdf图像包

    我正在尝试使用 npm 包 pdf image https www npmjs com package pdf image https www npmjs com package pdf image 对于部署在 heroku 上的应用程序
  • 设置minimumScaleFactor时UILabel获取当前比例因子?

    我有一个UILabel并设置 let label UILabel label minimumScaleFactor 10 25 设置标签文本后 我想知道当前的比例因子是多少 我怎样才能做到这一点 你还需要知道原始字体大小是多少 但我想你可以
  • getPackageManager().getInstalledPackages(PackageManager.GET_ACTIVITIES) 返回 null

    如果我打电话 PackageManager pm getPackageManager List
  • 在图像底部添加阴影

    如何在图像上添加阴影 在底部 以使标题清晰可见 请参见下图 我写了一个应用程序 也有同样的效果 我所做的是 我创建了一个框架布局其中有图像视图和另一个View它与 ImageView 具有相同的高度 然后我添加一个透明的渐变背景View E
  • TPC 继承错误

    我在使用 C Entity Framework Codefirst 和 Fluent Api 进行 TPC 继承时遇到了一个奇怪的问题 我有 3 个班级Person Invoice and PeriodicInvoice正如你在下面看到的
  • 如何创建我的数据的地铁地图可视化

    在一篇论文中找到了下面漂亮的图 http www ncbi nlm nih gov pubmed 25626705 http www ncbi nlm nih gov pubmed 25626705 它直观地展示了不同实验室的工作流程 并很
  • 在 Windows 平台上从 Node.js 连接 DB2

    我目前正在使用一些 jdbc 代码将 DB2 镜像到本地 MySQL db 我想直接从 Node js 应用程序连接 DB2 而无需查询镜像 我在 Windows 上运行 无法更改为 Linux 似乎使用 Node js 在 DB2 上进行
  • Visual Studio 2010:限制编辑器选项卡的数量

    Visual Studio 似乎不限制打开的编辑器选项卡的数量 我正在使用 ReSharper 在打开一定数量的编辑器选项卡时 速度变得非常慢 因此 我必须跟踪打开的选项卡并定期关闭旧选项卡 如果我可以设置一个限制 以便在达到限制时关闭旧选
  • 如何在启动时检索文件名

    我试图在 Excel 根据文件名打开时有条件地启动用户表单 但是 我相信代码在文件完全启动之前运行 给我一个错误 Private Sub Workbook Open Dim name As String name ActiveWorkboo
  • ui 路由器解析抛出错误 未找到提供程序

    我这里有一个 ui router 状态 var AccountParentState url Account views accountrootview stickA true AccountAddState url add views a
  • BiometricPrompt:为什么我们应该在启用 setDeviceCredentialAllowed 之前检查 KeyguardManager.isDeviceSecure()?

    的文档BiometricPrompt PromptInfo s setDeviceCredentialAllowed方法指出 开发人员应在启用此功能之前首先检查 KeyguardManager isDeviceSecure 如果设备不安全