Skip to content

Commit 3dfef67

Browse files
authored
Merge pull request #172 from BlinkID/release/v6.13.0
Release/v6.13.0
2 parents 1571c67 + 64824ff commit 3dfef67

15 files changed

+299
-15
lines changed

BlinkID/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "blinkid-cordova",
3-
"version": "6.12.0",
3+
"version": "6.13.0",
44
"description": "A small and powerful ID card scanning library",
55
"cordova": {
66
"id": "blinkid-cordova",

BlinkID/plugin.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
33
xmlns:android="http://schemas.android.com/apk/res/android"
44
id="blinkid-cordova"
5-
version="6.12.0">
5+
version="6.13.0">
66

77
<name>BlinkIdScanner</name>
88
<description>A small and powerful ID card scanning library</description>

BlinkID/scripts/initIOSFramework.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
HERE="$(dirname "$(test -L "$0" && readlink "$0" || echo "$0")")"
55
pushd "${HERE}/../src/ios/" > /dev/null
66

7-
LINK='https://github.com/BlinkID/blinkid-ios/releases/download/v6.12.0/BlinkID.xcframework.zip'
7+
LINK='https://github.com/BlinkID/blinkid-ios/releases/download/v6.13.0/BlinkID.xcframework.zip'
88
FILENAME='BlinkID.xcframework.zip'
99

1010
# BlinkID framework will be obtained via wget or curl

BlinkID/src/android/java/com/microblink/blinkid/plugins/cordova/recognizers/serialization/BlinkIDSerializationUtils.java

+67-1
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,13 @@
3333
import com.microblink.blinkid.entities.recognizers.blinkid.generic.CustomClassRules;
3434
import com.microblink.blinkid.entities.recognizers.blinkid.generic.DetailedFieldType;
3535
import com.microblink.blinkid.entities.recognizers.blinkid.generic.DependentInfo;
36-
36+
import com.microblink.blinkid.entities.recognizers.blinkid.generic.ClassFilter;
3737

3838
import org.json.JSONArray;
3939
import org.json.JSONException;
4040
import org.json.JSONObject;
41+
import android.os.Parcel;
42+
import androidx.annotation.NonNull;
4143

4244
public abstract class BlinkIDSerializationUtils {
4345
public static JSONObject serializeMrzResult(MrzResult mrzResult) throws JSONException {
@@ -444,6 +446,70 @@ public static CustomClassRules[] deserializeCustomClassRules(JSONArray jsonArray
444446
}
445447
}
446448

449+
public static ClassFilter deserializeClassFilter(JSONObject jsonClassFilter) {
450+
return new ClassFilter() {
451+
@Override
452+
public boolean classFilter(@NonNull ClassInfo classInfo) {
453+
JSONArray jsonIncludeClasses = jsonClassFilter.optJSONArray("includeClasses");
454+
JSONArray jsonExcludeClasses = jsonClassFilter.optJSONArray("excludeClasses");
455+
boolean includeClass = false;
456+
boolean excludeClass = true;
457+
458+
if (jsonIncludeClasses != null) {
459+
if (jsonIncludeClasses.length() > 0) {
460+
for (int x = 0; x < jsonIncludeClasses.length(); x++) {
461+
try {
462+
includeClass = includeClass || matchClassInfo(classInfo, jsonIncludeClasses.getJSONObject(x));
463+
} catch (JSONException e) {}
464+
}
465+
} else {
466+
includeClass = true;
467+
}
468+
} else {
469+
includeClass = true;
470+
}
471+
472+
if (jsonExcludeClasses != null) {
473+
for (int x = 0; x < jsonExcludeClasses.length(); x++) {
474+
try {
475+
excludeClass = excludeClass && !matchClassInfo(classInfo, jsonExcludeClasses.getJSONObject(x));
476+
} catch (JSONException e) {}
477+
}
478+
}
479+
480+
return includeClass && excludeClass;
481+
}
482+
483+
@Override
484+
public int describeContents() {
485+
return 0;
486+
}
487+
488+
@Override
489+
public void writeToParcel(@NonNull Parcel parcel, int i) {
490+
}
491+
};
492+
}
493+
494+
// helper methods for ClassFilter
495+
private static boolean matchClassInfo(ClassInfo classInfo, JSONObject jsonObject) {
496+
Country country = getEnumValue(jsonObject, "country", Country.class);
497+
Type type = getEnumValue(jsonObject, "type", Type.class);
498+
Region region = getEnumValue(jsonObject, "region", Region.class);
499+
500+
return (country == null || classInfo.getCountry() == country) &&
501+
(type == null || classInfo.getType() == type) &&
502+
(region == null || classInfo.getRegion() == region);
503+
}
504+
505+
private static <T extends Enum<T>> T getEnumValue(JSONObject jsonObject, String key, Class<T> enumType) {
506+
try {
507+
return enumType.getEnumConstants()[jsonObject.getInt(key)];
508+
} catch (JSONException | IndexOutOfBoundsException e) {
509+
return null;
510+
}
511+
}
512+
447513
public static JSONArray serializeDependentInfo (DependentInfo[] dependentInfos) throws JSONException {
448514
JSONArray jsonDependentInfos = new JSONArray();
449515
for (int i = 0; i < dependentInfos.length; ++i) {

BlinkID/src/android/java/com/microblink/blinkid/plugins/cordova/recognizers/serialization/BlinkIdMultiSideRecognizerSerialization.java

+2
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ public Recognizer<?> createRecognizer(JSONObject jsonObject) {
1919
recognizer.setAllowUnverifiedMrzResults(jsonObject.optBoolean("allowUnverifiedMrzResults", true));
2020
recognizer.setAnonymizationMode(com.microblink.blinkid.entities.recognizers.blinkid.generic.AnonymizationMode.values()[jsonObject.optInt("anonymizationMode", 3)]);
2121
recognizer.setBlurStrictnessLevel(com.microblink.blinkid.entities.recognizers.blinkid.generic.imageanalysis.StrictnessLevel.values()[jsonObject.optInt("blurStrictnessLevel", 1)]);
22+
recognizer.setClassFilter(BlinkIDSerializationUtils.deserializeClassFilter(jsonObject.optJSONObject("classFilter")));
2223
recognizer.setCombineFrameResults(jsonObject.optBoolean("combineFrameResults", true));
2324
recognizer.setCustomClassRules(BlinkIDSerializationUtils.deserializeCustomClassRules(jsonObject.optJSONArray("customClassRules")));
2425
recognizer.setEnableBlurFilter(jsonObject.optBoolean("enableBlurFilter", true));
@@ -113,6 +114,7 @@ public JSONObject serializeResult(Recognizer<?> recognizer) {
113114
jsonResult.put("signatureImage", SerializationUtils.encodeImageBase64(result.getSignatureImage()));
114115
jsonResult.put("specificDocumentValidity", BlinkIDSerializationUtils.serializeStringResult(result.getSpecificDocumentValidity()));
115116
jsonResult.put("sponsor", BlinkIDSerializationUtils.serializeStringResult(result.getSponsor()));
117+
jsonResult.put("vehicleOwner", BlinkIDSerializationUtils.serializeStringResult(result.getVehicleOwner()));
116118
jsonResult.put("vehicleType", BlinkIDSerializationUtils.serializeStringResult(result.getVehicleType()));
117119
jsonResult.put("visaType", BlinkIDSerializationUtils.serializeStringResult(result.getVisaType()));
118120
} catch (JSONException e) {

BlinkID/src/android/java/com/microblink/blinkid/plugins/cordova/recognizers/serialization/BlinkIdSingleSideRecognizerSerialization.java

+2
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ public Recognizer<?> createRecognizer(JSONObject jsonObject) {
1818
recognizer.setAllowUnverifiedMrzResults(jsonObject.optBoolean("allowUnverifiedMrzResults", true));
1919
recognizer.setAnonymizationMode(com.microblink.blinkid.entities.recognizers.blinkid.generic.AnonymizationMode.values()[jsonObject.optInt("anonymizationMode", 3)]);
2020
recognizer.setBlurStrictnessLevel(com.microblink.blinkid.entities.recognizers.blinkid.generic.imageanalysis.StrictnessLevel.values()[jsonObject.optInt("blurStrictnessLevel", 1)]);
21+
recognizer.setClassFilter(BlinkIDSerializationUtils.deserializeClassFilter(jsonObject.optJSONObject("classFilter")));
2122
recognizer.setCombineFrameResults(jsonObject.optBoolean("combineFrameResults", true));
2223
recognizer.setCustomClassRules(BlinkIDSerializationUtils.deserializeCustomClassRules(jsonObject.optJSONArray("customClassRules")));
2324
recognizer.setEnableBlurFilter(jsonObject.optBoolean("enableBlurFilter", true));
@@ -99,6 +100,7 @@ public JSONObject serializeResult(Recognizer<?> recognizer) {
99100
jsonResult.put("signatureImage", SerializationUtils.encodeImageBase64(result.getSignatureImage()));
100101
jsonResult.put("specificDocumentValidity", BlinkIDSerializationUtils.serializeStringResult(result.getSpecificDocumentValidity()));
101102
jsonResult.put("sponsor", BlinkIDSerializationUtils.serializeStringResult(result.getSponsor()));
103+
jsonResult.put("vehicleOwner", BlinkIDSerializationUtils.serializeStringResult(result.getVehicleOwner()));
102104
jsonResult.put("vehicleType", BlinkIDSerializationUtils.serializeStringResult(result.getVehicleType()));
103105
jsonResult.put("visaType", BlinkIDSerializationUtils.serializeStringResult(result.getVisaType()));
104106
jsonResult.put("vizResult", BlinkIDSerializationUtils.serializeVizResult(result.getVizResult()));

BlinkID/src/android/libBlinkID.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ repositories {
66
}
77

88
dependencies {
9-
implementation('com.microblink:blinkid:6.12.0@aar') {
9+
implementation('com.microblink:blinkid:6.13.0@aar') {
1010
transitive = true
1111
}
1212
}

BlinkID/src/ios/sources/CDVBlinkIDScanner.m

+36-6
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,10 @@
2424
#import "MBOverlaySettingsSerializers.h"
2525
#import "MBRecognizerWrapper.h"
2626
#import "MBSerializationUtils.h"
27+
#import "MBBlinkIDSerializationUtils.h"
2728

2829
#import <BlinkID/BlinkID.h>
29-
30-
@interface CDVPlugin () <MBOverlayViewControllerDelegate, MBScanningRecognizerRunnerDelegate, MBFirstSideFinishedRecognizerRunnerDelegate>
30+
@interface CDVPlugin () <MBOverlayViewControllerDelegate, MBScanningRecognizerRunnerDelegate, MBFirstSideFinishedRecognizerRunnerDelegate, MBBlinkIdMultiSideRecognizerDelegate, MBBlinkIdSingleSideRecognizerDelegate>
3131

3232
@property (nonatomic, retain) CDVInvokedUrlCommand *lastCommand;
3333

@@ -38,6 +38,8 @@ @interface CDVBlinkIDScanner ()
3838
@property (nonatomic, strong) MBRecognizerCollection *recognizerCollection;
3939
@property (nonatomic) id<MBRecognizerRunnerViewController> scanningViewController;
4040
@property (nonatomic, strong) MBRecognizerRunner *recognizerRunner;
41+
@property (nonatomic, strong) MBOverlayViewController *overlayVc;
42+
@property (nonatomic, strong) NSDictionary *jsonRecognizerCollection;
4143

4244
@property (class, nonatomic, readonly) NSString *RESULT_LIST;
4345
@property (class, nonatomic, readonly) NSString *CANCELLED;
@@ -75,18 +77,27 @@ - (void)scanWithCamera:(CDVInvokedUrlCommand *)command {
7577
[self setLastCommand:command];
7678

7779
NSDictionary *jsonOverlaySettings = [self sanitizeDictionary:[self.lastCommand argumentAtIndex:0]];
78-
NSDictionary *jsonRecognizerCollection = [self sanitizeDictionary:[self.lastCommand argumentAtIndex:1]];
80+
_jsonRecognizerCollection = [self sanitizeDictionary:[self.lastCommand argumentAtIndex:1]];
7981
NSDictionary *jsonLicenses = [self sanitizeDictionary:[self.lastCommand argumentAtIndex:2]];
8082

8183
if([self setLicense:jsonLicenses]) {
8284
[self setLanguage:(NSString *)jsonOverlaySettings[@"language"] country:(NSString *)jsonOverlaySettings[@"country"]];
8385

84-
self.recognizerCollection = [[MBRecognizerSerializers sharedInstance] deserializeRecognizerCollection:jsonRecognizerCollection];
86+
self.recognizerCollection = [[MBRecognizerSerializers sharedInstance] deserializeRecognizerCollection:_jsonRecognizerCollection];
8587

8688
// create overlay VC
87-
MBOverlayViewController *overlayVC = [[MBOverlaySettingsSerializers sharedInstance] createOverlayViewController:jsonOverlaySettings recognizerCollection:self.recognizerCollection delegate:self];
89+
_overlayVc = [[MBOverlaySettingsSerializers sharedInstance] createOverlayViewController:jsonOverlaySettings recognizerCollection:self.recognizerCollection delegate:self];
90+
for (MBRecognizer *recognizer in self.recognizerCollection.recognizerList) {
91+
if([recognizer isKindOfClass:[MBBlinkIdMultiSideRecognizer class]]) {
92+
[(MBBlinkIdMultiSideRecognizer *)recognizer setDelegate:self];
93+
break;
94+
} else if ([recognizer isKindOfClass:[MBBlinkIdSingleSideRecognizer class]]) {
95+
[(MBBlinkIdSingleSideRecognizer *)recognizer setDelegate:self];
96+
break;
97+
}
98+
}
8899

89-
UIViewController<MBRecognizerRunnerViewController>* recognizerRunnerViewController = [MBViewControllerFactory recognizerRunnerViewControllerWithOverlayViewController:overlayVC];
100+
UIViewController<MBRecognizerRunnerViewController>* recognizerRunnerViewController = [MBViewControllerFactory recognizerRunnerViewControllerWithOverlayViewController:_overlayVc];
90101
[recognizerRunnerViewController setModalPresentationStyle:UIModalPresentationFullScreen];
91102

92103
self.scanningViewController = recognizerRunnerViewController;
@@ -245,6 +256,25 @@ - (void)overlayDidTapClose:(MBOverlayViewController *)overlayViewController {
245256
CDVPluginResult *result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:resultDict];
246257
[self.commandDelegate sendPluginResult:result callbackId:self.lastCommand.callbackId];
247258
}
259+
- (BOOL)multiSideClassInfoFilter:(nullable MBClassInfo *)classInfo {
260+
return [MBBlinkIDSerializationUtils deserializeClassFilter:_jsonRecognizerCollection classInfo:classInfo];
261+
}
262+
263+
- (void)onMultiSideDocumentSupportStatus:(BOOL)isDocumentSupported {
264+
if([_overlayVc isKindOfClass:[MBBlinkIdOverlayViewController class]]) {
265+
[(MBBlinkIdOverlayViewController *)_overlayVc onDocumentSupportStatus:isDocumentSupported];
266+
}
267+
}
268+
269+
- (BOOL)classInfoFilter:(MBClassInfo *)classInfo {
270+
return [MBBlinkIDSerializationUtils deserializeClassFilter:_jsonRecognizerCollection classInfo:classInfo];
271+
}
272+
273+
- (void)onDocumentSupportStatus:(BOOL)isDocumentSupported {
274+
if([_overlayVc isKindOfClass:[MBBlinkIdOverlayViewController class]]) {
275+
[(MBBlinkIdOverlayViewController *)_overlayVc onDocumentSupportStatus:isDocumentSupported];
276+
}
277+
} //TODO SSAD SERZITION UTILS
248278

249279
+ (NSString *)RESULT_LIST {
250280
return @"resultList";

BlinkID/src/ios/sources/MBBlinkIDSerializationUtils.h

+1
Original file line numberDiff line numberDiff line change
@@ -32,4 +32,5 @@
3232
+(NSDictionary * _Nonnull) serializeNSDate:(NSDate * _Nullable) value;
3333
+(MBCustomClassRules * _Nonnull) deserializeMBCustomClassRules:(NSDictionary * _Nullable)jsonCustomClassRules;
3434
+(NSMutableArray<NSDictionary *> * _Nullable) serializeDependentInfo:(NSArray<MBDependentInfo *>* _Nullable)dependentInfos;
35+
+ (BOOL)deserializeClassFilter:(NSDictionary * _Nullable)jsonRecognizerCollection classInfo:(MBClassInfo * _Nullable)classInfo;
3536
@end

BlinkID/src/ios/sources/MBBlinkIDSerializationUtils.m

+56
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,59 @@ +(NSDictionary *) serializeClassInfo:(MBClassInfo *)classInfo {
136136
};
137137
}
138138

139+
+ (BOOL)deserializeClassFilter:(NSDictionary *)jsonRecognizerCollection classInfo:(MBClassInfo *)classInfo {
140+
BOOL includeClass = NO;
141+
BOOL excludeClass = YES;
142+
NSDictionary *classFilter;
143+
144+
for (NSDictionary *recognizer in jsonRecognizerCollection[@"recognizerArray"]) {
145+
NSString *recognizerType = recognizer[@"recognizerType"];
146+
147+
if ([recognizerType isEqualToString:@"BlinkIdMultiSideRecognizer"] ||
148+
[recognizerType isEqualToString:@"BlinkIdSingleSideRecognizer"]) {
149+
150+
classFilter = recognizer[@"classFilter"];
151+
if (!classFilter) {
152+
return YES;
153+
}
154+
}
155+
}
156+
157+
NSArray *addClassToClassFilter = classFilter[@"includeClasses"];
158+
if (addClassToClassFilter != nil && ![addClassToClassFilter isEqual:[NSNull null]]) {
159+
if ([addClassToClassFilter count] > 0) {
160+
for (int i = 0; i < [addClassToClassFilter count]; i++) {
161+
NSDictionary *jsonClassInfo = addClassToClassFilter[i];
162+
includeClass = includeClass || [self matchClassFilter:jsonClassInfo classInfo:classInfo];
163+
}
164+
} else {
165+
includeClass = YES;
166+
}
167+
} else {
168+
includeClass = YES;
169+
}
170+
171+
NSArray *removeClassFromClassFilter = classFilter[@"excludeClasses"];
172+
if (removeClassFromClassFilter != nil && ![removeClassFromClassFilter isEqual:[NSNull null]]) {
173+
for (int i = 0; i < [removeClassFromClassFilter count]; i++) {
174+
NSDictionary *jsonClassInfo = removeClassFromClassFilter[i];
175+
excludeClass = excludeClass && ![self matchClassFilter:jsonClassInfo classInfo:classInfo];
176+
}
177+
}
178+
return includeClass && excludeClass;
179+
}
180+
181+
+ (BOOL)matchClassFilter:(NSDictionary *)jsonClassFilterInfo classInfo:(MBClassInfo *)classInfo {
182+
183+
NSNumber *country = [jsonClassFilterInfo valueForKey:@"country"];
184+
NSNumber *region = [jsonClassFilterInfo valueForKey:@"region"];
185+
NSNumber *type = [jsonClassFilterInfo valueForKey:@"type"];
186+
187+
return (![self isNotNullandNil:country] || classInfo.country == country.integerValue) &&
188+
(![self isNotNullandNil:type] || classInfo.type == type.integerValue) &&
189+
(![self isNotNullandNil:region]|| classInfo.region == region.integerValue);
190+
}
191+
139192
+(NSDictionary *) serializeVizResult:(MBVizResult *)vizResult {
140193
return @{
141194
@"firstName" : [MBBlinkIDSerializationUtils serializeMBStringResult:vizResult.firstName],
@@ -407,5 +460,8 @@ +(NSNumber *)serializeMBSide:(MBSide) value {
407460

408461
return jsonDependentInfos;
409462
}
463+
+ (BOOL)isNotNullandNil:(NSNumber *)value {
464+
return ![value isEqual:[NSNull null]] && (value != nil);
465+
}
410466

411467
@end

BlinkID/src/ios/sources/Recognizers/Wrappers/MBBlinkIdMultiSideRecognizerWrapper.m

+1
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,7 @@ -(NSDictionary *) serializeResult {
265265
[jsonResult setValue:[MBSerializationUtils encodeMBImage:self.result.signatureImage] forKey:@"signatureImage"];
266266
[jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBStringResult:self.result.specificDocumentValidity] forKey:@"specificDocumentValidity"];
267267
[jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBStringResult:self.result.sponsor] forKey:@"sponsor"];
268+
[jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBStringResult:self.result.vehicleOwner] forKey:@"vehicleOwner"];
268269
[jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBStringResult:self.result.vehicleType] forKey:@"vehicleType"];
269270
[jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBStringResult:self.result.visaType] forKey:@"visaType"];
270271
[jsonResult setValue:[MBBlinkIDSerializationUtils serializeDependentInfo:self.result.dependentInfos] forKey:@"dependentsInfo"];

BlinkID/src/ios/sources/Recognizers/Wrappers/MBBlinkIdSingleSideRecognizerWrapper.m

+1
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,7 @@ -(NSDictionary *) serializeResult {
230230
[jsonResult setValue:[MBSerializationUtils encodeMBImage:self.result.signatureImage] forKey:@"signatureImage"];
231231
[jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBStringResult:self.result.specificDocumentValidity] forKey:@"specificDocumentValidity"];
232232
[jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBStringResult:self.result.sponsor] forKey:@"sponsor"];
233+
[jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBStringResult:self.result.vehicleOwner] forKey:@"vehicleOwner"];
233234
[jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBStringResult:self.result.vehicleType] forKey:@"vehicleType"];
234235
[jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBStringResult:self.result.visaType] forKey:@"visaType"];
235236
[jsonResult setValue:[MBBlinkIDSerializationUtils serializeVizResult:self.result.vizResult] forKey:@"vizResult"];

0 commit comments

Comments
 (0)