Worked on Face Lock issues that were not functioning properly across different devices, including R&D to handle device and OS version compatibility.

This commit is contained in:
mansi-dev
2026-01-22 23:57:53 +05:30
parent 410305a3b7
commit 063b0009a4
8 changed files with 3137 additions and 23 deletions

3036
ios/Podfile.lock Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -11,6 +11,7 @@
13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
761780ED2CA45674006654EE /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 761780EC2CA45674006654EE /* AppDelegate.swift */; };
81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; };
AC40AE863A1BE7BA9152BD0A /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB81A68108700A75B9A /* PrivacyInfo.xcprivacy */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
@@ -159,6 +160,7 @@
files = (
81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */,
13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */,
AC40AE863A1BE7BA9152BD0A /* PrivacyInfo.xcprivacy in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -366,6 +368,7 @@
);
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
OTHER_CFLAGS = "$(inherited)";
OTHER_CPLUSPLUSFLAGS = (
"$(OTHER_CFLAGS)",
"-DFOLLY_NO_CONFIG",
@@ -374,7 +377,10 @@
"-DFOLLY_CFG_NO_COROUTINES=1",
"-DFOLLY_HAVE_CLOCK_GETTIME=1",
);
REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
SDKROOT = iphoneos;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) DEBUG";
USE_HERMES = true;
};
name = Debug;
};
@@ -431,6 +437,7 @@
"\"$(inherited)\"",
);
MTL_ENABLE_DEBUG_INFO = NO;
OTHER_CFLAGS = "$(inherited)";
OTHER_CPLUSPLUSFLAGS = (
"$(OTHER_CFLAGS)",
"-DFOLLY_NO_CONFIG",
@@ -439,7 +446,9 @@
"-DFOLLY_CFG_NO_COROUTINES=1",
"-DFOLLY_HAVE_CLOCK_GETTIME=1",
);
REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
SDKROOT = iphoneos;
USE_HERMES = true;
VALIDATE_PRODUCT = YES;
};
name = Release;

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "group:authenticationsdk.xcodeproj">
</FileRef>
<FileRef
location = "group:Pods/Pods.xcodeproj">
</FileRef>
</Workspace>

View File

@@ -28,7 +28,6 @@
<true/>
<key>NSAppTransportSecurity</key>
<dict>
<!-- Do not change NSAllowsArbitraryLoads to true, or you will risk app rejection! -->
<key>NSAllowsArbitraryLoads</key>
<false/>
<key>NSAllowsLocalNetworking</key>
@@ -36,6 +35,8 @@
</dict>
<key>NSLocationWhenInUseUsageDescription</key>
<string></string>
<key>RCTNewArchEnabled</key>
<true/>
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
<key>UIRequiredDeviceCapabilities</key>

View File

@@ -4,20 +4,22 @@
<dict>
<key>NSPrivacyAccessedAPITypes</key>
<array>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryFileTimestamp</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>C617.1</string>
</array>
</dict>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryUserDefaults</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>CA92.1</string>
<string>1C8F.1</string>
<string>C56D.1</string>
</array>
</dict>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryFileTimestamp</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>C617.1</string>
</array>
</dict>
<dict>

39
package-lock.json generated
View File

@@ -15,7 +15,9 @@
"react-native": "0.83.1",
"react-native-biometrics": "^3.0.1",
"react-native-keychain": "^10.0.0",
"react-native-safe-area-context": "^5.5.2"
"react-native-safe-area-context": "^5.5.2",
"react-native-vision-camera": "^4.7.3",
"vision-camera-face-detector": "^0.1.8"
},
"devDependencies": {
"@babel/core": "^7.25.2",
@@ -10135,6 +10137,30 @@
"react-native": "*"
}
},
"node_modules/react-native-vision-camera": {
"version": "4.7.3",
"resolved": "https://registry.npmjs.org/react-native-vision-camera/-/react-native-vision-camera-4.7.3.tgz",
"integrity": "sha512-g1/neOyjSqn1kaAa2FxI/qp5KzNvPcF0bnQw6NntfbxH6tm0+8WFZszlgb5OV+iYlB6lFUztCbDtyz5IpL47OA==",
"license": "MIT",
"peerDependencies": {
"@shopify/react-native-skia": "*",
"react": "*",
"react-native": "*",
"react-native-reanimated": "*",
"react-native-worklets-core": "*"
},
"peerDependenciesMeta": {
"@shopify/react-native-skia": {
"optional": true
},
"react-native-reanimated": {
"optional": true
},
"react-native-worklets-core": {
"optional": true
}
}
},
"node_modules/react-native/node_modules/commander": {
"version": "12.1.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz",
@@ -11738,6 +11764,17 @@
"node": ">= 0.8"
}
},
"node_modules/vision-camera-face-detector": {
"version": "0.1.8",
"resolved": "https://registry.npmjs.org/vision-camera-face-detector/-/vision-camera-face-detector-0.1.8.tgz",
"integrity": "sha512-nlfOMjuHQF66gI162ZCSnmXbinYqNA0+NPzmjZxUwXPOAQidNqLERC8W9LBXhbnIJyMmflMT9X1utpF1D0TlAg==",
"license": "MIT",
"peerDependencies": {
"react": "*",
"react-native": "*",
"react-native-vision-camera": ">= 2"
}
},
"node_modules/vlq": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/vlq/-/vlq-1.0.1.tgz",

View File

@@ -17,7 +17,9 @@
"react-native": "0.83.1",
"react-native-biometrics": "^3.0.1",
"react-native-keychain": "^10.0.0",
"react-native-safe-area-context": "^5.5.2"
"react-native-safe-area-context": "^5.5.2",
"react-native-vision-camera": "^4.7.3",
"vision-camera-face-detector": "^0.1.8"
},
"devDependencies": {
"@babel/core": "^7.25.2",

View File

@@ -1,17 +1,34 @@
import ReactNativeBiometrics from 'react-native-biometrics';
import React, { useEffect } from "react";
import { View, Text } from "react-native";
import { Camera, useCameraDevices } from "react-native-vision-camera";
import { useFaceDetector } from "vision-camera-face-detector";
const rnBiometrics = new ReactNativeBiometrics();
export default function FaceRecognition() {
const devices = useCameraDevices();
const device = devices.front;
export const authenticateUser = async () => {
const { available, biometryType } = await rnBiometrics.isSensorAvailable();
useEffect(() => {
Camera.requestCameraPermission();
}, []);
if (!available) {
return false;
}
const faceDetector = useFaceDetector({
landmarkMode: "all",
performanceMode: "fast",
});
const result = await rnBiometrics.simplePrompt({
promptMessage: 'Unlock using Face ID',
});
if (!device) return <Text>Loading camera...</Text>;
return result.success;
};
return (
<View style={{ flex: 1 }}>
<Camera
style={{ flex: 1 }}
device={device}
isActive={true}
faceDetector={faceDetector}
faceDetectionCallback={(faces) => {
console.log("Faces:", faces);
}}
/>
</View>
);
}