如何检查用户设备是否使用 fingerprint/face 作为解锁方法。 [ReactNative] [世博会]
How to check if a user device is using fingerprint/face as unlock method. [ReactNative] [Expo]
我正在使用基于 Expo Toolkit 的 ReactNative 开发应用程序,我想知道如何检查用户是否正在使用指纹(iPhone 上的 TouchID)或面部检测([= 上的 FaceID) 21=] X>) 解锁设备。
我已经知道如何使用 Expo SDK 检查设备是否具有所需的硬件,如下所示:
let hasFPSupport = await Expo.Fingerprint.hasHardwareAsync();
但我需要检查用户是否在您的设备上选择 fingerprint/face 作为解锁方法,而不是图案或密码。
谢谢
我们可以检查设备是否已扫描指纹:
await Expo.Fingerprint.isEnrolledAsync()
因此,这可用于达到 objective,如下所示:
let hasFPSupport = await Expo.Fingerprint.hasHardwareAsync() && await Expo.Fingerprint.isEnrolledAsync();
目前,您可以通过检查 Expo.Fingerprint.hasHardwareAsync()
和 Expo.Fingerprint.isEnrolledAsync()
来确定用户是否拥有面容 ID,然后使用 Expo.Constants.platform
检查他们是否拥有 iPhone X (docs here).
所以:
const hasHardwareSupport = await Expo.Fingerprint.hasHardwareAsync() && await Expo.Fingerprint.isEnrolledAsync();`
if (hasHardwareSupport) {
const hasFaceIDSupport = Expo.Constants.platform.ios && Expo.Constants.platform.ios.model === 'iPhone X';
const hasTouchIDSupport = !hasFaceIDSupport;
}
这是对 Donald 的回答的更新,其中考虑了新 iPhone XS 型号名称的 Expo 空字符串。它还考虑了模拟器。
const hasHardwareSupport =
(await Expo.LocalAuthentication.hasHardwareAsync()) &&
(await Expo.LocalAuthentication.isEnrolledAsync());
let hasTouchIDSupport
let hasFaceIDSupport
if (hasHardwareSupport) {
if (Constants.platform.ios) {
if (
Constants.platform.ios.model === '' ||
Constants.platform.ios.model.includes('X')
) {
hasFaceIDSupport = true;
} else {
if (
Constants.platform.ios.model === 'Simulator' &&
Constants.deviceName.includes('X')
) {
hasFaceIDSupport = true;
}
}
}
hasTouchIDSupport = !hasFaceIDSupport;
}
编辑:Expo 发布了修复空白模型字符串的更新。但是,您可能需要检查一下,以防下一个 iPhone 发布周期导致同样的问题。
如果您尝试了上述答案但它不起作用,请注意在我的post expo 文档发生时已更改
- import * as LocalAuthentication from 'expo-local-authentication';
- let compatible = await LocalAuthentication.hasHardwareAsync()
我正在使用基于 Expo Toolkit 的 ReactNative 开发应用程序,我想知道如何检查用户是否正在使用指纹(iPhone 上的 TouchID)或面部检测([= 上的 FaceID) 21=] X>) 解锁设备。
我已经知道如何使用 Expo SDK 检查设备是否具有所需的硬件,如下所示:
let hasFPSupport = await Expo.Fingerprint.hasHardwareAsync();
但我需要检查用户是否在您的设备上选择 fingerprint/face 作为解锁方法,而不是图案或密码。
谢谢
我们可以检查设备是否已扫描指纹:
await Expo.Fingerprint.isEnrolledAsync()
因此,这可用于达到 objective,如下所示:
let hasFPSupport = await Expo.Fingerprint.hasHardwareAsync() && await Expo.Fingerprint.isEnrolledAsync();
目前,您可以通过检查 Expo.Fingerprint.hasHardwareAsync()
和 Expo.Fingerprint.isEnrolledAsync()
来确定用户是否拥有面容 ID,然后使用 Expo.Constants.platform
检查他们是否拥有 iPhone X (docs here).
所以:
const hasHardwareSupport = await Expo.Fingerprint.hasHardwareAsync() && await Expo.Fingerprint.isEnrolledAsync();`
if (hasHardwareSupport) {
const hasFaceIDSupport = Expo.Constants.platform.ios && Expo.Constants.platform.ios.model === 'iPhone X';
const hasTouchIDSupport = !hasFaceIDSupport;
}
这是对 Donald 的回答的更新,其中考虑了新 iPhone XS 型号名称的 Expo 空字符串。它还考虑了模拟器。
const hasHardwareSupport =
(await Expo.LocalAuthentication.hasHardwareAsync()) &&
(await Expo.LocalAuthentication.isEnrolledAsync());
let hasTouchIDSupport
let hasFaceIDSupport
if (hasHardwareSupport) {
if (Constants.platform.ios) {
if (
Constants.platform.ios.model === '' ||
Constants.platform.ios.model.includes('X')
) {
hasFaceIDSupport = true;
} else {
if (
Constants.platform.ios.model === 'Simulator' &&
Constants.deviceName.includes('X')
) {
hasFaceIDSupport = true;
}
}
}
hasTouchIDSupport = !hasFaceIDSupport;
}
编辑:Expo 发布了修复空白模型字符串的更新。但是,您可能需要检查一下,以防下一个 iPhone 发布周期导致同样的问题。
如果您尝试了上述答案但它不起作用,请注意在我的post expo 文档发生时已更改
- import * as LocalAuthentication from 'expo-local-authentication';
- let compatible = await LocalAuthentication.hasHardwareAsync()