assentify-sdk-react-native 0.0.1

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.
Files changed (195) hide show
  1. package/LICENSE +3 -0
  2. package/README.md +65 -0
  3. package/android/build.gradle +111 -0
  4. package/android/gradle.properties +9 -0
  5. package/android/src/main/AndroidManifest.xml +55 -0
  6. package/android/src/main/java/com/assentifysdk/AndroidProgressBarModule.kt +33 -0
  7. package/android/src/main/java/com/assentifysdk/AssentifySdkBaseModule.kt +39 -0
  8. package/android/src/main/java/com/assentifysdk/AssentifySdkModule.kt +432 -0
  9. package/android/src/main/java/com/assentifysdk/AssentifySdkPackage.kt +19 -0
  10. package/android/src/main/java/com/assentifysdk/FaceMatchActivity.kt +309 -0
  11. package/android/src/main/java/com/assentifysdk/ImageToBase64Converter.kt +40 -0
  12. package/android/src/main/java/com/assentifysdk/ReactApplicationContextObject.kt +14 -0
  13. package/android/src/main/java/com/assentifysdk/ScanIDActivity.kt +431 -0
  14. package/android/src/main/java/com/assentifysdk/ScanOtherActivity.kt +328 -0
  15. package/android/src/main/java/com/assentifysdk/ScanPassportActivity.kt +364 -0
  16. package/android/src/main/java/com/assentifysdk/StepsKeys.kt +91 -0
  17. package/android/src/main/res/drawable/back_icon.png +0 -0
  18. package/android/src/main/res/drawable/button_rounded_background.xml +6 -0
  19. package/android/src/main/res/drawable/card.gif +0 -0
  20. package/android/src/main/res/drawable/expire.png +0 -0
  21. package/android/src/main/res/drawable/id.gif +0 -0
  22. package/android/src/main/res/drawable/id_warning.png +0 -0
  23. package/android/src/main/res/drawable/info_icon.png +0 -0
  24. package/android/src/main/res/drawable/info_rounded_background.xml +6 -0
  25. package/android/src/main/res/drawable/passport.gif +0 -0
  26. package/android/src/main/res/drawable/rounded_background.xml +3 -0
  27. package/android/src/main/res/drawable/sending.png +0 -0
  28. package/android/src/main/res/drawable/warning.png +0 -0
  29. package/android/src/main/res/drawable/zoom_in.png +0 -0
  30. package/android/src/main/res/drawable/zoom_out.png +0 -0
  31. package/android/src/main/res/layout/activity_face_scan.xml +242 -0
  32. package/android/src/main/res/layout/activity_scan.xml +297 -0
  33. package/android/src/main/res/raw/sending_video.MP4 +0 -0
  34. package/android/src/main/res/values/colors.xml +8 -0
  35. package/android/src/main/res/values/strings.xml +3 -0
  36. package/android/src/main/res/values/styles.xml +4 -0
  37. package/assentify-sdk.podspec +43 -0
  38. package/ios/AssentifySdkBaseModule.swift +15 -0
  39. package/ios/Info.plist +27 -0
  40. package/ios/NativeAssentifySdk-Bridging-Header.h +3 -0
  41. package/ios/NativeAssentifySdk.mm +45 -0
  42. package/ios/NativeAssentifySdk.swift +460 -0
  43. package/ios/Resources/card.gif +0 -0
  44. package/ios/Resources/expire.png +0 -0
  45. package/ios/Resources/id.gif +0 -0
  46. package/ios/Resources/id_warning.png +0 -0
  47. package/ios/Resources/info_icon.png +0 -0
  48. package/ios/Resources/passport.gif +0 -0
  49. package/ios/Resources/sending.png +0 -0
  50. package/ios/Resources/warning.png +0 -0
  51. package/ios/Resources/zoom_in.png +0 -0
  52. package/ios/Resources/zoom_out.png +0 -0
  53. package/ios/UIComponents/RNIOSProgressBar.h +4 -0
  54. package/ios/UIComponents/RNIOSProgressBar.m +34 -0
  55. package/ios/UIComponents/RNPassportScanner.m +26 -0
  56. package/ios/UIComponents/RNPassportScanner.swift +245 -0
  57. package/ios/UIComponents/RNTMapManager.h +4 -0
  58. package/ios/UIComponents/RNTMapManager.m +19 -0
  59. package/ios/View/DataDecoder.swift +469 -0
  60. package/ios/View/FaceMatchController.swift +258 -0
  61. package/ios/View/IDCardController.swift +360 -0
  62. package/ios/View/OtherController.swift +283 -0
  63. package/ios/View/PassportController.swift +302 -0
  64. package/ios/View/UI.swift +298 -0
  65. package/lib/commonjs/AssentifyProvider.js +202 -0
  66. package/lib/commonjs/AssentifyProvider.js.map +1 -0
  67. package/lib/commonjs/AssentifyWrapper.js +76 -0
  68. package/lib/commonjs/AssentifyWrapper.js.map +1 -0
  69. package/lib/commonjs/Language.js +27 -0
  70. package/lib/commonjs/Language.js.map +1 -0
  71. package/lib/commonjs/helpers/index.js +2 -0
  72. package/lib/commonjs/helpers/index.js.map +1 -0
  73. package/lib/commonjs/helpers/parsers/FaceMatchParser.js +27 -0
  74. package/lib/commonjs/helpers/parsers/FaceMatchParser.js.map +1 -0
  75. package/lib/commonjs/helpers/parsers/IDCardParser.js +25 -0
  76. package/lib/commonjs/helpers/parsers/IDCardParser.js.map +1 -0
  77. package/lib/commonjs/helpers/parsers/OtherIDParser.js +29 -0
  78. package/lib/commonjs/helpers/parsers/OtherIDParser.js.map +1 -0
  79. package/lib/commonjs/helpers/parsers/PassportParser.js +25 -0
  80. package/lib/commonjs/helpers/parsers/PassportParser.js.map +1 -0
  81. package/lib/commonjs/index.js +49 -0
  82. package/lib/commonjs/index.js.map +1 -0
  83. package/lib/commonjs/types.js +42 -0
  84. package/lib/commonjs/types.js.map +1 -0
  85. package/lib/module/AssentifyProvider.js +193 -0
  86. package/lib/module/AssentifyProvider.js.map +1 -0
  87. package/lib/module/AssentifyWrapper.js +70 -0
  88. package/lib/module/AssentifyWrapper.js.map +1 -0
  89. package/lib/module/Language.js +21 -0
  90. package/lib/module/Language.js.map +1 -0
  91. package/lib/module/helpers/index.js +2 -0
  92. package/lib/module/helpers/index.js.map +1 -0
  93. package/lib/module/helpers/parsers/FaceMatchParser.js +21 -0
  94. package/lib/module/helpers/parsers/FaceMatchParser.js.map +1 -0
  95. package/lib/module/helpers/parsers/IDCardParser.js +19 -0
  96. package/lib/module/helpers/parsers/IDCardParser.js.map +1 -0
  97. package/lib/module/helpers/parsers/OtherIDParser.js +23 -0
  98. package/lib/module/helpers/parsers/OtherIDParser.js.map +1 -0
  99. package/lib/module/helpers/parsers/PassportParser.js +19 -0
  100. package/lib/module/helpers/parsers/PassportParser.js.map +1 -0
  101. package/lib/module/index.js +6 -0
  102. package/lib/module/index.js.map +1 -0
  103. package/lib/module/types.js +36 -0
  104. package/lib/module/types.js.map +1 -0
  105. package/lib/typescript/babel.config.d.ts +3 -0
  106. package/lib/typescript/babel.config.d.ts.map +1 -0
  107. package/lib/typescript/commitlint.config.d.ts +7 -0
  108. package/lib/typescript/commitlint.config.d.ts.map +1 -0
  109. package/lib/typescript/example/babel.config.d.ts +8 -0
  110. package/lib/typescript/example/babel.config.d.ts.map +1 -0
  111. package/lib/typescript/example/index.d.ts +2 -0
  112. package/lib/typescript/example/index.d.ts.map +1 -0
  113. package/lib/typescript/example/jest.config.d.ts +2 -0
  114. package/lib/typescript/example/jest.config.d.ts.map +1 -0
  115. package/lib/typescript/example/metro.config.d.ts +3 -0
  116. package/lib/typescript/example/metro.config.d.ts.map +1 -0
  117. package/lib/typescript/example/react-native.config.d.ts +6 -0
  118. package/lib/typescript/example/react-native.config.d.ts.map +1 -0
  119. package/lib/typescript/example/src/App.d.ts +3 -0
  120. package/lib/typescript/example/src/App.d.ts.map +1 -0
  121. package/lib/typescript/example/src/Home.d.ts +4 -0
  122. package/lib/typescript/example/src/Home.d.ts.map +1 -0
  123. package/lib/typescript/example/src/navigator.d.ts +4 -0
  124. package/lib/typescript/example/src/navigator.d.ts.map +1 -0
  125. package/lib/typescript/lib/commonjs/AssentifyProvider.d.ts +3 -0
  126. package/lib/typescript/lib/commonjs/AssentifyProvider.d.ts.map +1 -0
  127. package/lib/typescript/lib/commonjs/AssentifyWrapper.d.ts +11 -0
  128. package/lib/typescript/lib/commonjs/AssentifyWrapper.d.ts.map +1 -0
  129. package/lib/typescript/lib/commonjs/Language.d.ts +22 -0
  130. package/lib/typescript/lib/commonjs/Language.d.ts.map +1 -0
  131. package/lib/typescript/lib/commonjs/helpers/index.d.ts +1 -0
  132. package/lib/typescript/lib/commonjs/helpers/index.d.ts.map +1 -0
  133. package/lib/typescript/lib/commonjs/helpers/parsers/FaceMatchParser.d.ts +12 -0
  134. package/lib/typescript/lib/commonjs/helpers/parsers/FaceMatchParser.d.ts.map +1 -0
  135. package/lib/typescript/lib/commonjs/helpers/parsers/IDCardParser.d.ts +11 -0
  136. package/lib/typescript/lib/commonjs/helpers/parsers/IDCardParser.d.ts.map +1 -0
  137. package/lib/typescript/lib/commonjs/helpers/parsers/OtherIDParser.d.ts +13 -0
  138. package/lib/typescript/lib/commonjs/helpers/parsers/OtherIDParser.d.ts.map +1 -0
  139. package/lib/typescript/lib/commonjs/helpers/parsers/PassportParser.d.ts +11 -0
  140. package/lib/typescript/lib/commonjs/helpers/parsers/PassportParser.d.ts.map +1 -0
  141. package/lib/typescript/lib/commonjs/index.d.ts +2 -0
  142. package/lib/typescript/lib/commonjs/index.d.ts.map +1 -0
  143. package/lib/typescript/lib/commonjs/types.d.ts +18 -0
  144. package/lib/typescript/lib/commonjs/types.d.ts.map +1 -0
  145. package/lib/typescript/lib/module/AssentifyProvider.d.ts +3 -0
  146. package/lib/typescript/lib/module/AssentifyProvider.d.ts.map +1 -0
  147. package/lib/typescript/lib/module/AssentifyWrapper.d.ts +10 -0
  148. package/lib/typescript/lib/module/AssentifyWrapper.d.ts.map +1 -0
  149. package/lib/typescript/lib/module/Language.d.ts +21 -0
  150. package/lib/typescript/lib/module/Language.d.ts.map +1 -0
  151. package/lib/typescript/lib/module/helpers/index.d.ts +1 -0
  152. package/lib/typescript/lib/module/helpers/index.d.ts.map +1 -0
  153. package/lib/typescript/lib/module/helpers/parsers/FaceMatchParser.d.ts +11 -0
  154. package/lib/typescript/lib/module/helpers/parsers/FaceMatchParser.d.ts.map +1 -0
  155. package/lib/typescript/lib/module/helpers/parsers/IDCardParser.d.ts +10 -0
  156. package/lib/typescript/lib/module/helpers/parsers/IDCardParser.d.ts.map +1 -0
  157. package/lib/typescript/lib/module/helpers/parsers/OtherIDParser.d.ts +12 -0
  158. package/lib/typescript/lib/module/helpers/parsers/OtherIDParser.d.ts.map +1 -0
  159. package/lib/typescript/lib/module/helpers/parsers/PassportParser.d.ts +10 -0
  160. package/lib/typescript/lib/module/helpers/parsers/PassportParser.d.ts.map +1 -0
  161. package/lib/typescript/lib/module/index.d.ts +12 -0
  162. package/lib/typescript/lib/module/index.d.ts.map +1 -0
  163. package/lib/typescript/lib/module/types.d.ts +17 -0
  164. package/lib/typescript/lib/module/types.d.ts.map +1 -0
  165. package/lib/typescript/src/AssentifyProvider.d.ts +4 -0
  166. package/lib/typescript/src/AssentifyProvider.d.ts.map +1 -0
  167. package/lib/typescript/src/AssentifyWrapper.d.ts +12 -0
  168. package/lib/typescript/src/AssentifyWrapper.d.ts.map +1 -0
  169. package/lib/typescript/src/Language.d.ts +22 -0
  170. package/lib/typescript/src/Language.d.ts.map +1 -0
  171. package/lib/typescript/src/helpers/index.d.ts +1 -0
  172. package/lib/typescript/src/helpers/index.d.ts.map +1 -0
  173. package/lib/typescript/src/helpers/parsers/FaceMatchParser.d.ts +4 -0
  174. package/lib/typescript/src/helpers/parsers/FaceMatchParser.d.ts.map +1 -0
  175. package/lib/typescript/src/helpers/parsers/IDCardParser.d.ts +4 -0
  176. package/lib/typescript/src/helpers/parsers/IDCardParser.d.ts.map +1 -0
  177. package/lib/typescript/src/helpers/parsers/OtherIDParser.d.ts +4 -0
  178. package/lib/typescript/src/helpers/parsers/OtherIDParser.d.ts.map +1 -0
  179. package/lib/typescript/src/helpers/parsers/PassportParser.d.ts +4 -0
  180. package/lib/typescript/src/helpers/parsers/PassportParser.d.ts.map +1 -0
  181. package/lib/typescript/src/index.d.ts +12 -0
  182. package/lib/typescript/src/index.d.ts.map +1 -0
  183. package/lib/typescript/src/types.d.ts +308 -0
  184. package/lib/typescript/src/types.d.ts.map +1 -0
  185. package/package.json +201 -0
  186. package/src/AssentifyProvider.tsx +189 -0
  187. package/src/AssentifyWrapper.ts +142 -0
  188. package/src/Language.ts +22 -0
  189. package/src/helpers/index.ts +1 -0
  190. package/src/helpers/parsers/FaceMatchParser.ts +28 -0
  191. package/src/helpers/parsers/IDCardParser.ts +27 -0
  192. package/src/helpers/parsers/OtherIDParser.ts +31 -0
  193. package/src/helpers/parsers/PassportParser.ts +27 -0
  194. package/src/index.ts +6 -0
  195. package/src/types.ts +373 -0
@@ -0,0 +1,258 @@
1
+
2
+
3
+ import UIKit
4
+ import AVFoundation
5
+ import AssentifySdk
6
+
7
+ class FaceMAtchController: UIViewController ,FaceMatchDelegate
8
+ {
9
+
10
+
11
+
12
+ private var assentifySdk:AssentifySdk?;
13
+ private var secondImage:String = "";
14
+ private var nativeAssentifySdk:NativeAssentifySdk?;
15
+ private var start:Bool = false;
16
+ var infoLabel : UILabel?;
17
+ var infoImage : UIImageView?;
18
+ var popUpMessage : UIView?;
19
+ private var holdHandColor: String;
20
+ private var processingColor: String;
21
+ private var showCountDown: Bool = true;
22
+
23
+ init(assentifySdk: AssentifySdk, nativeAssentifySdk:NativeAssentifySdk?,holdHandColor: String,processingColor: String,secondImage:String,showCountDown:Bool) {
24
+ self.assentifySdk = assentifySdk
25
+ self.holdHandColor = holdHandColor
26
+ self.processingColor = processingColor
27
+ self.secondImage = secondImage
28
+ self.nativeAssentifySdk = nativeAssentifySdk
29
+ self.showCountDown = showCountDown
30
+ super.init(nibName: nil, bundle: nil)
31
+ }
32
+
33
+
34
+
35
+ required init?(coder: NSCoder) {
36
+ fatalError("init(coder:) has not been implemented")
37
+ }
38
+
39
+ override var prefersStatusBarHidden: Bool {
40
+ return false
41
+ }
42
+ override func viewDidLoad() {
43
+ super.viewDidLoad()
44
+ self.view.backgroundColor = .clear
45
+ UIApplication.shared.isStatusBarHidden = false;
46
+ DispatchQueue.main.async {
47
+ var faceMatch = self.assentifySdk?.startFaceMatch(faceMatchDelegate: self, secondImage: self.secondImage,showCountDown:self.showCountDown)
48
+ self.addChild(faceMatch!)
49
+ self.view.addSubview(faceMatch!.view)
50
+ faceMatch!.view.translatesAutoresizingMaskIntoConstraints = false
51
+ NSLayoutConstraint.activate([
52
+ faceMatch!.view.topAnchor.constraint(equalTo: self.view.topAnchor,constant: 0),
53
+ faceMatch!.view.leadingAnchor.constraint(equalTo: self.view.leadingAnchor),
54
+ faceMatch!.view.trailingAnchor.constraint(equalTo: self.view.trailingAnchor),
55
+ faceMatch!.view.bottomAnchor.constraint(equalTo: self.view.bottomAnchor),
56
+ ])
57
+ faceMatch!.didMove(toParent: self)
58
+ (self.infoLabel, self.infoImage) = showInfo(view: self.view, text: "Please face within circle",initialTextColorHex:self.processingColor,initialBackgroundColorHex:self.holdHandColor,initialImageName:"info_icon")
59
+ showNavigationBarWithBackArrow(view: self.view, target: self, action: #selector(self.backButtonTapped), initialTextColorHex:self.processingColor,initialBackgroundColorHex:self.holdHandColor,title: "Face Capture")
60
+ }
61
+ }
62
+ @objc func backButtonTapped() {
63
+ triggerEvent(eventName:"onBackClick",dataModel:nil)
64
+ DispatchQueue.main.async {
65
+ self.dismiss(animated: false)
66
+ }
67
+ }
68
+
69
+ func dismissParentViewController() {
70
+ triggerEvent(eventName:"onBackClick",dataModel:nil)
71
+ DispatchQueue.main.async {
72
+ self.dismiss(animated: false)
73
+ }
74
+
75
+ }
76
+
77
+ @objc func dismissPopUpMessage() {
78
+ DispatchQueue.main.async {
79
+ if(!self.start){
80
+ self.popUpMessage!.removeFromSuperview();
81
+ (self.infoLabel, self.infoImage) = showInfo(view: self.view, text: "Please face within circle",initialTextColorHex:self.processingColor,initialBackgroundColorHex:self.holdHandColor,initialImageName:"info_icon")
82
+ }
83
+ }
84
+
85
+ }
86
+
87
+ func onSend() {
88
+ triggerEvent(eventName:"onSend",dataModel:nil)
89
+ DispatchQueue.main.async {
90
+ if(self.popUpMessage != nil){
91
+ self.popUpMessage!.removeFromSuperview();
92
+ }
93
+ self.start = true;
94
+ self.popUpMessage = showPopUpMessage(view: self.view, title: "Transmitting", subTitle: "",initialTextColorHex:self.processingColor,initialBackgroundColorHex:self.holdHandColor, iconName: "sending", isGif: false,target: self, action: #selector(self.dismissPopUpMessage))
95
+ }
96
+ }
97
+
98
+ func onError(dataModel: RemoteProcessingModel) {
99
+ triggerEvent(eventName:"onError",dataModel:dataModel)
100
+ DispatchQueue.main.async {
101
+ self.start = false;
102
+ self.popUpMessage!.removeFromSuperview();
103
+ self.popUpMessage = showPopUpMessage(view: self.view, title: "Unable to Match", subTitle: "Let's try again",initialTextColorHex:self.processingColor,initialBackgroundColorHex:self.holdHandColor, iconName: "warning", isGif: false,target: self, action: #selector(self.dismissPopUpMessage))
104
+ }
105
+ }
106
+
107
+
108
+ func onRetry(dataModel: RemoteProcessingModel) {
109
+ triggerEvent(eventName:"onRetry",dataModel:dataModel)
110
+ DispatchQueue.main.async {
111
+ self.start = false;
112
+ self.popUpMessage!.removeFromSuperview();
113
+ self.popUpMessage = showPopUpMessage(view: self.view, title: "Unable to Match", subTitle: "Let's try again",initialTextColorHex:self.processingColor,initialBackgroundColorHex:self.holdHandColor, iconName: "warning", isGif: false,target: self, action: #selector(self.dismissPopUpMessage))
114
+ }
115
+ }
116
+
117
+ func onLivenessUpdate(dataModel: RemoteProcessingModel) {
118
+ triggerEvent(eventName:"onLivenessUpdate",dataModel:dataModel)
119
+ DispatchQueue.main.async {
120
+ self.start = false;
121
+ self.popUpMessage!.removeFromSuperview();
122
+ self.popUpMessage = showPopUpMessage(view: self.view, title: "Liveness Failed", subTitle: "Let's try again",initialTextColorHex:self.processingColor,initialBackgroundColorHex:self.holdHandColor, iconName: "warning", isGif: false,target: self, action: #selector(self.dismissPopUpMessage))
123
+ }
124
+ }
125
+
126
+
127
+ func onClipPreparationComplete(dataModel: RemoteProcessingModel) {
128
+ triggerEvent(eventName:"onClipPreparationComplete",dataModel:dataModel)
129
+ }
130
+
131
+ func onStatusUpdated(dataModel: RemoteProcessingModel) {
132
+ triggerEvent(eventName:"onStatusUpdated",dataModel:dataModel)
133
+ }
134
+
135
+ func onUpdated(dataModel: RemoteProcessingModel) {
136
+ triggerEvent(eventName:"onUpdated",dataModel:dataModel)
137
+ }
138
+
139
+
140
+
141
+ func onComplete(dataModel: FaceResponseModel) {
142
+
143
+ if let outputProperties = try? JSONSerialization.data(withJSONObject: dataModel.faceExtractedModel?.outputProperties, options: []) {
144
+ UserDefaults.standard.set(outputProperties, forKey: "OutputPropertiesFace")
145
+ }
146
+ triggerCompleteEvent(eventName:"onComplete",dataModel:dataModel.faceExtractedModel)
147
+
148
+ DispatchQueue.main.async {
149
+ self.dismiss(animated: false)
150
+ }
151
+ }
152
+
153
+ func onCardDetected(dataModel: RemoteProcessingModel) {
154
+ triggerEvent(eventName:"onCardDetected",dataModel:dataModel)
155
+ }
156
+
157
+ func onMrzExtracted(dataModel: RemoteProcessingModel) {
158
+ triggerEvent(eventName:"onMrzExtracted",dataModel:dataModel)
159
+ }
160
+
161
+ func onMrzDetected(dataModel: RemoteProcessingModel) {
162
+ triggerEvent(eventName:"onMrzDetected",dataModel:dataModel)
163
+ }
164
+
165
+ func onNoMrzDetected(dataModel: RemoteProcessingModel) {
166
+ triggerEvent(eventName:"onNoMrzDetected",dataModel:dataModel)
167
+ }
168
+
169
+
170
+ func onFaceDetected(dataModel: RemoteProcessingModel) {
171
+ triggerEvent(eventName:"onFaceDetected",dataModel:dataModel)
172
+ }
173
+
174
+ func onNoFaceDetected(dataModel: RemoteProcessingModel) {
175
+ triggerEvent(eventName:"onNoFaceDetected",dataModel:dataModel)
176
+ }
177
+
178
+ func onFaceExtracted(dataModel: RemoteProcessingModel) {
179
+ triggerEvent(eventName:"onFaceExtracted",dataModel:dataModel)
180
+ }
181
+
182
+ func onQualityCheckAvailable(dataModel: RemoteProcessingModel) {
183
+ triggerEvent(eventName:"onQualityCheckAvailable",dataModel:dataModel)
184
+ }
185
+
186
+ func onDocumentCaptured(dataModel: RemoteProcessingModel) {
187
+ triggerEvent(eventName:"onDocumentCaptured",dataModel:dataModel)
188
+ }
189
+
190
+ func onDocumentCropped(dataModel: RemoteProcessingModel) {
191
+ triggerEvent(eventName:"onDocumentCropped",dataModel:dataModel)
192
+ }
193
+
194
+ func onUploadFailed(dataModel: RemoteProcessingModel) {
195
+ triggerEvent(eventName:"onUploadFailed",dataModel:dataModel)
196
+ }
197
+
198
+ func onEnvironmentalConditionsChange(brightness: Double, motion: MotionType) {
199
+ DispatchQueue.main.async {
200
+ if (self.start == false) {
201
+ if (motion == MotionType.HOLD_YOUR_HAND) {
202
+ self.infoLabel?.text = "Please Hold Your Hand"
203
+ self.infoImage!.image = UIImage(named: "info_icon")
204
+ } else {
205
+ if (motion == MotionType.SENDING) {
206
+ self.infoLabel?.text = "Hold Steady"
207
+ self.infoImage!.image = UIImage(named: "info_icon")
208
+ }
209
+ if (motion == MotionType.NO_DETECT) {
210
+ self.infoLabel?.text = "Please face within circle"
211
+ self.infoImage!.image = UIImage(named: "info_icon")
212
+ }
213
+
214
+ }
215
+ }else{
216
+ self.infoLabel?.removeFromSuperview()
217
+ self.infoImage?.removeFromSuperview()
218
+ }
219
+
220
+
221
+ }
222
+ }
223
+
224
+ func onHasTemplates(templates: [TemplatesByCountry]){
225
+ }
226
+
227
+ func triggerEvent(eventName:String, dataModel: RemoteProcessingModel?){
228
+ var eventResultMap: [String: Any] = [:]
229
+ if(dataModel != nil){
230
+
231
+ eventResultMap = ["FaceMatchDataModel": dataModel?.response as Any]
232
+ }
233
+ DispatchQueue.main.async {
234
+ self.nativeAssentifySdk?.sendEvent(withName: eventName, body: eventResultMap)
235
+ }
236
+
237
+ }
238
+
239
+ func triggerCompleteEvent(eventName:String, dataModel: FaceExtractedModel?){
240
+ var eventResultMap: [String: Any] = [:]
241
+ if(dataModel != nil){
242
+
243
+ eventResultMap = ["FaceMatchDataModel": faceModelToJsonString(dataModel: dataModel) as Any]
244
+ }
245
+ DispatchQueue.main.async {
246
+ self.nativeAssentifySdk?.sendEvent(withName: eventName, body: eventResultMap)
247
+ }
248
+
249
+ }
250
+
251
+
252
+
253
+
254
+
255
+ }
256
+
257
+
258
+
@@ -0,0 +1,360 @@
1
+
2
+
3
+ import UIKit
4
+ import AVFoundation
5
+ import AssentifySdk
6
+
7
+ class IDCardController: UIViewController ,ScanIDCardDelegate , ChildViewControllerDelegate
8
+ {
9
+ private var imageUrl: String? = "";
10
+ private var apiKey: String? = "";
11
+ private var isDone:Bool = false;
12
+ private var assentifySdk:AssentifySdk?;
13
+ private var start:Bool = false;
14
+ var infoLabel : UILabel?;
15
+ var infoImage : UIImageView?;
16
+ var popUpMessage : UIView?;
17
+ private var holdHandColor: String;
18
+ private var processingColor: String;
19
+ private var language: String;
20
+ private var flippingCard:Bool = false;
21
+ private var showCountDown:Bool = true;
22
+ private var _kycDocumentDetails:[KycDocumentDetails];
23
+ private var titleID:String? = "";
24
+ private var nativeAssentifySdk:NativeAssentifySdk?;
25
+ private var outputResultProperties: [String: Any]? = [:];
26
+
27
+
28
+
29
+
30
+ init(assentifySdk: AssentifySdk,nativeAssentifySdk:NativeAssentifySdk,holdHandColor: String,processingColor: String,kycDocumentDetails:[KycDocumentDetails],language:String,flippingCard:Bool,titleID:String,showCountDown:Bool,apiKey:String) {
31
+ self.assentifySdk = assentifySdk
32
+ self.nativeAssentifySdk = nativeAssentifySdk
33
+ self.holdHandColor = holdHandColor
34
+ self.processingColor = processingColor
35
+ self._kycDocumentDetails = kycDocumentDetails
36
+ self.language = language
37
+ self.flippingCard = flippingCard
38
+ self.titleID = titleID
39
+ self.showCountDown = showCountDown
40
+ self.apiKey = apiKey
41
+ super.init(nibName: nil, bundle: nil)
42
+ }
43
+ required init?(coder: NSCoder) {
44
+ fatalError("init(coder:) has not been implemented")
45
+ }
46
+
47
+ override var prefersStatusBarHidden: Bool {
48
+ return false
49
+ }
50
+ override func viewDidLoad() {
51
+ super.viewDidLoad()
52
+ self.view.backgroundColor = .clear
53
+ UIApplication.shared.isStatusBarHidden = false;
54
+ DispatchQueue.main.async {
55
+ var scanID = self.assentifySdk?.startScanID(scanIDCardDelegate: self, kycDocumentDetails: self._kycDocumentDetails,language:self.language)
56
+ self.addChild(scanID!)
57
+ self.view.addSubview(scanID!.view)
58
+ scanID!.view.translatesAutoresizingMaskIntoConstraints = false
59
+ NSLayoutConstraint.activate([
60
+ scanID!.view.topAnchor.constraint(equalTo: self.view.topAnchor,constant: 0),
61
+ scanID!.view.leadingAnchor.constraint(equalTo: self.view.leadingAnchor),
62
+ scanID!.view.trailingAnchor.constraint(equalTo: self.view.trailingAnchor),
63
+ scanID!.view.bottomAnchor.constraint(equalTo: self.view.bottomAnchor),
64
+ ])
65
+ scanID!.didMove(toParent: self)
66
+ (self.infoLabel, self.infoImage) = showInfo(view: self.view, text: "Please Present Your ID",initialTextColorHex:self.processingColor,initialBackgroundColorHex:self.holdHandColor,initialImageName:"info_icon")
67
+ showNavigationBarWithBackArrow(view: self.view, target: self, action: #selector(self.backButtonTapped), initialTextColorHex:self.processingColor,initialBackgroundColorHex:self.holdHandColor,title: self.titleID!)
68
+ }
69
+ }
70
+ @objc func backButtonTapped() {
71
+ triggerEvent(eventName:"onBackClick",dataModel:nil)
72
+ DispatchQueue.main.async {
73
+ self.dismiss(animated: false)
74
+ }
75
+ }
76
+
77
+ func dismissParentViewController() {
78
+ triggerEvent(eventName:"onBackClick",dataModel:nil)
79
+ DispatchQueue.main.async {
80
+ self.dismiss(animated: false)
81
+ }
82
+
83
+ }
84
+
85
+ @objc func dismissPopUpMessage() {
86
+ DispatchQueue.main.async {
87
+ if(!self.start){
88
+ self.popUpMessage!.removeFromSuperview();
89
+ (self.infoLabel, self.infoImage) = showInfo(view: self.view, text: "Please Present Your ID",initialTextColorHex:self.processingColor,initialBackgroundColorHex:self.holdHandColor,initialImageName:"info_icon")
90
+ }
91
+ }
92
+
93
+ }
94
+
95
+ func onSend() {
96
+ triggerEvent(eventName:"onSend",dataModel:nil)
97
+ DispatchQueue.main.async {
98
+ if(self.popUpMessage != nil){
99
+ self.popUpMessage!.removeFromSuperview();
100
+ }
101
+ self.start = true;
102
+ self.popUpMessage = showPopUpMessage(view: self.view, title: "Transmitting", subTitle: "",initialTextColorHex:self.processingColor,initialBackgroundColorHex:self.holdHandColor, iconName: "id", isGif: true,target: self, action: #selector(self.dismissPopUpMessage))
103
+ }
104
+ }
105
+
106
+ func onError(dataModel: RemoteProcessingModel) {
107
+ triggerEvent(eventName:"onError",dataModel:dataModel)
108
+ DispatchQueue.main.async {
109
+ self.start = false;
110
+ self.popUpMessage!.removeFromSuperview();
111
+ self.popUpMessage = showPopUpMessage(view: self.view, title: "Unable to extract", subTitle: "Let's try again",initialTextColorHex:self.processingColor,initialBackgroundColorHex:self.holdHandColor, iconName: "warning", isGif: false,target: self, action: #selector(self.dismissPopUpMessage))
112
+ }
113
+ }
114
+
115
+
116
+ func onRetry(dataModel: RemoteProcessingModel) {
117
+ triggerEvent(eventName:"onRetry",dataModel:dataModel)
118
+ DispatchQueue.main.async {
119
+ self.start = false;
120
+ self.popUpMessage!.removeFromSuperview();
121
+ self.popUpMessage = showPopUpMessage(view: self.view, title: "Unable to extract", subTitle: "Let's try again",initialTextColorHex:self.processingColor,initialBackgroundColorHex:self.holdHandColor, iconName: "warning", isGif: false,target: self, action: #selector(self.dismissPopUpMessage))
122
+ }
123
+ }
124
+
125
+ func onLivenessUpdate(dataModel: RemoteProcessingModel) {
126
+ triggerEvent(eventName:"onLivenessUpdate",dataModel:dataModel)
127
+ DispatchQueue.main.async {
128
+ self.start = false;
129
+ self.popUpMessage!.removeFromSuperview();
130
+ self.popUpMessage = showPopUpMessage(view: self.view, title: "Failed ID Check", subTitle: "Please real ID (Not copy)",initialTextColorHex:self.processingColor,initialBackgroundColorHex:self.holdHandColor, iconName: "id_warning", isGif: false,target: self, action: #selector(self.dismissPopUpMessage))
131
+ }
132
+ }
133
+
134
+ func onWrongTemplate(dataModel:RemoteProcessingModel) {
135
+ triggerEvent(eventName:"onWrongTemplate",dataModel:dataModel)
136
+ DispatchQueue.main.async {
137
+ self.start = false;
138
+ self.popUpMessage!.removeFromSuperview();
139
+ self.popUpMessage = showPopUpMessage(view: self.view, title: "Wrong Template", subTitle: "Let's try again",initialTextColorHex:self.processingColor,initialBackgroundColorHex:self.holdHandColor, iconName: "id_warning", isGif: false,target: self, action: #selector(self.dismissPopUpMessage))
140
+ }
141
+ }
142
+ func onClipPreparationComplete(dataModel: RemoteProcessingModel) {
143
+ triggerEvent(eventName:"onClipPreparationComplete",dataModel:dataModel)
144
+ }
145
+
146
+ func onStatusUpdated(dataModel: RemoteProcessingModel) {
147
+ triggerEvent(eventName:"onStatusUpdated",dataModel:dataModel)
148
+ }
149
+
150
+ func onUpdated(dataModel: RemoteProcessingModel) {
151
+ triggerEvent(eventName:"onUpdated",dataModel:dataModel)
152
+ }
153
+
154
+
155
+
156
+ func onComplete(dataModel: IDResponseModel, order: Int) {
157
+
158
+ self.triggerCompleteEvent(eventName:"onComplete",dataModel: dataModel.iDExtractedModel)
159
+
160
+ outputResultProperties!.merge((dataModel.iDExtractedModel?.transformedProperties)!) { (_, new) in new }
161
+
162
+ self.start = false
163
+ DispatchQueue.main.async {
164
+ self.popUpMessage!.removeFromSuperview();
165
+ (self.infoLabel, self.infoImage) = showInfo(view: self.view, text: "Please Present Your ID",initialTextColorHex:self.processingColor,initialBackgroundColorHex:self.holdHandColor,initialImageName:"info_icon")
166
+
167
+ if(self._kycDocumentDetails.count == 1){
168
+ self.imageUrl = dataModel.iDExtractedModel?.imageUrl;
169
+ }
170
+
171
+ if(order == self._kycDocumentDetails.count-1 ){
172
+
173
+ if let outputProperties = try? JSONSerialization.data(withJSONObject: self.outputResultProperties, options: []) {
174
+ UserDefaults.standard.set(outputProperties, forKey: "OutputPropertiesDoc")
175
+ }
176
+ DispatchQueue.main.async {
177
+ self.dismiss(animated: false)
178
+ }
179
+
180
+
181
+ }else{
182
+ if(self.flippingCard){
183
+ let flippingCardUI = showFlippingCard(view: self.view);
184
+ DispatchQueue.main.asyncAfter(deadline: .now() + 5.0) {
185
+ flippingCardUI.removeFromSuperview();
186
+ }
187
+ }
188
+ if(order == 0){
189
+ self.imageUrl = dataModel.iDExtractedModel?.imageUrl;
190
+ }
191
+
192
+ }
193
+ }
194
+
195
+ }
196
+
197
+ func onCardDetected(dataModel: RemoteProcessingModel) {
198
+ triggerEvent(eventName:"onCardDetected",dataModel:dataModel)
199
+ }
200
+
201
+ func onMrzExtracted(dataModel: RemoteProcessingModel) {
202
+ triggerEvent(eventName:"onMrzExtracted",dataModel:dataModel)
203
+ }
204
+
205
+ func onMrzDetected(dataModel: RemoteProcessingModel) {
206
+ triggerEvent(eventName:"onMrzDetected",dataModel:dataModel)
207
+ }
208
+
209
+ func onNoMrzDetected(dataModel: RemoteProcessingModel) {
210
+ triggerEvent(eventName:"onNoMrzDetected",dataModel:dataModel)
211
+ }
212
+
213
+
214
+ func onFaceDetected(dataModel: RemoteProcessingModel) {
215
+ triggerEvent(eventName:"onFaceDetected",dataModel:dataModel)
216
+ }
217
+
218
+ func onNoFaceDetected(dataModel: RemoteProcessingModel) {
219
+ triggerEvent(eventName:"onNoFaceDetected",dataModel:dataModel)
220
+ }
221
+
222
+ func onFaceExtracted(dataModel: RemoteProcessingModel) {
223
+ triggerEvent(eventName:"onFaceExtracted",dataModel:dataModel)
224
+ }
225
+
226
+ func onQualityCheckAvailable(dataModel: RemoteProcessingModel) {
227
+ triggerEvent(eventName:"onQualityCheckAvailable",dataModel:dataModel)
228
+ }
229
+
230
+ func onDocumentCaptured(dataModel: RemoteProcessingModel) {
231
+ triggerEvent(eventName:"onDocumentCaptured",dataModel:dataModel)
232
+ }
233
+
234
+ func onDocumentCropped(dataModel: RemoteProcessingModel) {
235
+ triggerEvent(eventName:"onDocumentCropped",dataModel:dataModel)
236
+ }
237
+
238
+ func onUploadFailed(dataModel: RemoteProcessingModel) {
239
+ triggerEvent(eventName:"onUploadFailed",dataModel:dataModel)
240
+ }
241
+
242
+ func onEnvironmentalConditionsChange(brightness: Double, motion: MotionType, zoom: ZoomType) {
243
+ DispatchQueue.main.async {
244
+ if(self.start == false){
245
+ if (zoom != ZoomType.SENDING && zoom != ZoomType.NO_DETECT) {
246
+ if (zoom == ZoomType.ZOOM_IN) {
247
+ self.start = false;
248
+ self.infoLabel?.text = "Move ID Closer"
249
+ self.infoImage!.image = UIImage(named: "zoom_in")
250
+ }
251
+ if (zoom == ZoomType.ZOOM_OUT) {
252
+ self.start = false;
253
+ self.infoLabel?.text = "Move ID Further"
254
+ self.infoImage!.image = UIImage(named: "zoom_out")
255
+ }
256
+ } else if (motion == MotionType.HOLD_YOUR_HAND) {
257
+ self.start = false;
258
+ self.infoLabel?.text = "Please Hold Your Hand"
259
+ self.infoImage!.image = UIImage(named: "info_icon")
260
+ } else {
261
+ if (motion == MotionType.SENDING && zoom == ZoomType.SENDING){
262
+ self.start = false;
263
+ self.infoLabel?.text = "Hold Steady"
264
+ self.infoImage!.image = UIImage(named: "info_icon")
265
+ }
266
+ if (motion == MotionType.NO_DETECT && zoom == ZoomType.NO_DETECT){
267
+ self.start = false;
268
+ self.infoLabel?.text = "Please Present Your ID"
269
+ self.infoImage!.image = UIImage(named: "info_icon")
270
+ }
271
+
272
+ }
273
+ }else {
274
+ self.infoLabel?.removeFromSuperview()
275
+ self.infoImage?.removeFromSuperview()
276
+ }
277
+
278
+ }
279
+
280
+ }
281
+
282
+ func triggerCompleteEvent(eventName:String, dataModel: IDExtractedModel?){
283
+ var eventResultMap: [String: Any] = [:]
284
+ if(dataModel != nil){
285
+ eventResultMap = ["IdDataModel": iDModelToJsonString(dataModel:dataModel) as Any]
286
+ }
287
+ print("IdDataModel")
288
+ print(iDModelToJsonString(dataModel:dataModel))
289
+ DispatchQueue.main.async {
290
+ self.nativeAssentifySdk?.sendEvent(withName: eventName, body: eventResultMap)
291
+ }
292
+
293
+ }
294
+
295
+ func triggerEvent(eventName:String, dataModel: RemoteProcessingModel?){
296
+ var eventResultMap: [String: Any] = [:]
297
+ if(dataModel != nil){
298
+ eventResultMap = ["IdDataModel": dataModel?.response as Any]
299
+ }
300
+ DispatchQueue.main.async {
301
+ self.nativeAssentifySdk?.sendEvent(withName: eventName, body: eventResultMap)
302
+ }
303
+
304
+ }
305
+
306
+
307
+
308
+
309
+
310
+ func onHasTemplates(templates: [TemplatesByCountry]){
311
+ }
312
+
313
+
314
+
315
+
316
+
317
+ func playVideoInView(videoName: String, ofType fileType: String, in view: UIView, fullscreen: Bool) {
318
+ guard let path = Bundle.main.path(forResource: videoName, ofType: fileType) else {
319
+ print("Video file not found")
320
+ return
321
+ }
322
+
323
+ let url = URL(fileURLWithPath: path)
324
+ let player = AVPlayer(url: url)
325
+ let playerLayer = AVPlayerLayer(player: player)
326
+
327
+ var videoViewFrame = view.bounds
328
+
329
+ if fullscreen {
330
+ // For fullscreen mode, adjust the frame to cover the entire screen
331
+ videoViewFrame = UIScreen.main.bounds
332
+ }
333
+
334
+ // Create a background view with white color
335
+ let backgroundView = UIView(frame: view.bounds)
336
+ backgroundView.backgroundColor = .white
337
+ view.addSubview(backgroundView)
338
+
339
+ let videoView = UIView(frame: videoViewFrame)
340
+ view.addSubview(videoView)
341
+
342
+ playerLayer.frame = videoView.bounds
343
+ videoView.layer.addSublayer(playerLayer)
344
+
345
+ player.play()
346
+
347
+ NotificationCenter.default.addObserver(forName: .AVPlayerItemDidPlayToEndTime, object: player.currentItem, queue: nil) { _ in
348
+ player.pause()
349
+ videoView.removeFromSuperview()
350
+ backgroundView.removeFromSuperview()
351
+ }
352
+ }
353
+
354
+
355
+
356
+
357
+
358
+ }
359
+
360
+