@soyio/soyio-rn-sdk 2.3.1 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +287 -132
- package/android/build.gradle +56 -0
- package/android/libs/facetec-sdk-9.7.96.aar +0 -0
- package/android/src/main/AndroidManifest.xml +8 -0
- package/android/src/main/java/com/soyio/soyiorndk/AndroidFacetecSdkModule.kt +224 -0
- package/android/src/main/java/com/soyio/soyiorndk/AndroidFacetecSdkPackage.kt +16 -0
- package/android/src/main/java/com/soyio/soyiorndk/ApiDate.kt +5 -0
- package/android/src/main/java/com/soyio/soyiorndk/BaseFaceTecProcessor.kt +44 -0
- package/android/src/main/java/com/soyio/soyiorndk/FaceTecRequestService.kt +115 -0
- package/android/src/main/java/com/soyio/soyiorndk/FacetecConfig.kt +308 -0
- package/android/src/main/java/com/soyio/soyiorndk/SoyioIdOnlyProcessor.kt +81 -0
- package/android/src/main/java/com/soyio/soyiorndk/SoyioValidationProcessor.kt +134 -0
- package/android/src/main/res/values/strings.xml +134 -0
- package/assets/adaptive-icon.png +0 -0
- package/assets/favicon.png +0 -0
- package/assets/fonts/RobotoFlex.ttf +0 -0
- package/assets/icon.png +0 -0
- package/assets/images/SoyioRnSdk.xcassets/facetec-close.imageset/Contents.json +23 -0
- package/assets/images/SoyioRnSdk.xcassets/facetec-close.imageset/facetec-close@1x.png +0 -0
- package/assets/images/SoyioRnSdk.xcassets/facetec-close.imageset/facetec-close@2x.png +0 -0
- package/assets/images/SoyioRnSdk.xcassets/facetec-close.imageset/facetec-close@3x.png +0 -0
- package/assets/images/SoyioRnSdk.xcassets/facetec-id-front.imageset/Contents.json +23 -0
- package/assets/images/SoyioRnSdk.xcassets/facetec-id-front.imageset/facetec-id-front@1x.png +0 -0
- package/assets/images/SoyioRnSdk.xcassets/facetec-id-front.imageset/facetec-id-front@2x.png +0 -0
- package/assets/images/SoyioRnSdk.xcassets/facetec-id-front.imageset/facetec-id-front@3x.png +0 -0
- package/assets/splash.png +0 -0
- package/index.ts +14 -3
- package/ios/ApiDate.swift +5 -0
- package/ios/FacetecConfig.swift +217 -0
- package/ios/FacetecStrings.swift +139 -0
- package/ios/Frameworks/FaceTecSDK.framework/Assets.car +0 -0
- package/ios/Frameworks/FaceTecSDK.framework/FaceTecSDK +0 -0
- package/ios/Frameworks/FaceTecSDK.framework/GenericGuidanceContentLayout.nib +0 -0
- package/ios/Frameworks/FaceTecSDK.framework/Headers/FaceTecPublicApi.h +1935 -0
- package/ios/Frameworks/FaceTecSDK.framework/Headers/FaceTecPublicStringKeys.h +109 -0
- package/ios/Frameworks/FaceTecSDK.framework/Headers/FaceTecSDK.h +16 -0
- package/ios/Frameworks/FaceTecSDK.framework/Info.plist +0 -0
- package/ios/Frameworks/FaceTecSDK.framework/Modules/module.modulemap +6 -0
- package/ios/Frameworks/FaceTecSDK.framework/PrivacyInfo.xcprivacy +29 -0
- package/ios/Frameworks/FaceTecSDK.framework/ReadyScreenGuidanceContentLayout.nib +0 -0
- package/ios/Frameworks/FaceTecSDK.framework/RetryScreenGuidanceContentLayout.nib +0 -0
- package/ios/Frameworks/FaceTecSDK.framework/SharedGuidanceLayout.nib +0 -0
- package/ios/Frameworks/FaceTecSDK.framework/Storyboard.storyboardc/9Uo-4b-JiE-view-Ae0-rb-UqS.nib +0 -0
- package/ios/Frameworks/FaceTecSDK.framework/Storyboard.storyboardc/CJ6-MX-bJp-view-8JL-Rc-0g1.nib +0 -0
- package/ios/Frameworks/FaceTecSDK.framework/Storyboard.storyboardc/FaceScanViewController.nib +0 -0
- package/ios/Frameworks/FaceTecSDK.framework/Storyboard.storyboardc/FaceTecAdditionalReviewViewController.nib +0 -0
- package/ios/Frameworks/FaceTecSDK.framework/Storyboard.storyboardc/FaceTecIDFeedbackViewController.nib +0 -0
- package/ios/Frameworks/FaceTecSDK.framework/Storyboard.storyboardc/FaceTecOCRConfirmationViewController.nib +0 -0
- package/ios/Frameworks/FaceTecSDK.framework/Storyboard.storyboardc/IDCaptureViewController.nib +0 -0
- package/ios/Frameworks/FaceTecSDK.framework/Storyboard.storyboardc/IDSelectionViewController.nib +0 -0
- package/ios/Frameworks/FaceTecSDK.framework/Storyboard.storyboardc/Info.plist +0 -0
- package/ios/Frameworks/FaceTecSDK.framework/Storyboard.storyboardc/Pyw-6G-JSY-view-Zue-Eo-Q2U.nib +0 -0
- package/ios/Frameworks/FaceTecSDK.framework/Storyboard.storyboardc/QWA-8Y-vUM-view-wJB-Z5-eD2.nib +0 -0
- package/ios/Frameworks/FaceTecSDK.framework/Storyboard.storyboardc/alz-Ia-X3d-view-IKu-EI-Hug.nib +0 -0
- package/ios/Frameworks/FaceTecSDK.framework/Storyboard.storyboardc/l2Q-cc-kD8-view-UUy-6c-meu.nib +0 -0
- package/ios/Frameworks/FaceTecSDK.framework/attributions.txt +462 -0
- package/ios/Frameworks/FaceTecSDK.framework/cache_uyertuazlkxcjrlwkejr/39bb748b334003e3fa/1f5b84f51ce0fcfbb76e904b7bcaa7560f601e1394a0b29367a09385312287eb +0 -0
- package/ios/Frameworks/FaceTecSDK.framework/cache_uyertuazlkxcjrlwkejr/39bb748b334003e3fa/2b075ac1a6132b5b8a4c9ef0ba6b0cd84db7838aca9a000e50d907f40770a4ab +0 -0
- package/ios/Frameworks/FaceTecSDK.framework/cache_uyertuazlkxcjrlwkejr/39bb748b334003e3fa/59cc2a9af81aaca2376702c2490650f4da2775fa673274db98aad41b7ef101c0 +0 -0
- package/ios/Frameworks/FaceTecSDK.framework/cache_uyertuazlkxcjrlwkejr/39bb748b334003e3fa/5b63e98b991aedabb60665503384f30bffd939decf9433883b30b78011ee501a +0 -0
- package/ios/Frameworks/FaceTecSDK.framework/cache_uyertuazlkxcjrlwkejr/39bb748b334003e3fa/66388dc76dc16bc6b76b682edd218a575bf45b9b +0 -0
- package/ios/Frameworks/FaceTecSDK.framework/cache_uyertuazlkxcjrlwkejr/39bb748b334003e3fa/6b3133f0f39ff89a2a169d61176ee17cafacc5e288f334e2b64ee82892d11ccd +0 -0
- package/ios/Frameworks/FaceTecSDK.framework/cache_uyertuazlkxcjrlwkejr/39bb748b334003e3fa/9077d16225f9314163ef1e7db6fc7d4088bb903d134bd95f23d5591ca4dfbfca +0 -0
- package/ios/Frameworks/FaceTecSDK.framework/cache_uyertuazlkxcjrlwkejr/39bb748b334003e3fa/a74f2afb9d20f2375ccbd14e67c094b85c89ceb608f7cf8ae04f3f646a6c5672 +0 -0
- package/ios/Frameworks/FaceTecSDK.framework/cache_uyertuazlkxcjrlwkejr/39bb748b334003e3fa/b501893e75f62ee1707643e35b21109927b07ed5b202321c961b424cbc2e4695 +0 -0
- package/ios/Frameworks/FaceTecSDK.framework/cache_uyertuazlkxcjrlwkejr/39bb748b334003e3fa/dbd7a353f0130bb983d6ba05917e9be991d70e8f028df4b74e30bc6497ef7f71 +0 -0
- package/ios/Frameworks/FaceTecSDK.framework/cache_uyertuazlkxcjrlwkejr/39bb748b334003e3fa/f2.xml +0 -0
- package/ios/Frameworks/FaceTecSDK.framework/cache_uyertuazlkxcjrlwkejr/39bb748b334003e3fa/fd6d368a5658496536e2bfae170d1b823a3629b242cafc09784bfba4e56d8c80 +0 -0
- package/ios/Frameworks/FaceTecSDK.framework/cache_uyertuazlkxcjrlwkejr/39bb748b334003e3fa/marker +0 -0
- package/ios/Frameworks/FaceTecSDK.framework/cache_uyertuazlkxcjrlwkejr/39bb748b334003e3fa/vu0ilin6we3lrzo5f83f7qs2jul4aq7v4aoynrmch8zfvpi8ezrfyafa4t0fx87l +0 -0
- package/ios/Frameworks/FaceTecSDK.framework/strip-unused-architectures-from-target.sh +62 -0
- package/ios/IOSFacetecSdk.m +22 -0
- package/ios/IOSFacetecSdk.swift +219 -0
- package/ios/ProcessorProtocol.swift +6 -0
- package/ios/SoyioIDOnlyProcessor.swift +168 -0
- package/ios/SoyioPhotoIDMatchProcessor.swift +262 -0
- package/package/index.d.ts +4 -2
- package/package/index.js +6 -3
- package/package/index.js.map +1 -0
- package/package/src/api/facetec.d.ts +3 -0
- package/package/src/api/facetec.js +109 -0
- package/package/src/api/facetec.js.map +1 -0
- package/package/src/bridges/facetec.d.ts +2 -0
- package/package/src/bridges/facetec.js +105 -0
- package/package/src/bridges/facetec.js.map +1 -0
- package/package/src/bridges/passkey.d.ts +17 -0
- package/package/src/bridges/passkey.js +103 -0
- package/package/src/bridges/passkey.js.map +1 -0
- package/package/src/constants.d.ts +3 -2
- package/package/src/constants.js +4 -3
- package/package/src/constants.js.map +1 -0
- package/package/src/core.d.ts +3 -5
- package/package/src/core.jsx +42 -111
- package/package/src/core.jsx.map +1 -0
- package/package/src/facetec-bridge.d.ts +10 -0
- package/package/src/facetec-bridge.js +125 -0
- package/package/src/facetec-bridge.js.map +1 -0
- package/package/src/inapp-browser.d.ts +21 -0
- package/package/src/inapp-browser.js +104 -0
- package/package/src/inapp-browser.js.map +1 -0
- package/package/src/passkey-bridge.d.ts +17 -0
- package/package/src/passkey-bridge.js +103 -0
- package/package/src/passkey-bridge.js.map +1 -0
- package/package/src/types.d.ts +27 -13
- package/package/src/types.js.map +1 -0
- package/package/src/utils/apiDate.d.ts +1 -0
- package/package/src/utils/apiDate.js +5 -0
- package/package/src/utils/apiDate.js.map +1 -0
- package/package/src/utils/color.d.ts +5 -0
- package/package/src/utils/color.js +35 -0
- package/package/src/utils/color.js.map +1 -0
- package/package/src/utils/date.d.ts +1 -0
- package/package/src/utils/date.js +6 -0
- package/package/src/utils/date.js.map +1 -0
- package/package/src/utils/index.d.ts +4 -0
- package/package/src/utils/index.js +12 -0
- package/package/src/utils/index.js.map +1 -0
- package/package/src/utils/message-handler.d.ts +3 -0
- package/package/src/utils/message-handler.js +76 -0
- package/package/src/utils/message-handler.js.map +1 -0
- package/package/src/utils/platform.d.ts +1 -0
- package/package/src/utils/platform.js +9 -0
- package/package/src/utils/platform.js.map +1 -0
- package/package/src/utils/type-guards.d.ts +4 -0
- package/package/src/utils/type-guards.js +15 -0
- package/package/src/utils/type-guards.js.map +1 -0
- package/package/src/utils/url-builder.d.ts +2 -0
- package/package/src/utils/url-builder.js +70 -0
- package/package/src/utils/url-builder.js.map +1 -0
- package/package/src/webview.d.ts +3 -0
- package/package/src/webview.jsx +65 -0
- package/package/src/webview.jsx.map +1 -0
- package/package.json +14 -12
- package/react-native.config.js +14 -0
- package/soyio_rn_sdk.podspec +49 -0
- package/package/src/utils.d.ts +0 -17
- package/package/src/utils.js +0 -157
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
package com.soyio.soyiorndk
|
|
2
|
+
|
|
3
|
+
import android.graphics.Color
|
|
4
|
+
import android.graphics.Typeface
|
|
5
|
+
import com.facebook.react.bridge.ReadableMap
|
|
6
|
+
import com.facebook.react.bridge.ReactApplicationContext
|
|
7
|
+
import com.facetec.sdk.FaceTecCancelButtonCustomization
|
|
8
|
+
import com.facetec.sdk.FaceTecCustomization
|
|
9
|
+
import com.facetec.sdk.FaceTecSDK
|
|
10
|
+
import com.facetec.sdk.FaceTecSecurityWatermarkImage
|
|
11
|
+
|
|
12
|
+
internal object FacetecConfig {
|
|
13
|
+
fun apply(reactContext: ReactApplicationContext, theme: ReadableMap?) {
|
|
14
|
+
val colors = resolveThemeColors(theme)
|
|
15
|
+
val customization = FaceTecCustomization()
|
|
16
|
+
val regularFont = typeface(reactContext, Typeface.NORMAL)
|
|
17
|
+
val mediumFont = typeface(reactContext, Typeface.NORMAL, "sans-serif-medium")
|
|
18
|
+
val semiBoldFont = typeface(reactContext, Typeface.BOLD, "sans-serif-medium")
|
|
19
|
+
val boldFont = typeface(reactContext, Typeface.BOLD)
|
|
20
|
+
|
|
21
|
+
customization.frameCustomization.apply {
|
|
22
|
+
cornerRadius = 20
|
|
23
|
+
backgroundColor = colors.white
|
|
24
|
+
borderColor = colors.white
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
customization.overlayCustomization.apply {
|
|
28
|
+
showBrandingImage = false
|
|
29
|
+
backgroundColor = colors.white
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
customization.guidanceCustomization.apply {
|
|
33
|
+
backgroundColors = colors.white
|
|
34
|
+
foregroundColor = colors.black
|
|
35
|
+
buttonBackgroundNormalColor = colors.main
|
|
36
|
+
buttonBackgroundDisabledColor = colors.disabled
|
|
37
|
+
buttonBackgroundHighlightColor = colors.highlight
|
|
38
|
+
buttonCornerRadius = 8
|
|
39
|
+
buttonTextNormalColor = colors.white
|
|
40
|
+
buttonTextDisabledColor = colors.white
|
|
41
|
+
buttonTextHighlightColor = colors.white
|
|
42
|
+
retryScreenImageBorderColor = colors.white
|
|
43
|
+
retryScreenOvalStrokeColor = colors.white
|
|
44
|
+
headerFont = semiBoldFont
|
|
45
|
+
subtextFont = regularFont
|
|
46
|
+
buttonFont = boldFont
|
|
47
|
+
readyScreenHeaderFont = semiBoldFont
|
|
48
|
+
readyScreenSubtextFont = regularFont
|
|
49
|
+
retryScreenHeaderFont = semiBoldFont
|
|
50
|
+
retryScreenSubtextFont = regularFont
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
customization.ovalCustomization.apply {
|
|
54
|
+
strokeColor = colors.main
|
|
55
|
+
progressColor1 = colors.main
|
|
56
|
+
progressColor2 = colors.main
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
customization.feedbackCustomization.apply {
|
|
60
|
+
backgroundColors = colors.black
|
|
61
|
+
textColor = colors.white
|
|
62
|
+
textFont = mediumFont
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
customization.cancelButtonCustomization.apply {
|
|
66
|
+
location = FaceTecCancelButtonCustomization.ButtonLocation.TOP_LEFT
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
customization.resultScreenCustomization.apply {
|
|
70
|
+
backgroundColors = colors.white
|
|
71
|
+
foregroundColor = colors.black
|
|
72
|
+
activityIndicatorColor = colors.main
|
|
73
|
+
resultAnimationBackgroundColor = colors.main
|
|
74
|
+
resultAnimationForegroundColor = colors.white
|
|
75
|
+
uploadProgressFillColor = colors.main
|
|
76
|
+
messageFont = regularFont
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
customization.securityWatermarkImage = FaceTecSecurityWatermarkImage.FACETEC
|
|
80
|
+
|
|
81
|
+
customization.idScanCustomization.apply {
|
|
82
|
+
selectionScreenForegroundColor = colors.black
|
|
83
|
+
reviewScreenBackgroundColors = colors.white
|
|
84
|
+
reviewScreenForegroundColor = colors.white
|
|
85
|
+
reviewScreenTextBackgroundColor = colors.main
|
|
86
|
+
captureScreenForegroundColor = colors.white
|
|
87
|
+
captureScreenTextBackgroundColor = colors.black
|
|
88
|
+
buttonBackgroundNormalColor = colors.main
|
|
89
|
+
buttonBackgroundDisabledColor = colors.disabled
|
|
90
|
+
buttonBackgroundHighlightColor = colors.highlight
|
|
91
|
+
buttonTextNormalColor = colors.white
|
|
92
|
+
buttonTextDisabledColor = colors.white
|
|
93
|
+
buttonTextHighlightColor = colors.white
|
|
94
|
+
captureScreenBackgroundColor = colors.white
|
|
95
|
+
captureFrameStrokeColor = colors.white
|
|
96
|
+
buttonCornerRadius = 8
|
|
97
|
+
headerFont = semiBoldFont
|
|
98
|
+
subtextFont = regularFont
|
|
99
|
+
buttonFont = boldFont
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
customization.ocrConfirmationCustomization.apply {
|
|
103
|
+
mainHeaderFont = boldFont
|
|
104
|
+
sectionHeaderFont = semiBoldFont
|
|
105
|
+
fieldLabelFont = regularFont
|
|
106
|
+
fieldValueFont = regularFont
|
|
107
|
+
inputFieldFont = regularFont
|
|
108
|
+
inputFieldPlaceholderFont = regularFont
|
|
109
|
+
buttonFont = boldFont
|
|
110
|
+
}
|
|
111
|
+
customization.initialLoadingAnimationCustomization.messageFont = regularFont
|
|
112
|
+
|
|
113
|
+
FaceTecSDK.setCustomization(customization)
|
|
114
|
+
FaceTecSDK.setLowLightCustomization(customization)
|
|
115
|
+
FaceTecSDK.setDynamicDimmingCustomization(customization)
|
|
116
|
+
applySpanishLocalization(reactContext)
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
private fun resolveThemeColors(theme: ReadableMap?): ThemeColors {
|
|
120
|
+
val main = theme?.getOptionalColor("mainColor") ?: Color.parseColor(DEFAULT_MAIN_COLOR)
|
|
121
|
+
val highlight = theme?.getOptionalColor("highlightColor") ?: Color.parseColor(DEFAULT_HIGHLIGHT_COLOR)
|
|
122
|
+
val disabled = theme?.getOptionalColor("disabledColor") ?: Color.parseColor(DEFAULT_DISABLED_COLOR)
|
|
123
|
+
return ThemeColors(main = main, highlight = highlight, disabled = disabled)
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
private fun ReadableMap.getOptionalColor(key: String): Int? {
|
|
127
|
+
if (!hasKey(key) || isNull(key)) return null
|
|
128
|
+
val value = getString(key) ?: return null
|
|
129
|
+
return try {
|
|
130
|
+
Color.parseColor(value)
|
|
131
|
+
} catch (_: IllegalArgumentException) {
|
|
132
|
+
null
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
private fun typeface(reactContext: ReactApplicationContext, style: Int, fallbackFamily: String = "sans-serif"): Typeface {
|
|
137
|
+
val base = try {
|
|
138
|
+
Typeface.createFromAsset(reactContext.assets, ROBOTO_FLEX_PATH)
|
|
139
|
+
} catch (_: Exception) {
|
|
140
|
+
null
|
|
141
|
+
} ?: Typeface.create(fallbackFamily, Typeface.NORMAL)
|
|
142
|
+
|
|
143
|
+
return Typeface.create(base, style)
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
private fun applySpanishLocalization(reactContext: ReactApplicationContext) {
|
|
147
|
+
try {
|
|
148
|
+
val resources = reactContext.resources
|
|
149
|
+
// FaceTec resources merge into the host app package, so resolve ids from the host package.
|
|
150
|
+
val hostPackage = reactContext.packageName
|
|
151
|
+
val overrides = HashMap<Int, String>()
|
|
152
|
+
|
|
153
|
+
FACETEC_STRING_KEYS.forEach { keyName ->
|
|
154
|
+
val valueResId = resources.getIdentifier(
|
|
155
|
+
"soyio_facetec_${keyName.removePrefix("FaceTec_")}",
|
|
156
|
+
"string",
|
|
157
|
+
hostPackage,
|
|
158
|
+
)
|
|
159
|
+
val faceTecResId = resources.getIdentifier(keyName, "string", hostPackage)
|
|
160
|
+
if (valueResId != 0 && faceTecResId != 0) {
|
|
161
|
+
overrides[faceTecResId] = resources.getString(valueResId)
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
if (overrides.isNotEmpty()) {
|
|
166
|
+
FaceTecSDK.setDynamicStrings(overrides)
|
|
167
|
+
}
|
|
168
|
+
} catch (_: Exception) {
|
|
169
|
+
// Silently ignore; FaceTec will fall back to its bundled defaults.
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
private data class ThemeColors(
|
|
174
|
+
val main: Int,
|
|
175
|
+
val highlight: Int,
|
|
176
|
+
val disabled: Int,
|
|
177
|
+
val black: Int = Color.parseColor("#000000"),
|
|
178
|
+
val white: Int = Color.parseColor("#FFFFFF"),
|
|
179
|
+
)
|
|
180
|
+
|
|
181
|
+
private const val ROBOTO_FLEX_PATH = "fonts/RobotoFlex.ttf"
|
|
182
|
+
private const val DEFAULT_MAIN_COLOR = "#3340CF"
|
|
183
|
+
private const val DEFAULT_HIGHLIGHT_COLOR = "#2A35B0"
|
|
184
|
+
private const val DEFAULT_DISABLED_COLOR = "#9BA3D8"
|
|
185
|
+
private val FACETEC_STRING_KEYS = listOf(
|
|
186
|
+
// Actions
|
|
187
|
+
"FaceTec_action_ok",
|
|
188
|
+
"FaceTec_action_im_ready",
|
|
189
|
+
"FaceTec_action_try_again",
|
|
190
|
+
"FaceTec_action_continue",
|
|
191
|
+
"FaceTec_action_take_photo",
|
|
192
|
+
"FaceTec_action_accept_photo",
|
|
193
|
+
"FaceTec_action_retake_photo",
|
|
194
|
+
"FaceTec_action_confirm",
|
|
195
|
+
"FaceTec_action_scan_nfc",
|
|
196
|
+
"FaceTec_action_scan_nfc_card",
|
|
197
|
+
"FaceTec_action_skip_nfc",
|
|
198
|
+
// Accessibility
|
|
199
|
+
"FaceTec_accessibility_cancel_button",
|
|
200
|
+
"FaceTec_accessibility_torch_button",
|
|
201
|
+
"FaceTec_accessibility_tap_guidance",
|
|
202
|
+
"FaceTec_accessibility_feedback_move_phone_away",
|
|
203
|
+
"FaceTec_accessibility_feedback_move_phone_closer",
|
|
204
|
+
"FaceTec_accessibility_feedback_face_too_far_left",
|
|
205
|
+
"FaceTec_accessibility_feedback_face_too_far_right",
|
|
206
|
+
"FaceTec_accessibility_feedback_face_too_low",
|
|
207
|
+
"FaceTec_accessibility_feedback_face_too_high",
|
|
208
|
+
"FaceTec_accessibility_feedback_face_rotated_too_far_left",
|
|
209
|
+
"FaceTec_accessibility_feedback_face_rotated_too_far_right",
|
|
210
|
+
"FaceTec_accessibility_feedback_face_pointing_too_far_left",
|
|
211
|
+
"FaceTec_accessibility_feedback_face_pointing_too_far_right",
|
|
212
|
+
"FaceTec_accessibility_feedback_face_not_on_camera",
|
|
213
|
+
"FaceTec_accessibility_feedback_hold_device_to_eye_level",
|
|
214
|
+
// Presession
|
|
215
|
+
"FaceTec_presession_frame_your_face",
|
|
216
|
+
"FaceTec_presession_position_face_straight_in_oval",
|
|
217
|
+
"FaceTec_presession_hold_steady_3",
|
|
218
|
+
"FaceTec_presession_hold_steady_2",
|
|
219
|
+
"FaceTec_presession_hold_steady_1",
|
|
220
|
+
"FaceTec_presession_remove_dark_glasses",
|
|
221
|
+
"FaceTec_presession_neutral_expression",
|
|
222
|
+
"FaceTec_presession_conditions_too_bright",
|
|
223
|
+
"FaceTec_presession_brighten_your_environment",
|
|
224
|
+
// Feedback
|
|
225
|
+
"FaceTec_feedback_center_face",
|
|
226
|
+
"FaceTec_feedback_face_not_found",
|
|
227
|
+
"FaceTec_feedback_move_phone_away",
|
|
228
|
+
"FaceTec_feedback_move_phone_closer",
|
|
229
|
+
"FaceTec_feedback_move_phone_to_eye_level",
|
|
230
|
+
"FaceTec_feedback_face_not_looking_straight_ahead",
|
|
231
|
+
"FaceTec_feedback_face_not_upright",
|
|
232
|
+
"FaceTec_feedback_hold_steady",
|
|
233
|
+
"FaceTec_feedback_use_even_lighting",
|
|
234
|
+
// Instructions
|
|
235
|
+
"FaceTec_instructions_header_ready_1",
|
|
236
|
+
"FaceTec_instructions_header_ready_2",
|
|
237
|
+
"FaceTec_instructions_message_ready_1",
|
|
238
|
+
"FaceTec_instructions_message_ready_2",
|
|
239
|
+
// Retry
|
|
240
|
+
"FaceTec_retry_header",
|
|
241
|
+
"FaceTec_retry_subheader_message",
|
|
242
|
+
"FaceTec_retry_your_image_label",
|
|
243
|
+
"FaceTec_retry_ideal_image_label",
|
|
244
|
+
"FaceTec_retry_instruction_message_1",
|
|
245
|
+
"FaceTec_retry_instruction_message_2",
|
|
246
|
+
"FaceTec_retry_instruction_message_3",
|
|
247
|
+
// Camera Permission
|
|
248
|
+
"FaceTec_camera_permission_header",
|
|
249
|
+
"FaceTec_camera_permission_message_enroll",
|
|
250
|
+
"FaceTec_camera_permission_message_auth",
|
|
251
|
+
"FaceTec_camera_permission_enable_camera",
|
|
252
|
+
"FaceTec_camera_permission_launch_settings",
|
|
253
|
+
// Initializing
|
|
254
|
+
"FaceTec_initializing_camera",
|
|
255
|
+
// ID Scan
|
|
256
|
+
"FaceTec_idscan_type_selection_header",
|
|
257
|
+
"FaceTec_idscan_capture_id_front_instruction_message",
|
|
258
|
+
"FaceTec_idscan_capture_id_back_instruction_message",
|
|
259
|
+
"FaceTec_idscan_review_id_front_instruction_message",
|
|
260
|
+
"FaceTec_idscan_review_id_back_instruction_message",
|
|
261
|
+
"FaceTec_idscan_additional_review_message",
|
|
262
|
+
"FaceTec_idscan_ocr_confirmation_main_header",
|
|
263
|
+
"FaceTec_idscan_ocr_confirmation_scroll_message",
|
|
264
|
+
"FaceTec_idscan_feedback_flip_id_to_back_message",
|
|
265
|
+
"FaceTec_idscan_capture_screen_focus_message",
|
|
266
|
+
"FaceTec_idscan_capture_tap_to_focus_message",
|
|
267
|
+
"FaceTec_idscan_capture_hold_steady_message",
|
|
268
|
+
// ID Scan - NFC
|
|
269
|
+
"FaceTec_idscan_nfc_status_disabled_message",
|
|
270
|
+
"FaceTec_idscan_nfc_status_ready_message",
|
|
271
|
+
"FaceTec_idscan_nfc_card_status_ready_message",
|
|
272
|
+
"FaceTec_idscan_nfc_status_starting_message",
|
|
273
|
+
"FaceTec_idscan_nfc_card_status_starting_message",
|
|
274
|
+
"FaceTec_idscan_nfc_status_scanning_message",
|
|
275
|
+
"FaceTec_idscan_nfc_status_weak_connection_message",
|
|
276
|
+
"FaceTec_idscan_nfc_status_finished_with_success_message",
|
|
277
|
+
"FaceTec_idscan_nfc_status_finished_with_error_message",
|
|
278
|
+
"FaceTec_idscan_nfc_card_status_finished_with_error_message",
|
|
279
|
+
"FaceTec_idscan_nfc_status_skipped_message",
|
|
280
|
+
// Result Messages
|
|
281
|
+
"FaceTec_result_success_message",
|
|
282
|
+
"FaceTec_result_facescan_upload_message",
|
|
283
|
+
"FaceTec_result_idscan_upload_message",
|
|
284
|
+
"FaceTec_result_nfc_upload_message",
|
|
285
|
+
"FaceTec_result_idscan_unsuccess_message",
|
|
286
|
+
"FaceTec_result_idscan_success_front_side_message",
|
|
287
|
+
"FaceTec_result_idscan_success_front_side_back_next_message",
|
|
288
|
+
"FaceTec_result_idscan_success_front_side_nfc_next_message",
|
|
289
|
+
"FaceTec_result_idscan_success_back_side_message",
|
|
290
|
+
"FaceTec_result_idscan_success_back_side_nfc_next_message",
|
|
291
|
+
"FaceTec_result_idscan_success_passport_message",
|
|
292
|
+
"FaceTec_result_idscan_success_passport_nfc_next_message",
|
|
293
|
+
"FaceTec_result_idscan_success_user_confirmation_message",
|
|
294
|
+
"FaceTec_result_idscan_success_nfc_message",
|
|
295
|
+
"FaceTec_result_idscan_success_additional_review_message",
|
|
296
|
+
"FaceTec_result_idscan_skip_or_error_nfc_message",
|
|
297
|
+
"FaceTec_result_idscan_retry_face_did_not_match_message",
|
|
298
|
+
"FaceTec_result_idscan_retry_id_not_fully_visible_message",
|
|
299
|
+
"FaceTec_result_idscan_retry_ocr_results_not_good_enough_message",
|
|
300
|
+
"FaceTec_result_idscan_retry_id_type_not_supported_message",
|
|
301
|
+
"FaceTec_result_idscan_retry_barcode_not_read_message",
|
|
302
|
+
// Retry - Official ID Photo
|
|
303
|
+
"FaceTec_retry_official_id_photo_subheader_message",
|
|
304
|
+
"FaceTec_retry_official_id_photo_instruction_message",
|
|
305
|
+
"FaceTec_retry_official_id_photo_your_image_label",
|
|
306
|
+
"FaceTec_retry_official_id_photo_ideal_image_label",
|
|
307
|
+
)
|
|
308
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
package com.soyio.soyiorndk
|
|
2
|
+
|
|
3
|
+
import android.app.Activity
|
|
4
|
+
import com.facebook.react.bridge.Promise
|
|
5
|
+
import com.facetec.sdk.FaceTecIDScanProcessor
|
|
6
|
+
import com.facetec.sdk.FaceTecIDScanResult
|
|
7
|
+
import com.facetec.sdk.FaceTecIDScanResultCallback
|
|
8
|
+
import com.facetec.sdk.FaceTecIDScanStatus
|
|
9
|
+
import com.facetec.sdk.FaceTecSessionActivity
|
|
10
|
+
import org.json.JSONObject
|
|
11
|
+
|
|
12
|
+
class SoyioIdOnlyProcessor(
|
|
13
|
+
activity: Activity,
|
|
14
|
+
sessionToken: String,
|
|
15
|
+
baseUrl: String,
|
|
16
|
+
resourcePath: String,
|
|
17
|
+
requestableToken: String,
|
|
18
|
+
authToken: String,
|
|
19
|
+
promise: Promise,
|
|
20
|
+
) : BaseFaceTecProcessor(promise, FACETEC_ID_ERROR), FaceTecIDScanProcessor {
|
|
21
|
+
|
|
22
|
+
private val requestService = FaceTecRequestService(
|
|
23
|
+
baseUrl = baseUrl,
|
|
24
|
+
resourcePath = resourcePath,
|
|
25
|
+
requestableToken = requestableToken,
|
|
26
|
+
authToken = authToken,
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
init {
|
|
30
|
+
FaceTecSessionActivity.createAndLaunchSession(activity, this, sessionToken)
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
override fun processIDScanWhileFaceTecSDKWaits(
|
|
34
|
+
idScanResult: FaceTecIDScanResult,
|
|
35
|
+
idScanResultCallback: FaceTecIDScanResultCallback,
|
|
36
|
+
) {
|
|
37
|
+
if (idScanResult.status != FaceTecIDScanStatus.SUCCESS) {
|
|
38
|
+
idScanResultCallback.cancel()
|
|
39
|
+
resolveFailure(flowCancelledError)
|
|
40
|
+
return
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
val payload = JSONObject().apply {
|
|
44
|
+
put("id_scan", idScanResult.idScanBase64)
|
|
45
|
+
put("session_id", idScanResult.sessionId ?: "")
|
|
46
|
+
put("id_scan_front_image", idScanResult.frontImagesCompressedBase64?.getOrNull(0) ?: "")
|
|
47
|
+
put("id_scan_back_image", idScanResult.backImagesCompressedBase64?.getOrNull(0) ?: "")
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
requestService.post(
|
|
51
|
+
endpoint = "id_check",
|
|
52
|
+
payload = payload,
|
|
53
|
+
sessionId = idScanResult.sessionId,
|
|
54
|
+
progress = { progress -> idScanResultCallback.uploadProgress(progress) },
|
|
55
|
+
networkErrorMessage = "Network error while uploading FaceTec ID scan.",
|
|
56
|
+
onSuccess = { json ->
|
|
57
|
+
val error = json.optBoolean("error")
|
|
58
|
+
val wasProcessed = json.optBoolean("wasProcessed")
|
|
59
|
+
val scanResultBlob = json.optString("scanResultBlob")
|
|
60
|
+
val errorMessage = json.optString("errorMessage")
|
|
61
|
+
|
|
62
|
+
if (error || !wasProcessed || scanResultBlob.isNullOrBlank()) {
|
|
63
|
+
idScanResultCallback.cancel()
|
|
64
|
+
resolveFailure(errorMessage.takeIf { it.isNotBlank() } ?: defaultError)
|
|
65
|
+
return@post
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
idScanResultCallback.proceedToNextStep(scanResultBlob)
|
|
69
|
+
resolveSuccess()
|
|
70
|
+
},
|
|
71
|
+
onFailure = {
|
|
72
|
+
idScanResultCallback.cancel()
|
|
73
|
+
resolveFailure(it.ifBlank { defaultError })
|
|
74
|
+
},
|
|
75
|
+
)
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
companion object {
|
|
79
|
+
private const val FACETEC_ID_ERROR = "FACETEC_ID_ERROR"
|
|
80
|
+
}
|
|
81
|
+
}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
package com.soyio.soyiorndk
|
|
2
|
+
|
|
3
|
+
import android.app.Activity
|
|
4
|
+
import com.facebook.react.bridge.Promise
|
|
5
|
+
import com.facetec.sdk.FaceTecFaceScanProcessor
|
|
6
|
+
import com.facetec.sdk.FaceTecFaceScanResultCallback
|
|
7
|
+
import com.facetec.sdk.FaceTecIDScanProcessor
|
|
8
|
+
import com.facetec.sdk.FaceTecIDScanResult
|
|
9
|
+
import com.facetec.sdk.FaceTecIDScanResultCallback
|
|
10
|
+
import com.facetec.sdk.FaceTecIDScanStatus
|
|
11
|
+
import com.facetec.sdk.FaceTecSessionActivity
|
|
12
|
+
import com.facetec.sdk.FaceTecSessionResult
|
|
13
|
+
import com.facetec.sdk.FaceTecSessionStatus
|
|
14
|
+
import org.json.JSONObject
|
|
15
|
+
|
|
16
|
+
class SoyioValidationProcessor(
|
|
17
|
+
activity: Activity,
|
|
18
|
+
sessionToken: String,
|
|
19
|
+
baseUrl: String,
|
|
20
|
+
resourcePath: String,
|
|
21
|
+
requestableToken: String,
|
|
22
|
+
authToken: String,
|
|
23
|
+
promise: Promise,
|
|
24
|
+
private val onLivenessSuccess: (() -> Unit)? = null,
|
|
25
|
+
) : BaseFaceTecProcessor(promise, FACETEC_VALIDATION_ERROR), FaceTecFaceScanProcessor, FaceTecIDScanProcessor {
|
|
26
|
+
|
|
27
|
+
private val requestService = FaceTecRequestService(
|
|
28
|
+
baseUrl = baseUrl,
|
|
29
|
+
resourcePath = resourcePath,
|
|
30
|
+
requestableToken = requestableToken,
|
|
31
|
+
authToken = authToken,
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
init {
|
|
35
|
+
FaceTecSessionActivity.createAndLaunchSession(
|
|
36
|
+
activity,
|
|
37
|
+
this,
|
|
38
|
+
this,
|
|
39
|
+
sessionToken,
|
|
40
|
+
)
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
override fun processSessionWhileFaceTecSDKWaits(
|
|
44
|
+
sessionResult: FaceTecSessionResult,
|
|
45
|
+
faceScanResultCallback: FaceTecFaceScanResultCallback,
|
|
46
|
+
) {
|
|
47
|
+
if (sessionResult.status != FaceTecSessionStatus.SESSION_COMPLETED_SUCCESSFULLY) {
|
|
48
|
+
faceScanResultCallback.cancel()
|
|
49
|
+
resolveFailure(flowCancelledError)
|
|
50
|
+
return
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
val payload = JSONObject().apply {
|
|
54
|
+
put("face_scan", sessionResult.faceScanBase64)
|
|
55
|
+
put("audit_trail_image", sessionResult.auditTrailCompressedBase64?.getOrNull(0) ?: "")
|
|
56
|
+
put("low_quality_audit_trail_image", sessionResult.lowQualityAuditTrailCompressedBase64?.getOrNull(0) ?: "")
|
|
57
|
+
put("session_id", sessionResult.sessionId ?: "")
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
requestService.post(
|
|
61
|
+
endpoint = "liveness_check",
|
|
62
|
+
payload = payload,
|
|
63
|
+
sessionId = sessionResult.sessionId,
|
|
64
|
+
progress = { progress -> faceScanResultCallback.uploadProgress(progress) },
|
|
65
|
+
onSuccess = { json ->
|
|
66
|
+
val error = json.optBoolean("error")
|
|
67
|
+
val wasProcessed = json.optBoolean("wasProcessed")
|
|
68
|
+
val errorMessage = json.optString("errorMessage")
|
|
69
|
+
val scanResultBlob = json.optString("scanResultBlob")
|
|
70
|
+
|
|
71
|
+
if (error || !wasProcessed || scanResultBlob.isNullOrBlank()) {
|
|
72
|
+
faceScanResultCallback.cancel()
|
|
73
|
+
resolveFailure(errorMessage.takeIf { it.isNotBlank() } ?: defaultError)
|
|
74
|
+
return@post
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
faceScanResultCallback.proceedToNextStep(scanResultBlob)
|
|
78
|
+
onLivenessSuccess?.invoke()
|
|
79
|
+
},
|
|
80
|
+
onFailure = {
|
|
81
|
+
faceScanResultCallback.cancel()
|
|
82
|
+
resolveFailure(it.ifBlank { defaultError })
|
|
83
|
+
},
|
|
84
|
+
)
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
override fun processIDScanWhileFaceTecSDKWaits(
|
|
88
|
+
idScanResult: FaceTecIDScanResult,
|
|
89
|
+
idScanResultCallback: FaceTecIDScanResultCallback,
|
|
90
|
+
) {
|
|
91
|
+
if (idScanResult.status != FaceTecIDScanStatus.SUCCESS) {
|
|
92
|
+
idScanResultCallback.cancel()
|
|
93
|
+
resolveFailure(flowCancelledError)
|
|
94
|
+
return
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
val payload = JSONObject().apply {
|
|
98
|
+
put("id_scan", idScanResult.idScanBase64)
|
|
99
|
+
put("session_id", idScanResult.sessionId ?: "")
|
|
100
|
+
put("id_scan_front_image", idScanResult.frontImagesCompressedBase64?.getOrNull(0) ?: "")
|
|
101
|
+
put("id_scan_back_image", idScanResult.backImagesCompressedBase64?.getOrNull(0) ?: "")
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
requestService.post(
|
|
105
|
+
endpoint = "id_check",
|
|
106
|
+
payload = payload,
|
|
107
|
+
sessionId = idScanResult.sessionId,
|
|
108
|
+
progress = { progress -> idScanResultCallback.uploadProgress(progress) },
|
|
109
|
+
onSuccess = { json ->
|
|
110
|
+
val error = json.optBoolean("error")
|
|
111
|
+
val wasProcessed = json.optBoolean("wasProcessed")
|
|
112
|
+
val errorMessage = json.optString("errorMessage")
|
|
113
|
+
val scanResultBlob = json.optString("scanResultBlob")
|
|
114
|
+
|
|
115
|
+
if (error || !wasProcessed || scanResultBlob.isNullOrBlank()) {
|
|
116
|
+
idScanResultCallback.cancel()
|
|
117
|
+
resolveFailure(errorMessage.takeIf { it.isNotBlank() } ?: defaultError)
|
|
118
|
+
return@post
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
idScanResultCallback.proceedToNextStep(scanResultBlob)
|
|
122
|
+
resolveSuccess()
|
|
123
|
+
},
|
|
124
|
+
onFailure = {
|
|
125
|
+
idScanResultCallback.cancel()
|
|
126
|
+
resolveFailure(it.ifBlank { defaultError })
|
|
127
|
+
},
|
|
128
|
+
)
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
companion object {
|
|
132
|
+
private const val FACETEC_VALIDATION_ERROR = "FACETEC_VALIDATION_ERROR"
|
|
133
|
+
}
|
|
134
|
+
}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
<resources xmlns:tools="http://schemas.android.com/tools">
|
|
2
|
+
<!-- Actions -->
|
|
3
|
+
<string name="soyio_facetec_action_ok">Aceptar</string>
|
|
4
|
+
<string name="soyio_facetec_action_im_ready">Comenzar validación</string>
|
|
5
|
+
<string name="soyio_facetec_action_try_again">Volver a intentarlo</string>
|
|
6
|
+
<string name="soyio_facetec_action_continue">Continuar</string>
|
|
7
|
+
<string name="soyio_facetec_action_take_photo">Tomar foto</string>
|
|
8
|
+
<string name="soyio_facetec_action_accept_photo">Aceptar</string>
|
|
9
|
+
<string name="soyio_facetec_action_retake_photo">Volver</string>
|
|
10
|
+
<string name="soyio_facetec_action_confirm">Confirmar información</string>
|
|
11
|
+
<string name="soyio_facetec_action_scan_nfc">Escanear NFC</string>
|
|
12
|
+
<string name="soyio_facetec_action_scan_nfc_card">Escanear chip</string>
|
|
13
|
+
<string name="soyio_facetec_action_skip_nfc">Omitir este paso</string>
|
|
14
|
+
|
|
15
|
+
<!-- Accessibility -->
|
|
16
|
+
<string name="soyio_facetec_accessibility_cancel_button">Cancelar</string>
|
|
17
|
+
<string name="soyio_facetec_accessibility_torch_button">Interruptor de iluminación</string>
|
|
18
|
+
<string name="soyio_facetec_accessibility_tap_guidance">Toca dos veces cualquier parte de la pantalla para ver indicaciones sobre cómo alinear tu rostro.</string>
|
|
19
|
+
<string name="soyio_facetec_accessibility_feedback_move_phone_away">Tu rostro está demasiado cerca</string>
|
|
20
|
+
<string name="soyio_facetec_accessibility_feedback_move_phone_closer">Tu rostro está demasiado lejos</string>
|
|
21
|
+
<string name="soyio_facetec_accessibility_feedback_face_too_far_left">Tu rostro está demasiado a la izquierda</string>
|
|
22
|
+
<string name="soyio_facetec_accessibility_feedback_face_too_far_right">Tu rostro está demasiado a la derecha</string>
|
|
23
|
+
<string name="soyio_facetec_accessibility_feedback_face_too_low">Tu rostro está demasiado abajo</string>
|
|
24
|
+
<string name="soyio_facetec_accessibility_feedback_face_too_high">Tu rostro está demasiado arriba</string>
|
|
25
|
+
<string name="soyio_facetec_accessibility_feedback_face_rotated_too_far_left">Tu rostro gira demasiado a la izquierda</string>
|
|
26
|
+
<string name="soyio_facetec_accessibility_feedback_face_rotated_too_far_right">Tu rostro gira demasiado a la derecha</string>
|
|
27
|
+
<string name="soyio_facetec_accessibility_feedback_face_pointing_too_far_left">Tu rostro está demasiado inclinado hacia la izquierda</string>
|
|
28
|
+
<string name="soyio_facetec_accessibility_feedback_face_pointing_too_far_right">Tu rostro está demasiado inclinado hacia la derecha</string>
|
|
29
|
+
<string name="soyio_facetec_accessibility_feedback_face_not_on_camera">El rostro no se ve en la cámara o está demasiado lejos</string>
|
|
30
|
+
<string name="soyio_facetec_accessibility_feedback_hold_device_to_eye_level">Mantén el dispositivo a la altura de los ojos</string>
|
|
31
|
+
|
|
32
|
+
<!-- Presession -->
|
|
33
|
+
<string name="soyio_facetec_presession_frame_your_face">Encuadra tu rostro en el óvalo</string>
|
|
34
|
+
<string name="soyio_facetec_presession_position_face_straight_in_oval">Mira hacia el frente</string>
|
|
35
|
+
<string name="soyio_facetec_presession_hold_steady_3">Mantente quieto durante: 3</string>
|
|
36
|
+
<string name="soyio_facetec_presession_hold_steady_2">Mantente quieto durante: 2</string>
|
|
37
|
+
<string name="soyio_facetec_presession_hold_steady_1">Mantente quieto durante: 1</string>
|
|
38
|
+
<string name="soyio_facetec_presession_remove_dark_glasses">Quítate los lentes oscuros</string>
|
|
39
|
+
<string name="soyio_facetec_presession_neutral_expression">Expresión neutra, sin sonreír</string>
|
|
40
|
+
<string name="soyio_facetec_presession_conditions_too_bright">Demasiada luz</string>
|
|
41
|
+
<string name="soyio_facetec_presession_brighten_your_environment">Ilumina tu entorno</string>
|
|
42
|
+
|
|
43
|
+
<!-- Feedback -->
|
|
44
|
+
<string name="soyio_facetec_feedback_center_face">Centra tu rostro</string>
|
|
45
|
+
<string name="soyio_facetec_feedback_face_not_found">Encuadra tu rostro</string>
|
|
46
|
+
<string name="soyio_facetec_feedback_move_phone_away">Aléjate</string>
|
|
47
|
+
<string name="soyio_facetec_feedback_move_phone_closer">Acércate</string>
|
|
48
|
+
<string name="soyio_facetec_feedback_move_phone_to_eye_level">Coloca la cámara a la altura de los ojos</string>
|
|
49
|
+
<string name="soyio_facetec_feedback_face_not_looking_straight_ahead">Mira hacia el frente</string>
|
|
50
|
+
<string name="soyio_facetec_feedback_face_not_upright">Mantén la cabeza recta</string>
|
|
51
|
+
<string name="soyio_facetec_feedback_hold_steady">Quédate quieto</string>
|
|
52
|
+
<string name="soyio_facetec_feedback_use_even_lighting">Ilumina el rostro de forma más uniforme</string>
|
|
53
|
+
|
|
54
|
+
<!-- Instructions -->
|
|
55
|
+
<string name="soyio_facetec_instructions_header_ready_1"></string>
|
|
56
|
+
<string name="soyio_facetec_instructions_header_ready_2">Prepárate para la selfie</string>
|
|
57
|
+
<string name="soyio_facetec_instructions_message_ready_1">Alinea tu rostro dentro del óvalo</string>
|
|
58
|
+
<string name="soyio_facetec_instructions_message_ready_2"></string>
|
|
59
|
+
|
|
60
|
+
<!-- Retry -->
|
|
61
|
+
<string name="soyio_facetec_retry_header">Intentémoslo otra vez</string>
|
|
62
|
+
<string name="soyio_facetec_retry_subheader_message">Necesitamos una selfie más nítida</string>
|
|
63
|
+
<string name="soyio_facetec_retry_your_image_label">Tu selfie</string>
|
|
64
|
+
<string name="soyio_facetec_retry_ideal_image_label">Pose ideal</string>
|
|
65
|
+
<string name="soyio_facetec_retry_instruction_message_1">Usa una pose y iluminación ideal</string>
|
|
66
|
+
<string name="soyio_facetec_retry_instruction_message_2">Expresión neutra, sin sonreír</string>
|
|
67
|
+
<string name="soyio_facetec_retry_instruction_message_3">Demasiado borrosa, limpie la cámara</string>
|
|
68
|
+
|
|
69
|
+
<!-- Camera Permission -->
|
|
70
|
+
<string name="soyio_facetec_camera_permission_header">Habilita la cámara</string>
|
|
71
|
+
<string name="soyio_facetec_camera_permission_message_enroll">Permisos de cámara deshabilitados.\nVerifique la configuración de tu sistema operativo</string>
|
|
72
|
+
<string name="soyio_facetec_camera_permission_message_auth">Permisos de cámara deshabilitados.\nVerifique la configuración de tu sistema operativo</string>
|
|
73
|
+
<string name="soyio_facetec_camera_permission_enable_camera">Habilitar la cámara</string>
|
|
74
|
+
<string name="soyio_facetec_camera_permission_launch_settings">Abrir la configuración</string>
|
|
75
|
+
|
|
76
|
+
<!-- Initializing -->
|
|
77
|
+
<string name="soyio_facetec_initializing_camera">Estamos protegiendo la conexión ...</string>
|
|
78
|
+
|
|
79
|
+
<!-- ID Scan -->
|
|
80
|
+
<string name="soyio_facetec_idscan_type_selection_header">Ahora, prepárate para\nescanear tu cédula</string>
|
|
81
|
+
<string name="soyio_facetec_idscan_capture_id_front_instruction_message">Frente de tu cédula</string>
|
|
82
|
+
<string name="soyio_facetec_idscan_capture_id_back_instruction_message">Reverso de tu cédula</string>
|
|
83
|
+
<string name="soyio_facetec_idscan_review_id_front_instruction_message">Verifica que sea nítida y legible</string>
|
|
84
|
+
<string name="soyio_facetec_idscan_review_id_back_instruction_message">Verifica que sea nítida y legible</string>
|
|
85
|
+
<string name="soyio_facetec_idscan_additional_review_message">Se requiere\nuna verificación adicional</string>
|
|
86
|
+
<string name="soyio_facetec_idscan_ocr_confirmation_main_header">Revisar y confirmar</string>
|
|
87
|
+
<string name="soyio_facetec_idscan_ocr_confirmation_scroll_message">Desplácese hacia abajo</string>
|
|
88
|
+
<string name="soyio_facetec_idscan_feedback_flip_id_to_back_message">Sigamos con el reverso de tu cédula</string>
|
|
89
|
+
<string name="soyio_facetec_idscan_capture_screen_focus_message">Presiona para enfocar</string>
|
|
90
|
+
<string name="soyio_facetec_idscan_capture_tap_to_focus_message">Toca la pantalla para enfocar</string>
|
|
91
|
+
<string name="soyio_facetec_idscan_capture_hold_steady_message">Mantente quieto</string>
|
|
92
|
+
|
|
93
|
+
<!-- ID Scan - NFC -->
|
|
94
|
+
<string name="soyio_facetec_idscan_nfc_status_disabled_message">Habilita el NFC\nen la configuración de tu dispositivo\npara continuar</string>
|
|
95
|
+
<string name="soyio_facetec_idscan_nfc_status_ready_message">Prepárate para escanear\nel chip de tu pasaporte electrónico</string>
|
|
96
|
+
<string name="soyio_facetec_idscan_nfc_card_status_ready_message">Prepárate para escanear\nel chip de tu cédula</string>
|
|
97
|
+
<string name="soyio_facetec_idscan_nfc_status_starting_message">Acerca el teléfono a la parte\nposterior del ePasaporte\npara escanear el chip NFC</string>
|
|
98
|
+
<string name="soyio_facetec_idscan_nfc_card_status_starting_message">Acerca el teléfono a tu cédula\npara escanear el chip NFC</string>
|
|
99
|
+
<string name="soyio_facetec_idscan_nfc_status_scanning_message">Manténlo quieto,\nescaneando el chip NFC</string>
|
|
100
|
+
<string name="soyio_facetec_idscan_nfc_status_weak_connection_message">Intentemos\notro escaneo</string>
|
|
101
|
+
<string name="soyio_facetec_idscan_nfc_status_finished_with_success_message">Escaneo de documentos\ncompletado</string>
|
|
102
|
+
<string name="soyio_facetec_idscan_nfc_status_finished_with_error_message">No se puede leer\nel chip del pasaporte electrónico</string>
|
|
103
|
+
<string name="soyio_facetec_idscan_nfc_card_status_finished_with_error_message">No se puede leer\nel chip de la cédula</string>
|
|
104
|
+
<string name="soyio_facetec_idscan_nfc_status_skipped_message">Escaneo NFC\nomitido</string>
|
|
105
|
+
|
|
106
|
+
<!-- Result Messages -->
|
|
107
|
+
<string name="soyio_facetec_result_success_message">Validación de identidad completa</string>
|
|
108
|
+
<string name="soyio_facetec_result_facescan_upload_message">Analizando tu selfie</string>
|
|
109
|
+
<string name="soyio_facetec_result_idscan_upload_message">Analizando la imagen de la\ncédula</string>
|
|
110
|
+
<string name="soyio_facetec_result_nfc_upload_message">Analizando la información NFC</string>
|
|
111
|
+
<string name="soyio_facetec_result_idscan_unsuccess_message">La foto de la cédula\nno coincide con el rostro del usuario</string>
|
|
112
|
+
<string name="soyio_facetec_result_idscan_success_front_side_message">Escaneo de cédula completado</string>
|
|
113
|
+
<string name="soyio_facetec_result_idscan_success_front_side_back_next_message">Lado frontal de la cédula\nescaneado</string>
|
|
114
|
+
<string name="soyio_facetec_result_idscan_success_front_side_nfc_next_message">Frente de la cédula\nescaneado</string>
|
|
115
|
+
<string name="soyio_facetec_result_idscan_success_back_side_message">Escaneo de cédula completado</string>
|
|
116
|
+
<string name="soyio_facetec_result_idscan_success_back_side_nfc_next_message">Reverso de la cédula\nescaneado</string>
|
|
117
|
+
<string name="soyio_facetec_result_idscan_success_passport_message">Escaneo de pasaporte completado</string>
|
|
118
|
+
<string name="soyio_facetec_result_idscan_success_passport_nfc_next_message">Pasaporte escaneado</string>
|
|
119
|
+
<string name="soyio_facetec_result_idscan_success_user_confirmation_message">Escaneo de la cédula con fotografía\ncompletado</string>
|
|
120
|
+
<string name="soyio_facetec_result_idscan_success_nfc_message">Escaneo de cédula completado</string>
|
|
121
|
+
<string name="soyio_facetec_result_idscan_success_additional_review_message">Captura de la fotografía de la cédula\ncompletada</string>
|
|
122
|
+
<string name="soyio_facetec_result_idscan_skip_or_error_nfc_message">Información de la cédula\nsubida</string>
|
|
123
|
+
<string name="soyio_facetec_result_idscan_retry_face_did_not_match_message">El rostro no coincide\nlo suficiente</string>
|
|
124
|
+
<string name="soyio_facetec_result_idscan_retry_id_not_fully_visible_message">La cédula\nno es totalmente visible</string>
|
|
125
|
+
<string name="soyio_facetec_result_idscan_retry_ocr_results_not_good_enough_message">El texto de la cédula no es legible</string>
|
|
126
|
+
<string name="soyio_facetec_result_idscan_retry_id_type_not_supported_message">No se admite este tipo de identificación\nUtiliza una identificación diferente</string>
|
|
127
|
+
<string name="soyio_facetec_result_idscan_retry_barcode_not_read_message">No se pudo escanear el código de barras\nInténtalo de nuevo</string>
|
|
128
|
+
|
|
129
|
+
<!-- Retry - Official ID Photo -->
|
|
130
|
+
<string name="soyio_facetec_retry_official_id_photo_subheader_message">La foto debe tener más calidad</string>
|
|
131
|
+
<string name="soyio_facetec_retry_official_id_photo_instruction_message">Usa luz interior,\nsin sonreír, lentes con reflejos o sombrero</string>
|
|
132
|
+
<string name="soyio_facetec_retry_official_id_photo_your_image_label">Tu imagen</string>
|
|
133
|
+
<string name="soyio_facetec_retry_official_id_photo_ideal_image_label">Cara conforme</string>
|
|
134
|
+
</resources>
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/assets/icon.png
ADDED
|
Binary file
|