Skip to content

Commit c74fdf6

Browse files
authored
Optional consent info and capture screen enhanced selfie capture (#89)
* feat: consent info optional and usetrict mode on * feat: update changelog * feat: update changelog * feat: selfie composables * feat: lint * feat: lint * feat: consent feedback * fix: remove allownewenroll from capture screens
1 parent 7c0b287 commit c74fdf6

34 files changed

+608
-761
lines changed

CHANGELOG.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,12 @@
11
# Release Notes
2+
3+
## 10.2.6
4+
* Added enhanced SmartSelfie™ capture Selfie capture screen component
5+
* Added `skipApiSubmission` to SmartSelfie™ capture which defaults to `false` and will allow Selfie capture without submission to the api
6+
* Make consent information optional on Biometric KYC, Enhanced KYC and Enhanced Document Verification
7+
* Bump android to 10.5.2 (https://github.com/smileidentity/android/releases/tag/v10.5.2)
8+
* Bump iOS to 10.4.2 (https://github.com/smileidentity/ios/releases/tag/v10.4.2)
9+
210
## 10.2.5
311
* Added enhanced SmartSelfie™ capture to docV, enhanced docV, and biometric kyc
412
* Added consent information to BioMetric KYC and Enhanced Document Verification

android/gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,5 @@ SmileId_minSdkVersion=21
33
SmileId_targetSdkVersion=35
44
SmileId_compileSdkVersion=35
55
SmileId_ndkversion=21.4.7075529
6-
SmileId_androidVersion=10.5.0
6+
SmileId_androidVersion=10.5.2
77
SmileId_kotlinCompilerExtensionVersion=1.5.11

android/src/main/java/com/smileidentity/react/Mapper.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,12 @@ fun ReadableMap.toEnhancedKycRequest(): EnhancedKycRequest {
153153
throw IllegalArgumentException("signature is required")
154154
},
155155
consentInformation = getMapOrDefault("consentInformation", null)?.toConsentInfo() ?: run {
156-
throw IllegalArgumentException("consentInformation is required")
156+
ConsentInformation(
157+
consentGrantedDate = getCurrentIsoTimestamp(),
158+
personalDetailsConsentGranted = false,
159+
contactInfoConsentGranted = false,
160+
documentInfoConsentGranted = false
161+
)
157162
},
158163
)
159164
}

android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDBiometricKYCViewManager.kt

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@ package com.smileidentity.react.viewmanagers
33
import com.facebook.react.bridge.ReactApplicationContext
44
import com.facebook.react.bridge.ReadableMap
55
import com.facebook.react.module.annotations.ReactModule
6+
import com.smileidentity.models.ConsentInformation
67
import com.smileidentity.react.toConsentInfo
78
import com.smileidentity.react.toIdInfo
89
import com.smileidentity.react.utils.getBoolOrDefault
10+
import com.smileidentity.react.utils.getCurrentIsoTimestamp
911
import com.smileidentity.react.utils.getImmutableMapOrDefault
1012
import com.smileidentity.react.utils.getMapOrDefault
1113
import com.smileidentity.react.utils.getStringOrDefault
@@ -26,10 +28,14 @@ class SmileIDBiometricKYCViewManager(
2628
args?.let {
2729
val idInfoMap = it.getMap("idInfo")
2830
?: return view.emitFailure(IllegalArgumentException("idInfo is required to run Biometric KYC"))
29-
val consentInformationMap = it.getMap("consentInformation")
30-
?: return view.emitFailure(IllegalArgumentException("consentInformation is required to run Biometric KYC"))
3131
val idInfo = idInfoMap.toIdInfo()
32-
view.consentInformation = consentInformationMap.toConsentInfo()
32+
view.consentInformation = it.getMapOrDefault("consentInformation")?.toConsentInfo()
33+
?: ConsentInformation(
34+
consentGrantedDate = getCurrentIsoTimestamp(),
35+
personalDetailsConsentGranted = false,
36+
contactInfoConsentGranted = false,
37+
documentInfoConsentGranted = false
38+
)
3339
view.extraPartnerParams = it.getImmutableMapOrDefault("extraPartnerParams")
3440
view.userId = it.getStringOrDefault("userId")
3541
view.jobId = it.getStringOrDefault("jobId")

android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDDocumentVerificationViewManager.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@ class SmileIDDocumentVerificationViewManager(
4040
view.documentType = it.getStringOrDefault("documentType", null)
4141
view.idAspectRatio = it.getFloatOrDefault("idAspectRatio")
4242
view.allowNewEnroll = it.getBoolOrDefault("allowNewEnroll", false)
43-
view.skipApiSubmission = it.getBoolOrDefault("skipApiSubmission", false)
4443
view.useStrictMode = it.getBoolOrDefault("useStrictMode", false)
4544
}
4645
}

android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDEnhancedDocumentVerificationViewManager.kt

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,11 @@ import com.facebook.react.bridge.ReadableMap
66
import com.facebook.react.module.annotations.ReactModule
77
import com.facebook.react.uimanager.SimpleViewManager
88
import com.facebook.react.uimanager.ThemedReactContext
9+
import com.smileidentity.models.ConsentInformation
910
import com.smileidentity.react.toConsentInfo
1011
import com.smileidentity.react.toIdInfo
1112
import com.smileidentity.react.utils.getBoolOrDefault
13+
import com.smileidentity.react.utils.getCurrentIsoTimestamp
1214
import com.smileidentity.react.utils.getFloatOrDefault
1315
import com.smileidentity.react.utils.getImmutableMapOrDefault
1416
import com.smileidentity.react.utils.getMapOrDefault
@@ -30,10 +32,16 @@ class SmileIDEnhancedDocumentVerificationViewManager(
3032
override fun applyArgs(view: SmileIDEnhancedDocumentVerificationView, args: ReadableMap?) {
3133
args?.let {
3234
val countryCode = it.getString("countryCode")
33-
?: return view.emitFailure(IllegalArgumentException("countryCode is required to run Enhanced Document Verification"))
34-
val consentInformationMap = it.getMap("consentInformation")
35-
?: return view.emitFailure(IllegalArgumentException("consentInformation is required to run Biometric KYC"))
36-
view.consentInformation = consentInformationMap.toConsentInfo()
35+
?: return view.emitFailure(
36+
IllegalArgumentException("countryCode is required to run Enhanced Document Verification")
37+
)
38+
view.consentInformation = it.getMapOrDefault("consentInformation")?.toConsentInfo()
39+
?: ConsentInformation(
40+
consentGrantedDate = getCurrentIsoTimestamp(),
41+
personalDetailsConsentGranted = false,
42+
contactInfoConsentGranted = false,
43+
documentInfoConsentGranted = false
44+
)
3745
view.extraPartnerParams = it.getImmutableMapOrDefault("extraPartnerParams")
3846
view.userId = it.getStringOrDefault("userId")
3947
view.jobId = it.getStringOrDefault("jobId")
@@ -46,7 +54,6 @@ class SmileIDEnhancedDocumentVerificationViewManager(
4654
view.documentType = it.getStringOrDefault("documentType")
4755
view.idAspectRatio = it.getFloatOrDefault("idAspectRatio")
4856
view.allowNewEnroll = it.getBoolOrDefault("allowNewEnroll", false)
49-
view.skipApiSubmission = it.getBoolOrDefault("skipApiSubmission", false)
5057
view.useStrictMode = it.getBoolOrDefault("useStrictMode", false)
5158
}
5259
}

android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDSmartSelfieAuthenticationEnhancedViewManager.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ class SmileIDSmartSelfieAuthenticationEnhancedViewManager(
3030
view.showAttribution = it.getBoolOrDefault("showAttribution", true)
3131
view.showInstructions = it.getBoolOrDefault("showInstructions", true)
3232
view.allowNewEnroll = it.getBoolOrDefault("allowNewEnroll", false)
33+
view.skipApiSubmission = it.getBoolOrDefault("skipApiSubmission", false)
3334
}
3435
}
3536

android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDSmartSelfieCaptureViewManager.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ class SmileIDSmartSelfieCaptureViewManager(
2929
view.allowAgentMode = it.getBoolOrDefault("allowAgentMode", false)
3030
view.showAttribution = it.getBoolOrDefault("showAttribution", true)
3131
view.showInstructions = it.getBoolOrDefault("showInstructions", true)
32+
view.useStrictMode = it.getBoolOrDefault("useStrictMode", false)
3233
view.showConfirmation =
3334
it.getBoolOrDefault("showConfirmation", true)
3435
}

android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDSmartSelfieEnrollmentEnhancedViewManager.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ class SmileIDSmartSelfieEnrollmentEnhancedViewManager(
3030
view.showAttribution = it.getBoolOrDefault("showAttribution", true)
3131
view.showInstructions = it.getBoolOrDefault("showInstructions", true)
3232
view.allowNewEnroll = it.getBoolOrDefault("allowNewEnroll", false)
33+
view.skipApiSubmission = it.getBoolOrDefault("skipApiSubmission", false)
3334
}
3435
}
3536

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package com.smileidentity.react.views
2+
3+
import android.annotation.SuppressLint
4+
import android.content.Context
5+
import com.smileidentity.SmileID
6+
import com.smileidentity.react.results.SmartSelfieCaptureResult
7+
import com.smileidentity.react.utils.SelfieCaptureResultAdapter
8+
import com.smileidentity.results.SmartSelfieResult
9+
import com.smileidentity.results.SmileIDResult
10+
11+
@SuppressLint("CheckResult")
12+
abstract class SmileIDSelfieView(currentContext: Context) : SmileIDView(currentContext) {
13+
14+
protected fun handleResultCallback(res: SmileIDResult<*>) {
15+
when (res) {
16+
is SmileIDResult.Success -> {
17+
val data = res.data as? SmartSelfieResult ?: run {
18+
emitFailure(Exception("Unexpected result type"))
19+
return
20+
}
21+
val result = SmartSelfieCaptureResult(
22+
selfieFile = data.selfieFile,
23+
livenessFiles = data.livenessFiles,
24+
apiResponse = data.apiResponse,
25+
)
26+
val newMoshi =
27+
SmileID.moshi
28+
.newBuilder()
29+
.add(SelfieCaptureResultAdapter.FACTORY)
30+
.build()
31+
val json =
32+
try {
33+
newMoshi
34+
.adapter(SmartSelfieCaptureResult::class.java)
35+
.toJson(result)
36+
} catch (e: Exception) {
37+
emitFailure(e)
38+
return
39+
}
40+
json?.let { js ->
41+
emitSuccess(js)
42+
}
43+
}
44+
45+
is SmileIDResult.Error -> emitFailure(res.throwable)
46+
}
47+
}
48+
}

0 commit comments

Comments
 (0)