@regulaforensics/face-sdk 8.2.855-nightly → 8.2.856-rc
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/RNFaceSDK.podspec +4 -4
- package/android/{CDVFaceSDK.kt → CVDFaceSDK.kt} +1 -1
- package/android/build.gradle +2 -2
- package/android/cordova.gradle +2 -2
- package/android/src/main/java/com/regula/plugin/facesdk/JSONConstructor.kt +7 -12
- package/examples/capacitor/android/app/build.gradle +2 -2
- package/examples/capacitor/android/app/capacitor.build.gradle +3 -2
- package/examples/capacitor/android/app/src/main/AndroidManifest.xml +1 -1
- package/examples/capacitor/android/build.gradle +3 -3
- package/examples/capacitor/android/capacitor.settings.gradle +5 -2
- package/examples/capacitor/android/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/examples/capacitor/android/gradle/wrapper/gradle-wrapper.properties +1 -1
- package/examples/capacitor/android/gradlew +5 -4
- package/examples/capacitor/android/gradlew.bat +2 -2
- package/examples/capacitor/android/variables.gradle +10 -10
- package/examples/capacitor/ios/App/App.xcodeproj/project.pbxproj +4 -20
- package/examples/capacitor/ios/App/Podfile +1 -5
- package/examples/capacitor/ios/App/Podfile.lock +14 -14
- package/examples/capacitor/package-lock.json +847 -811
- package/examples/capacitor/package.json +17 -17
- package/examples/ionic/images/icon.png +0 -0
- package/examples/ionic/package-lock.json +2419 -2633
- package/examples/ionic/package.json +14 -16
- package/examples/ionic/scripts/ios.sh +1 -1
- package/examples/react_native/package-lock.json +1443 -1161
- package/examples/react_native/package.json +2 -2
- package/ios/CVDFaceSDK.h +7 -0
- package/ios/CVDFaceSDK.m +43 -0
- package/ios/RFSWConfig.h +27 -0
- package/ios/RFSWConfig.m +199 -0
- package/ios/RFSWJSONConstructor.h +135 -0
- package/ios/RFSWJSONConstructor.m +985 -0
- package/ios/RFSWMain.h +24 -0
- package/ios/RFSWMain.m +381 -0
- package/ios/RNFaceSDK.h +8 -0
- package/ios/RNFaceSDK.m +39 -7
- package/package.json +1 -1
- package/plugin.xml +13 -11
- package/test/package-lock.json +1 -1
- package/examples/ionic/patches/cordova-plugin-ionic-webview+5.0.1.patch +0 -23
- package/ios/CDVFaceSDK.swift +0 -42
- package/ios/Config.swift +0 -242
- package/ios/Decoder.swift +0 -934
- package/ios/Main.swift +0 -191
- package/ios/RNFaceSDK.swift +0 -42
- package/ios/Utils.swift +0 -82
package/ios/RFSWMain.h
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
#import "RFSWJSONConstructor.h"
|
|
2
|
+
@import FaceSDK;
|
|
3
|
+
|
|
4
|
+
typedef void (^RFSWCallback)(id _Nullable response);
|
|
5
|
+
typedef void (^RFSWEventSender)(NSString* _Nonnull event, id _Nullable data);
|
|
6
|
+
extern UIViewController*_Nonnull(^ _Nonnull RFSWRootViewController)(void);
|
|
7
|
+
|
|
8
|
+
@interface RFSWMain: NSObject<RFSURLRequestInterceptingDelegate,
|
|
9
|
+
RFSVideoUploadingDelegate,
|
|
10
|
+
RFSCustomizationActionDelegate,
|
|
11
|
+
RFSFaceCaptureDelegate,
|
|
12
|
+
RFSLivenessDelegate>
|
|
13
|
+
|
|
14
|
+
+(void)methodCall:(NSString* _Nonnull)method
|
|
15
|
+
:(NSArray* _Nonnull)args
|
|
16
|
+
:(RFSWCallback _Nonnull)callback
|
|
17
|
+
:(RFSWEventSender _Nonnull)eventSender;
|
|
18
|
+
|
|
19
|
+
@end
|
|
20
|
+
|
|
21
|
+
static NSString* _Nonnull cameraSwitchEvent = @"cameraSwitchEvent";
|
|
22
|
+
static NSString* _Nonnull livenessNotificationEvent = @"livenessNotificationEvent";
|
|
23
|
+
static NSString* _Nonnull videoEncoderCompletionEvent = @"video_encoder_completion";
|
|
24
|
+
static NSString* _Nonnull onCustomButtonTappedEvent = @"onCustomButtonTappedEvent";
|
package/ios/RFSWMain.m
ADDED
|
@@ -0,0 +1,381 @@
|
|
|
1
|
+
#import "RFSWMain.h"
|
|
2
|
+
|
|
3
|
+
@implementation RFSWMain
|
|
4
|
+
|
|
5
|
+
+(void)methodCall:(NSString*)method :(NSArray*)args :(RFSWCallback)callback :(RFSWEventSender)eventSender {
|
|
6
|
+
if(!this) this = [RFSWMain new];
|
|
7
|
+
sendEvent = eventSender;
|
|
8
|
+
NSDictionary* Switch = @{
|
|
9
|
+
@"getVersion": ^{ [self getVersion :callback]; },
|
|
10
|
+
@"getServiceUrl": ^{ [self getServiceUrl :callback]; },
|
|
11
|
+
@"setServiceUrl": ^{ [self setServiceUrl :args[0] :callback]; },
|
|
12
|
+
@"getTenant": ^{ [self getTenant :callback]; },
|
|
13
|
+
@"setTenant": ^{ [self setTenant :args[0]]; },
|
|
14
|
+
@"getEnv": ^{ [self getEnv :callback]; },
|
|
15
|
+
@"setEnv": ^{ [self setEnv :args[0]]; },
|
|
16
|
+
@"getLocale": ^{ [self getLocale :callback]; },
|
|
17
|
+
@"setLocale": ^{ [self setLocale :args[0]]; },
|
|
18
|
+
@"setLocalizationDictionary": ^{ [self setLocalizationDictionary :args[0]]; },
|
|
19
|
+
@"setRequestHeaders": ^{ [self setRequestHeaders :args[0]]; },
|
|
20
|
+
@"setCustomization": ^{ [self setCustomization :args[0]]; },
|
|
21
|
+
@"isInitialized": ^{ [self isInitialized :callback]; },
|
|
22
|
+
@"initialize": ^{ [self initialize :args[0] :callback]; },
|
|
23
|
+
@"deinitialize": ^{ [self deinitialize]; },
|
|
24
|
+
@"startFaceCapture": ^{ [self startFaceCapture :args[0] :callback]; },
|
|
25
|
+
@"stopFaceCapture": ^{ [self stopFaceCapture]; },
|
|
26
|
+
@"startLiveness": ^{ [self startLiveness :args[0] :callback]; },
|
|
27
|
+
@"stopLiveness": ^{ [self stopLiveness]; },
|
|
28
|
+
@"matchFaces": ^{ [self matchFaces :args[0] :args[1] :callback]; },
|
|
29
|
+
@"splitComparedFaces": ^{ [self splitComparedFaces :args[0] :args[1] :callback]; },
|
|
30
|
+
@"detectFaces": ^{ [self detectFaces :args[0] :callback]; },
|
|
31
|
+
@"createPerson": ^{ [self createPerson :args[0] :args[1] :args[2] :callback]; },
|
|
32
|
+
@"updatePerson": ^{ [self updatePerson :args[0] :callback]; },
|
|
33
|
+
@"deletePerson": ^{ [self deletePerson :args[0] :callback]; },
|
|
34
|
+
@"getPerson": ^{ [self getPerson :args[0] :callback]; },
|
|
35
|
+
@"addPersonImage": ^{ [self addPersonImage :args[0] :args[1] :callback]; },
|
|
36
|
+
@"deletePersonImage": ^{ [self deletePersonImage :args[0] :args[1] :callback]; },
|
|
37
|
+
@"getPersonImage": ^{ [self getPersonImage :args[0] :args[1] :callback]; },
|
|
38
|
+
@"getPersonImages": ^{ [self getPersonImages :args[0] :callback]; },
|
|
39
|
+
@"getPersonImagesForPage": ^{ [self getPersonImagesForPage :args[0] :args[1] :args[2] :callback]; },
|
|
40
|
+
@"createGroup": ^{ [self createGroup :args[0] :args[1] :callback]; },
|
|
41
|
+
@"updateGroup": ^{ [self updateGroup :args[0] :callback]; },
|
|
42
|
+
@"editPersonsInGroup": ^{ [self editPersonsInGroup :args[0] :args[1] :callback]; },
|
|
43
|
+
@"deleteGroup": ^{ [self deleteGroup :args[0] :callback]; },
|
|
44
|
+
@"getGroup": ^{ [self getGroup :args[0] :callback]; },
|
|
45
|
+
@"getGroups": ^{ [self getGroups :callback]; },
|
|
46
|
+
@"getGroupsForPage": ^{ [self getGroupsForPage :args[0] :args[1] :callback]; },
|
|
47
|
+
@"getPersonGroups": ^{ [self getPersonGroups :args[0] :callback]; },
|
|
48
|
+
@"getPersonGroupsForPage": ^{ [self getPersonGroupsForPage :args[0] :args[1] :args[2] :callback]; },
|
|
49
|
+
@"getPersonsInGroup": ^{ [self getPersonsInGroup :args[0] :callback]; },
|
|
50
|
+
@"getPersonsInGroupForPage": ^{ [self getPersonsInGroupForPage :args[0] :args[1] :args[2] :callback]; },
|
|
51
|
+
@"searchPerson": ^{ [self searchPerson :args[0] :callback]; },
|
|
52
|
+
};
|
|
53
|
+
((void(^)(void))Switch[method])();
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
static RFSWMain* this;
|
|
57
|
+
static RFSWEventSender sendEvent;
|
|
58
|
+
static NSDictionary* headers;
|
|
59
|
+
|
|
60
|
+
+(void)getVersion:(RFSWCallback)callback {
|
|
61
|
+
callback([RFSWJSONConstructor generateFaceSDKVersion:RFSFaceSDK.service.version]);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
+(void)getServiceUrl:(RFSWCallback)callback {
|
|
65
|
+
callback([RFSFaceSDK.service serviceURL]);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
+(void)setServiceUrl:(NSString*)url :(RFSWCallback)callback {
|
|
69
|
+
[RFSFaceSDK.service setServiceURL:url];
|
|
70
|
+
callback(@"");
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
+(void)getTenant:(RFSWCallback)callback {
|
|
74
|
+
callback([RFSFaceSDK.service tenant]);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
+(void)setTenant:(NSString*)tag {
|
|
78
|
+
[RFSFaceSDK.service setTenant:tag];
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
+(void)getEnv:(RFSWCallback)callback {
|
|
82
|
+
callback([RFSFaceSDK.service env]);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
+(void)setEnv:(NSString*)tag {
|
|
86
|
+
[RFSFaceSDK.service setEnv:tag];
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
+(void)getLocale:(RFSWCallback)callback {
|
|
90
|
+
callback([RFSFaceSDK.service languageLocaleCode]);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
+(void)setLocale:(NSString*)locale {
|
|
94
|
+
[RFSFaceSDK.service setLanguageLocaleCode:locale];
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
+(void)setLocalizationDictionary:(NSDictionary*)dictionary {
|
|
98
|
+
RFSFaceSDK.service.localizationHandler = ^NSString* (NSString* localizationKey) {
|
|
99
|
+
if (dictionary[localizationKey]) return dictionary[localizationKey];
|
|
100
|
+
return nil;
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
+(void)setRequestHeaders:(NSDictionary*)headersDict {
|
|
105
|
+
headers = headersDict;
|
|
106
|
+
RFSFaceSDK.service.requestInterceptingDelegate = this;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
-(NSURLRequest*)interceptorPrepareRequest:(NSURLRequest*)request {
|
|
110
|
+
NSMutableURLRequest *interceptedRequest = [request mutableCopy];
|
|
111
|
+
for (NSString* key in headers.allKeys)
|
|
112
|
+
[interceptedRequest addValue:[headers valueForKey:key] forHTTPHeaderField:key];
|
|
113
|
+
return interceptedRequest;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
+(void)setCustomization:(NSDictionary*)config {
|
|
117
|
+
[RFSWConfig setCustomization:config :RFSFaceSDK.service.customization];
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
+(void)isInitialized:(RFSWCallback)callback {
|
|
121
|
+
callback(@([RFSFaceSDK.service isInitialized]));
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
+(void)initialize:(NSDictionary*)config :(RFSWCallback)callback {
|
|
125
|
+
[RFSFaceSDK.service initializeWithConfiguration:[RFSWJSONConstructor initConfigFromJSON:config]
|
|
126
|
+
completion:[RFSWMain initCompletion:callback]];
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
+(void)deinitialize {
|
|
130
|
+
[RFSFaceSDK.service deinitialize];
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
+(void)startFaceCapture:(NSDictionary*)config :(RFSWCallback)callback {
|
|
134
|
+
dispatch_async(dispatch_get_main_queue(), ^{
|
|
135
|
+
[RFSFaceSDK.service presentFaceCaptureViewControllerFrom:RFSWRootViewController()
|
|
136
|
+
animated:true
|
|
137
|
+
configuration:[RFSWConfig faceCaptureConfigFromJSON:config]
|
|
138
|
+
onCapture:[self faceCaptureCompletion:callback]
|
|
139
|
+
completion:nil];
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
+(void)stopFaceCapture {
|
|
144
|
+
[RFSFaceSDK.service stopFaceCaptureViewController];
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
+(void)startLiveness:(NSDictionary*)config :(RFSWCallback)callback {
|
|
148
|
+
dispatch_async(dispatch_get_main_queue(), ^{
|
|
149
|
+
[RFSFaceSDK.service startLivenessFrom:RFSWRootViewController()
|
|
150
|
+
animated:true
|
|
151
|
+
configuration:[RFSWConfig livenessConfigFromJSON:config]
|
|
152
|
+
onLiveness:[self livenessCompletion:callback]
|
|
153
|
+
completion:nil];
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
+(void)stopLiveness {
|
|
158
|
+
[RFSFaceSDK.service stopLivenessProcessing];
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
+(void)matchFaces:(NSDictionary*)request :(NSDictionary*)config :(RFSWCallback)callback {
|
|
162
|
+
[RFSFaceSDK.service matchFaces:[RFSWJSONConstructor matchFacesRequestFromJSON:request]
|
|
163
|
+
configuration:[RFSWConfig matchFacesConfigFromJSON:config]
|
|
164
|
+
completion:[self matchFacesCompletion:callback]];
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
+(void)splitComparedFaces:(NSArray*)faces :(NSNumber*)similarity :(RFSWCallback)callback {
|
|
168
|
+
NSArray* array = [RFSWJSONConstructor arrayFromJSON:faces :@selector(comparedFacesPairFromJSON:)];
|
|
169
|
+
RFSMatchFacesSimilarityThresholdSplit *split = [RFSMatchFacesSimilarityThresholdSplit splitPairs:array bySimilarityThreshold:similarity];
|
|
170
|
+
callback([RFSWJSONConstructor generateComparedFacesSplit:split]);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
+(void)detectFaces:(NSDictionary*)request :(RFSWCallback)callback {
|
|
174
|
+
[RFSFaceSDK.service detectFacesByRequest:[RFSWJSONConstructor detectFacesRequestFromJSON:request]
|
|
175
|
+
completion:[self detectFacesCompletion:callback]];
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
+(void)createPerson:(NSString*)name :(NSArray<NSString*>*)groupIds :(NSDictionary*)metadata :(RFSWCallback)callback {
|
|
179
|
+
[RFSFaceSDK.service.personDatabase createPersonWithName:name
|
|
180
|
+
metadata:metadata
|
|
181
|
+
groupIds:groupIds
|
|
182
|
+
completion:[self databaseItemCompletion :callback :@selector(generatePerson:)]];
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
+(void)updatePerson:(NSDictionary*)person :(RFSWCallback)callback {
|
|
186
|
+
[RFSFaceSDK.service.personDatabase getPersonByPersonId:[RFSWJSONConstructor idFromJSON:person] completion:^(RFSItemResponse<RFSPerson *> * response) {
|
|
187
|
+
if (response.error) callback([RFSWJSONConstructor generatePersonDBResponse:nil :response.error]);
|
|
188
|
+
else [RFSFaceSDK.service.personDatabase updatePerson:[RFSWJSONConstructor updatePersonFromJSON:response.item :person]
|
|
189
|
+
completion:[self databaseCompletion:callback]];
|
|
190
|
+
}];
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
+(void)deletePerson:(NSString*)personId :(RFSWCallback)callback {
|
|
194
|
+
[RFSFaceSDK.service.personDatabase deletePersonByPersonId:personId
|
|
195
|
+
completion:[self databaseCompletion:callback]];
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
+(void)getPerson:(NSString*)personId :(RFSWCallback)callback {
|
|
199
|
+
[RFSFaceSDK.service.personDatabase getPersonByPersonId:personId
|
|
200
|
+
completion:[self databaseItemCompletion :callback :@selector(generatePerson:)]];
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
+(void)addPersonImage:(NSString*)personId :(NSDictionary*)image :(RFSWCallback)callback {
|
|
204
|
+
[RFSFaceSDK.service.personDatabase addPersonImageByPersonId:personId
|
|
205
|
+
imageUpload:[RFSWJSONConstructor imageUploadFromJSON:image]
|
|
206
|
+
completion:[self databaseItemCompletion :callback :@selector(generatePersonImage:)]];
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
+(void)deletePersonImage:(NSString*)personId :(NSString*)imageId :(RFSWCallback)callback {
|
|
210
|
+
[RFSFaceSDK.service.personDatabase deletePersonImageByPersonId:personId
|
|
211
|
+
imageId: imageId
|
|
212
|
+
completion:[self databaseCompletion:callback]];
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
+(void)getPersonImage:(NSString*)personId :(NSString*)imageId :(RFSWCallback)callback {
|
|
216
|
+
[RFSFaceSDK.service.personDatabase getPersonImageByPersonId:personId imageId:imageId completion:^(RFSDataResponse* response) {
|
|
217
|
+
callback([RFSWJSONConstructor generatePersonDBResponse:[RFSWJSONConstructor base64Encode:response.data] :response.error]);
|
|
218
|
+
}];
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
+(void)getPersonImages:(NSString*)personId :(RFSWCallback)callback {
|
|
222
|
+
[RFSFaceSDK.service.personDatabase getPersonImagesByPersonId:personId
|
|
223
|
+
completion:[self databasePageCompletion :callback :@selector(generatePersonImage:)]];
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
+(void)getPersonImagesForPage:(NSString*)personId :(NSNumber*)page :(NSNumber*)size :(RFSWCallback)callback {
|
|
227
|
+
[RFSFaceSDK.service.personDatabase getPersonImagesByPersonId:personId
|
|
228
|
+
page:[page integerValue]
|
|
229
|
+
size:[size integerValue]
|
|
230
|
+
completion:[self databasePageCompletion :callback :@selector(generatePersonImage:)]];
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
+(void)createGroup:(NSString*)name :(NSDictionary*)metadata :(RFSWCallback)callback {
|
|
234
|
+
[RFSFaceSDK.service.personDatabase createGroupWithName:name
|
|
235
|
+
metadata:metadata
|
|
236
|
+
completion:[self databaseItemCompletion :callback :@selector(generatePersonGroup:)]];
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
+(void)updateGroup:(NSDictionary*)group :(RFSWCallback)callback {
|
|
240
|
+
[RFSFaceSDK.service.personDatabase getGroupByGroupId:[RFSWJSONConstructor idFromJSON:group] completion:^(RFSItemResponse<RFSPersonGroup *> * response) {
|
|
241
|
+
if (response.error) callback([RFSWJSONConstructor generatePersonDBResponse:nil :response.error]);
|
|
242
|
+
else [RFSFaceSDK.service.personDatabase updateGroup:[RFSWJSONConstructor updatePersonGroupFromJSON:response.item :group]
|
|
243
|
+
completion:[self databaseCompletion:callback]];
|
|
244
|
+
}];
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
+(void)editPersonsInGroup:(NSString*)groupId :(NSDictionary*)editGroupPersonsRequest :(RFSWCallback)callback {
|
|
248
|
+
[RFSFaceSDK.service.personDatabase editGroupPersonsByGroupId:groupId
|
|
249
|
+
request:[RFSWJSONConstructor editGroupPersonsRequestFromJSON:editGroupPersonsRequest]
|
|
250
|
+
completion:[self databaseCompletion:callback]];
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
+(void)deleteGroup:(NSString*)groupId :(RFSWCallback)callback {
|
|
254
|
+
[RFSFaceSDK.service.personDatabase deleteGroupByGroupId:groupId
|
|
255
|
+
completion:[self databaseCompletion:callback]];
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
+(void)getGroup:(NSString*)groupId :(RFSWCallback)callback {
|
|
259
|
+
[RFSFaceSDK.service.personDatabase getGroupByGroupId:groupId
|
|
260
|
+
completion:[self databaseItemCompletion :callback :@selector(generatePersonGroup:)]];
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
+(void)getGroups:(RFSWCallback)callback {
|
|
264
|
+
[RFSFaceSDK.service.personDatabase getGroups:[self databasePageCompletion :callback :@selector(generatePersonGroup:)]];
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
+(void)getGroupsForPage:(NSNumber*)page :(NSNumber*)size :(RFSWCallback)callback {
|
|
268
|
+
[RFSFaceSDK.service.personDatabase getGroupsForPage:[page integerValue]
|
|
269
|
+
size:[size integerValue]
|
|
270
|
+
completion:[self databasePageCompletion :callback :@selector(generatePersonGroup:)]];
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
+(void)getPersonGroups:(NSString*)personId :(RFSWCallback)callback {
|
|
274
|
+
[RFSFaceSDK.service.personDatabase getPersonGroupsByPersonId:personId
|
|
275
|
+
completion:[self databasePageCompletion :callback :@selector(generatePersonGroup:)]];
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
+(void)getPersonGroupsForPage:(NSString*)personId :(NSNumber*)page :(NSNumber*)size :(RFSWCallback)callback {
|
|
279
|
+
[RFSFaceSDK.service.personDatabase getPersonGroupsByPersonId:personId
|
|
280
|
+
page:[page integerValue]
|
|
281
|
+
size:[size integerValue]
|
|
282
|
+
completion:[self databasePageCompletion :callback :@selector(generatePersonGroup:)]];
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
+(void)getPersonsInGroup:(NSString*)groupId :(RFSWCallback)callback {
|
|
286
|
+
[RFSFaceSDK.service.personDatabase getGroupPersonsByGroupId:groupId
|
|
287
|
+
completion:[self databasePageCompletion :callback :@selector(generatePerson:)]];
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
+(void)getPersonsInGroupForPage:(NSString*)groupId :(NSNumber*)page :(NSNumber*)size :(RFSWCallback)callback {
|
|
291
|
+
[RFSFaceSDK.service.personDatabase getGroupPersonsByGroupId:groupId
|
|
292
|
+
page:[page integerValue]
|
|
293
|
+
size:[size integerValue]
|
|
294
|
+
completion:[self databasePageCompletion :callback :@selector(generatePerson:)]];
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
+(void)searchPerson:(NSDictionary*)searchPersonRequest :(RFSWCallback)callback {
|
|
298
|
+
[RFSFaceSDK.service.personDatabase searchPerson:[RFSWJSONConstructor searchPersonRequestFromJSON:searchPersonRequest]
|
|
299
|
+
completion:^(RFSSearchPersonResponse *response) {
|
|
300
|
+
callback([RFSWJSONConstructor generatePersonDBResponse:[RFSWJSONConstructor generateArray:response.results :@selector(generateSearchPerson:)] :response.error]);
|
|
301
|
+
}];
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
+(RFSInitializationCompletion)initCompletion:(RFSWCallback)callback {
|
|
305
|
+
return ^(BOOL success, NSError* error) {
|
|
306
|
+
RFSFaceSDK.service.customization.configuration = [RFSUIConfiguration defaultConfiguration];
|
|
307
|
+
[RFSFaceSDK.service setVideoUploadingDelegate:this];
|
|
308
|
+
[RFSFaceSDK.service setFaceCaptureDelegate:this];
|
|
309
|
+
[RFSFaceSDK.service setLivenessDelegate:this];
|
|
310
|
+
RFSFaceSDK.service.customization.actionDelegate = this;
|
|
311
|
+
callback([RFSWJSONConstructor generateInitCompletion:success :error]);
|
|
312
|
+
};
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
+(void (^)(RFSFaceCaptureResponse*)) faceCaptureCompletion:(RFSWCallback)callback {
|
|
316
|
+
return ^(RFSFaceCaptureResponse* response) {
|
|
317
|
+
callback([RFSWJSONConstructor generateFaceCaptureResponse:response]);
|
|
318
|
+
};
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
+(void (^)(RFSLivenessResponse*)) livenessCompletion:(RFSWCallback)callback {
|
|
322
|
+
return ^(RFSLivenessResponse* response) {
|
|
323
|
+
callback([RFSWJSONConstructor generateLivenessResponse:response]);
|
|
324
|
+
};
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
+(void (^)(RFSMatchFacesResponse*)) matchFacesCompletion:(RFSWCallback)callback {
|
|
328
|
+
return ^(RFSMatchFacesResponse* response) {
|
|
329
|
+
callback([RFSWJSONConstructor generateMatchFacesResponse:response]);
|
|
330
|
+
};
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
+(void (^)(RFSDetectFacesResponse*)) detectFacesCompletion:(RFSWCallback)callback {
|
|
334
|
+
return ^(RFSDetectFacesResponse* response) {
|
|
335
|
+
callback([RFSWJSONConstructor generateDetectFacesResponse:response]);
|
|
336
|
+
};
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
+(void (^)(RFSComfirmResponse *response))databaseCompletion:(RFSWCallback)callback {
|
|
340
|
+
return ^(RFSComfirmResponse *response) {
|
|
341
|
+
callback([RFSWJSONConstructor generatePersonDBResponse:@YES :response.error]);
|
|
342
|
+
};
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
+(void (^)(RFSItemResponse<RFSDBBaseItem *> *response))databaseItemCompletion:(RFSWCallback)callback :(SEL)toJson {
|
|
346
|
+
return ^(RFSItemResponse<RFSDBBaseItem *> *response) {
|
|
347
|
+
callback([RFSWJSONConstructor generatePersonDBResponse:[RFSWJSONConstructor performSelector:toJson withObject:response.item] :response.error]);
|
|
348
|
+
};
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
+(void (^)(RFSPageResponse<RFSDBBaseItem *> *response))databasePageCompletion:(RFSWCallback)callback :(SEL)toJson {
|
|
352
|
+
return ^(RFSPageResponse<RFSDBBaseItem *> *response) {
|
|
353
|
+
callback([RFSWJSONConstructor generatePersonDBResponse:@{
|
|
354
|
+
@"items": [RFSWJSONConstructor generateArray:response.items :toJson],
|
|
355
|
+
@"page": @(response.page),
|
|
356
|
+
@"totalPages": @(response.totalPages),
|
|
357
|
+
} :response.error]);
|
|
358
|
+
};
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
// RFSFaceCaptureDelegate & RFSLivenessDelegate
|
|
362
|
+
-(void)cameraPositionChanged:(RFSCameraPosition)cameraPosition {
|
|
363
|
+
sendEvent(cameraSwitchEvent, @(cameraPosition));
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
// RFSLivenessDelegate
|
|
367
|
+
-(void)processStatusChanged:(RFSLivenessProcessStatus)status result:(RFSLivenessResponse*)result {
|
|
368
|
+
sendEvent(livenessNotificationEvent, [RFSWJSONConstructor generateLivenessNotification:status result:result]);
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
// RFSVideoUploadingDelegate
|
|
372
|
+
-(void)videoUploadingForTransactionId:(NSString*)transactionId didFinishedWithSuccess:(BOOL)success {
|
|
373
|
+
sendEvent(videoEncoderCompletionEvent, [RFSWJSONConstructor generateVideoEncoderCompletion:transactionId :success]);
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
// RFSCustomizationActionDelegate
|
|
377
|
+
-(void)onFaceCustomButtonTappedWithTag:(NSInteger)tag {
|
|
378
|
+
sendEvent(onCustomButtonTappedEvent, @(tag));
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
@end
|
package/ios/RNFaceSDK.h
ADDED
package/ios/RNFaceSDK.m
CHANGED
|
@@ -1,11 +1,43 @@
|
|
|
1
|
-
#import
|
|
2
|
-
#import <React/RCTBridgeModule.h>
|
|
1
|
+
#import "RNFaceSDK.h"
|
|
3
2
|
|
|
4
|
-
@
|
|
3
|
+
@implementation RNFaceSDK
|
|
4
|
+
RCT_EXPORT_MODULE();
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
static NSMutableArray<RCTResponseSenderBlock>* _firedCallbacks = nil;
|
|
7
|
+
- (NSMutableArray<RCTResponseSenderBlock>*)firedCallbacks {
|
|
8
|
+
if (_firedCallbacks == nil) _firedCallbacks = @[].mutableCopy;
|
|
9
|
+
return _firedCallbacks;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
- (NSArray<NSString*>*)supportedEvents {
|
|
13
|
+
return @[cameraSwitchEvent,
|
|
14
|
+
livenessNotificationEvent,
|
|
15
|
+
videoEncoderCompletionEvent,
|
|
16
|
+
onCustomButtonTappedEvent];
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
static bool hasListeners;
|
|
20
|
+
- (void)startObserving { hasListeners = YES; }
|
|
21
|
+
- (void)stopObserving { hasListeners = NO; }
|
|
22
|
+
|
|
23
|
+
UIViewController*(^RFSWRootViewController)(void) = ^UIViewController*(){
|
|
24
|
+
return RCTPresentedViewController();
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
RCT_EXPORT_METHOD(exec:(NSString*)method:(NSArray*)args:(RCTPromiseResolveBlock)resolve:(RCTPromiseRejectBlock)reject) {
|
|
28
|
+
RFSWCallback callback = ^(id _Nullable data) {
|
|
29
|
+
if ([self.firedCallbacks containsObject:resolve]) return;
|
|
30
|
+
[self.firedCallbacks addObject:resolve];
|
|
31
|
+
resolve([RFSWJSONConstructor toSendable:data]);
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
RFSWEventSender sendEvent = ^(NSString* event, id data) {
|
|
35
|
+
dispatch_async(dispatch_get_main_queue(), ^{
|
|
36
|
+
if (hasListeners) [self sendEventWithName:event body:[RFSWJSONConstructor toSendable:data]];
|
|
37
|
+
});
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
[RFSWMain methodCall:method :args :callback :sendEvent];
|
|
41
|
+
}
|
|
10
42
|
|
|
11
43
|
@end
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@regulaforensics/face-sdk",
|
|
3
|
-
"version": "8.2.
|
|
3
|
+
"version": "8.2.856-rc",
|
|
4
4
|
"description": "This is an npm module for Regula Face SDK. It allows you to easily compaire faces using your phone's camera.",
|
|
5
5
|
"main": "www/react-native/index.js",
|
|
6
6
|
"module": "www/capacitor/index.js",
|
package/plugin.xml
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<?xml version='1.0' encoding='utf-8'?>
|
|
2
|
-
<plugin id="@regulaforensics/face-sdk" version="8.2.
|
|
2
|
+
<plugin id="@regulaforensics/face-sdk" version="8.2.856-rc" xmlns="http://apache.org/cordova/ns/plugins/1.0">
|
|
3
3
|
<name>FaceSDK</name>
|
|
4
4
|
<description>Cordova plugin for Regula Face SDK</description>
|
|
5
5
|
<license>commercial</license>
|
|
@@ -12,22 +12,24 @@
|
|
|
12
12
|
<platform name="ios">
|
|
13
13
|
<config-file target="config.xml" parent="/widget">
|
|
14
14
|
<feature name="FaceSDK">
|
|
15
|
-
<param name="ios-package" value="
|
|
15
|
+
<param name="ios-package" value="CVDFaceSDK" />
|
|
16
16
|
</feature>
|
|
17
17
|
<preference name="deployment-target" value="13.0" />
|
|
18
|
-
<preference name="SwiftVersion" value="5" />
|
|
19
18
|
</config-file>
|
|
20
|
-
<
|
|
21
|
-
<source-file src="ios/
|
|
22
|
-
<
|
|
23
|
-
<source-file src="ios/
|
|
24
|
-
<
|
|
19
|
+
<header-file src="ios/CVDFaceSDK.h" />
|
|
20
|
+
<source-file src="ios/CVDFaceSDK.m" />
|
|
21
|
+
<header-file src="ios/RFSWMain.h" />
|
|
22
|
+
<source-file src="ios/RFSWMain.m" />
|
|
23
|
+
<header-file src="ios/RFSWJSONConstructor.h" />
|
|
24
|
+
<source-file src="ios/RFSWJSONConstructor.m" />
|
|
25
|
+
<header-file src="ios/RFSWConfig.h" />
|
|
26
|
+
<source-file src="ios/RFSWConfig.m" />
|
|
25
27
|
<podspec>
|
|
26
28
|
<config>
|
|
27
29
|
<source url="https://github.com/CocoaPods/Specs.git" />
|
|
28
30
|
</config>
|
|
29
31
|
<pods>
|
|
30
|
-
<pod name="
|
|
32
|
+
<pod name="FaceSDKStage" spec="8.2.3864" />
|
|
31
33
|
</pods>
|
|
32
34
|
</podspec>
|
|
33
35
|
</platform>
|
|
@@ -35,11 +37,11 @@
|
|
|
35
37
|
<platform name="android">
|
|
36
38
|
<config-file parent="/*" target="res/xml/config.xml">
|
|
37
39
|
<feature name="FaceSDK">
|
|
38
|
-
<param name="android-package" value="com.regula.plugin.facesdk.
|
|
40
|
+
<param name="android-package" value="com.regula.plugin.facesdk.CVDFaceSDK" />
|
|
39
41
|
</feature>
|
|
40
42
|
</config-file>
|
|
41
43
|
<framework src="android/cordova.gradle" custom="true" type="gradleReference" />
|
|
42
|
-
<source-file src="android/
|
|
44
|
+
<source-file src="android/CVDFaceSDK.kt" target-dir="java/com.regula.plugin.facesdk" />
|
|
43
45
|
<source-file src="android/src/main/java/com/regula/plugin/facesdk/Main.kt" target-dir="java/com.regula.plugin.facesdk" />
|
|
44
46
|
<source-file src="android/src/main/java/com/regula/plugin/facesdk/JSONConstructor.kt" target-dir="java/com.regula.plugin.facesdk" />
|
|
45
47
|
<source-file src="android/src/main/java/com/regula/plugin/facesdk/Config.kt" target-dir="java/com.regula.plugin.facesdk" />
|
package/test/package-lock.json
CHANGED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
diff --git a/node_modules/cordova-plugin-ionic-webview/src/ios/CDVWKWebViewEngine.m b/node_modules/cordova-plugin-ionic-webview/src/ios/CDVWKWebViewEngine.m
|
|
2
|
-
index 2acb99b..900a04c 100644
|
|
3
|
-
--- a/node_modules/cordova-plugin-ionic-webview/src/ios/CDVWKWebViewEngine.m
|
|
4
|
-
+++ b/node_modules/cordova-plugin-ionic-webview/src/ios/CDVWKWebViewEngine.m
|
|
5
|
-
@@ -731,6 +731,18 @@ - (BOOL)defaultResourcePolicyForURL:(NSURL*)url
|
|
6
|
-
return YES;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
+ // Allow internal local-server navigation even when no plugin overrides the request.
|
|
10
|
-
+ NSURL *localServerUrl = [NSURL URLWithString:self.CDV_LOCAL_SERVER];
|
|
11
|
-
+ if (localServerUrl != nil && url != nil) {
|
|
12
|
-
+ NSString *localScheme = localServerUrl.scheme.lowercaseString;
|
|
13
|
-
+ NSString *localHost = localServerUrl.host.lowercaseString;
|
|
14
|
-
+ NSString *urlScheme = url.scheme.lowercaseString;
|
|
15
|
-
+ NSString *urlHost = url.host.lowercaseString;
|
|
16
|
-
+ if ([localScheme isEqualToString:urlScheme] && [localHost isEqualToString:urlHost]) {
|
|
17
|
-
+ return YES;
|
|
18
|
-
+ }
|
|
19
|
-
+ }
|
|
20
|
-
+
|
|
21
|
-
return NO;
|
|
22
|
-
}
|
|
23
|
-
|
package/ios/CDVFaceSDK.swift
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
@objc(CDVFaceSDK)
|
|
2
|
-
class CDVFaceSDK: CDVPlugin {
|
|
3
|
-
@objc(exec:)
|
|
4
|
-
func exec(_ command: CDVInvokedUrlCommand) {
|
|
5
|
-
this = self
|
|
6
|
-
let method = command.arguments.first as! String
|
|
7
|
-
args = Array(command.arguments.dropFirst())
|
|
8
|
-
|
|
9
|
-
if method == "setEvent" {
|
|
10
|
-
eventCallbackIds[args.first as! String] = command.callbackId
|
|
11
|
-
return
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
methodCall(method, { data in sendEvent(command.callbackId, data) })
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
var this: CDVFaceSDK?
|
|
19
|
-
var eventCallbackIds: [String: String] = [:]
|
|
20
|
-
func sendEvent(_ event: String, _ data: Any? = "") {
|
|
21
|
-
var callbackId = event
|
|
22
|
-
let eventId = eventCallbackIds[event]
|
|
23
|
-
if eventId != nil { callbackId = eventId! }
|
|
24
|
-
|
|
25
|
-
// In this section unreasonable casts and optionals are made to
|
|
26
|
-
// ensure that this code works with both cordova-ios@7 and cordova-ios@8.
|
|
27
|
-
var sendable = data.toSendable()
|
|
28
|
-
if sendable is NSNull { sendable = "" }
|
|
29
|
-
let message = sendable as! String
|
|
30
|
-
let result: CDVPluginResult? = CDVPluginResult(status: CDVCommandStatus.ok, messageAs: message)
|
|
31
|
-
result!.setKeepCallbackAs(true)
|
|
32
|
-
|
|
33
|
-
this!.commandDelegate.send(result!, callbackId: callbackId)
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
let rootViewController: () -> UIViewController? = {
|
|
37
|
-
return UIApplication.shared.connectedScenes
|
|
38
|
-
.compactMap { $0 as? UIWindowScene }
|
|
39
|
-
.flatMap { $0.windows }
|
|
40
|
-
.first { $0.isKeyWindow }?
|
|
41
|
-
.rootViewController
|
|
42
|
-
}
|