签约流程,指纹登录
diff --git a/platforms/ios/dlapp.xcodeproj/project.pbxproj b/platforms/ios/dlapp.xcodeproj/project.pbxproj
index 92c3c27..7e856ef 100644
--- a/platforms/ios/dlapp.xcodeproj/project.pbxproj
+++ b/platforms/ios/dlapp.xcodeproj/project.pbxproj
@@ -5,7 +5,6 @@
 	};
 	objectVersion = 46;
 	objects = {
-
 /* Begin PBXBuildFile section */
 		0207DA581B56EA530066E2B4 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 0207DA571B56EA530066E2B4 /* Images.xcassets */; };
 		04347BD0ABAC4EE0B4CDDDB6 /* jcore-ios-2.1.1.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 444DBF371D8346D7BC7EE35D /* jcore-ios-2.1.1.a */; };
@@ -48,7 +47,6 @@
 		A42AE846FF7B482FB889AAEB /* QRScanner.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8478FFD487C4004A1CEFCA8 /* QRScanner.swift */; };
 		A50EB04ADB24A5CBB680802F /* libPods-dlapp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D992375F52889311A88544EF /* libPods-dlapp.a */; };
 		A54A9FED843144C887EA4286 /* AppDelegate+JPush.m in Sources */ = {isa = PBXBuildFile; fileRef = 91E044FC8377488C886C818B /* AppDelegate+JPush.m */; };
-		B69FF513D1EE4772AFF6050B /* Fingerprint.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2099240B64744E08C91C285 /* Fingerprint.swift */; };
 		B8EFB66D03A44372A240B05B /* CDVCamera.m in Sources */ = {isa = PBXBuildFile; fileRef = 80B448E71F8941268B78692C /* CDVCamera.m */; };
 		BC39BA77AF0D4F94BC27666A /* CDVDevice.m in Sources */ = {isa = PBXBuildFile; fileRef = A50DE9801E5E4302A78D569C /* CDVDevice.m */; };
 		BC998F935D174204820F4015 /* AFURLSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 22AE2683802B4CB1BAF69ABF /* AFURLSessionManager.m */; };
@@ -66,6 +64,7 @@
 		F68EA21E51A3463A8FE2EE92 /* CDVWKWebViewUIDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B73EA28E46846FF84E6AF02 /* CDVWKWebViewUIDelegate.m */; };
 		F939AD8D22BB769B006B371B /* libsqlite3.0.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = F939AD8C22BB769B006B371B /* libsqlite3.0.tbd */; };
 		FDE92C386167415E8040F8AB /* AFURLResponseSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = FDEE8379D7A34C55A616F700 /* AFURLResponseSerialization.m */; };
+		81B8C05354704A02AE1560A0 /* Fingerprint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 39BDB5993A0D495C9E97E995 /* Fingerprint.swift */; };
 /* End PBXBuildFile section */
 
 /* Begin PBXContainerItemProxy section */
@@ -175,7 +174,6 @@
 		B3CE13EED96B44C0B06B1B2C /* TouchID.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; name = TouchID.m; path = "cordova-plugin-touch-id/TouchID.m"; sourceTree = "<group>"; };
 		B3F9D30FB27A4B26A445BA84 /* CDVExif.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = CDVExif.h; path = "cordova-plugin-camera/CDVExif.h"; sourceTree = "<group>"; };
 		BA6C5B1A6A6A488790CA41EB /* AFSecurityPolicy.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; name = AFSecurityPolicy.m; path = "cordova-plugin-advanced-http/AFSecurityPolicy.m"; sourceTree = "<group>"; };
-		C2099240B64744E08C91C285 /* Fingerprint.swift */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.swift; name = Fingerprint.swift; path = "cordova-plugin-fingerprint-aio/Fingerprint.swift"; sourceTree = "<group>"; };
 		C44E29C3B190445C98BBAB84 /* CoreFoundation.framework */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = System/Library/Frameworks/CoreFoundation.framework; sourceTree = SDKROOT; };
 		C8478FFD487C4004A1CEFCA8 /* QRScanner.swift */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.swift; name = QRScanner.swift; path = "cordova-plugin-qrscanner/QRScanner.swift"; sourceTree = "<group>"; };
 		CBD6EA74C612474DA862E146 /* libresolv.tbd */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libresolv.tbd; path = usr/lib/libresolv.tbd; sourceTree = SDKROOT; };
@@ -196,9 +194,10 @@
 		F840E1F0165FE0F500CFE078 /* config.xml */ = {isa = PBXFileReference; lastKnownFileType = text.xml; name = config.xml; path = dlapp/config.xml; sourceTree = "<group>"; };
 		F939AD8C22BB769B006B371B /* libsqlite3.0.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libsqlite3.0.tbd; path = usr/lib/libsqlite3.0.tbd; sourceTree = SDKROOT; };
 		FC8EA7F3637547AD8BC62127 /* JPushDefine.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = JPushDefine.h; path = "jpush-phonegap-plugin/JPushDefine.h"; sourceTree = "<group>"; };
-		FCC7E279D80D4FB9BCF2530A /* Bridging-Header.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = "Bridging-Header.h"; path = "cordova-plugin-fingerprint-aio/Bridging-Header.h"; sourceTree = "<group>"; };
 		FDEE8379D7A34C55A616F700 /* AFURLResponseSerialization.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; name = AFURLResponseSerialization.m; path = "cordova-plugin-advanced-http/AFURLResponseSerialization.m"; sourceTree = "<group>"; };
 		FE0B455916A4481681D59FE0 /* WebKit.framework */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; };
+		39BDB5993A0D495C9E97E995 /* Fingerprint.swift */ = {isa = PBXFileReference; name = "Fingerprint.swift"; path = "cordova-plugin-fingerprint-aio/Fingerprint.swift"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.swift; explicitFileType = undefined; includeInIndex = 0; };
+		705239B1B7D9402DA8A9FDA7 /* Bridging-Header.h */ = {isa = PBXFileReference; name = "Bridging-Header.h"; path = "cordova-plugin-fingerprint-aio/Bridging-Header.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; };
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
@@ -373,8 +372,6 @@
 				3BE5364CD5E74AFDAB853364 /* AFURLResponseSerialization.h */,
 				7E931FBE72E74C4887498E5F /* AFURLSessionManager.h */,
 				D4DBE4512BAD4694B7EB5217 /* SDNetworkActivityIndicator.h */,
-				C2099240B64744E08C91C285 /* Fingerprint.swift */,
-				FCC7E279D80D4FB9BCF2530A /* Bridging-Header.h */,
 				1ABBE12B040548F8909BFC7B /* CDVStatusBar.m */,
 				8BFF0D502E2241F0A89DF67F /* CDVStatusBar.h */,
 				B3CE13EED96B44C0B06B1B2C /* TouchID.m */,
@@ -410,6 +407,8 @@
 				7DC7711D3C76485B9E422E3A /* CDVWKProcessPoolFactory.h */,
 				1E4D2B8A1F474D9883C50B86 /* Brightness.m */,
 				817A61F7D48245FA9567B115 /* Brightness.h */,
+				39BDB5993A0D495C9E97E995 /* Fingerprint.swift */,
+				705239B1B7D9402DA8A9FDA7 /* Bridging-Header.h */,
 			);
 			name = Plugins;
 			path = dlapp/Plugins;
@@ -585,7 +584,6 @@
 				FDE92C386167415E8040F8AB /* AFURLResponseSerialization.m in Sources */,
 				BC998F935D174204820F4015 /* AFURLSessionManager.m in Sources */,
 				D404D18DD0114DA787E0BB43 /* SDNetworkActivityIndicator.m in Sources */,
-				B69FF513D1EE4772AFF6050B /* Fingerprint.swift in Sources */,
 				CAE5A91F948A472F9D872EC8 /* CDVStatusBar.m in Sources */,
 				D834895F80744E0F96D59047 /* TouchID.m in Sources */,
 				C61263FC7FE642E9B25A81E5 /* DisableStatusbar.m in Sources */,
@@ -603,6 +601,7 @@
 				F68EA21E51A3463A8FE2EE92 /* CDVWKWebViewUIDelegate.m in Sources */,
 				1F969D21D7EF4CF1A547A1DF /* CDVWKProcessPoolFactory.m in Sources */,
 				C0A6FD40F47B434496535606 /* Brightness.m in Sources */,
+				81B8C05354704A02AE1560A0 /* Fingerprint.swift in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
diff --git a/platforms/ios/dlapp/Images.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/platforms/ios/dlapp/Images.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
index 93f7d4b..1711166 100644
--- a/platforms/ios/dlapp/Images.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
+++ b/platforms/ios/dlapp/Images.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
Binary files differ
diff --git a/platforms/ios/dlapp/Images.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/platforms/ios/dlapp/Images.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
index 338c489..8003676 100644
--- a/platforms/ios/dlapp/Images.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
+++ b/platforms/ios/dlapp/Images.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
Binary files differ
diff --git a/platforms/ios/dlapp/Images.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/platforms/ios/dlapp/Images.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
index 26304e4..2961408 100644
--- a/platforms/ios/dlapp/Images.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
+++ b/platforms/ios/dlapp/Images.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
Binary files differ
diff --git a/platforms/ios/dlapp/Images.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/platforms/ios/dlapp/Images.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
index 3179c09..458cfdc 100644
--- a/platforms/ios/dlapp/Images.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
+++ b/platforms/ios/dlapp/Images.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
Binary files differ
diff --git a/platforms/ios/dlapp/Images.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/platforms/ios/dlapp/Images.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
index 6807263..2efdc6a 100644
--- a/platforms/ios/dlapp/Images.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
+++ b/platforms/ios/dlapp/Images.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
Binary files differ
diff --git a/platforms/ios/dlapp/Images.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/platforms/ios/dlapp/Images.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
index 3f765b9..53a7b33 100644
--- a/platforms/ios/dlapp/Images.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
+++ b/platforms/ios/dlapp/Images.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
Binary files differ
diff --git a/platforms/ios/dlapp/Images.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/platforms/ios/dlapp/Images.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
index 338c489..8003676 100644
--- a/platforms/ios/dlapp/Images.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
+++ b/platforms/ios/dlapp/Images.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
Binary files differ
diff --git a/platforms/ios/dlapp/Images.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/platforms/ios/dlapp/Images.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
index 5159c6d..63f3b12 100644
--- a/platforms/ios/dlapp/Images.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
+++ b/platforms/ios/dlapp/Images.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
Binary files differ
diff --git a/platforms/ios/dlapp/Images.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/platforms/ios/dlapp/Images.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
index a5394ab..97b8089 100644
--- a/platforms/ios/dlapp/Images.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
+++ b/platforms/ios/dlapp/Images.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
Binary files differ
diff --git a/platforms/ios/dlapp/Images.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/platforms/ios/dlapp/Images.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
index a5394ab..97b8089 100644
--- a/platforms/ios/dlapp/Images.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
+++ b/platforms/ios/dlapp/Images.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
Binary files differ
diff --git a/platforms/ios/dlapp/Images.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/platforms/ios/dlapp/Images.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
index 28db6a7..c47ba12 100644
--- a/platforms/ios/dlapp/Images.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
+++ b/platforms/ios/dlapp/Images.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
Binary files differ
diff --git a/platforms/ios/dlapp/Images.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/platforms/ios/dlapp/Images.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
index ee96b32..8ede09f 100644
--- a/platforms/ios/dlapp/Images.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
+++ b/platforms/ios/dlapp/Images.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
Binary files differ
diff --git a/platforms/ios/dlapp/Images.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/platforms/ios/dlapp/Images.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
index f4e7346..923ccab 100644
--- a/platforms/ios/dlapp/Images.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
+++ b/platforms/ios/dlapp/Images.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
Binary files differ
diff --git a/platforms/ios/dlapp/Images.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/platforms/ios/dlapp/Images.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
index 86c995d..cfb60e6 100644
--- a/platforms/ios/dlapp/Images.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
+++ b/platforms/ios/dlapp/Images.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
Binary files differ
diff --git a/platforms/ios/dlapp/Images.xcassets/AppIcon.appiconset/ItunesArtwork@2x.png b/platforms/ios/dlapp/Images.xcassets/AppIcon.appiconset/ItunesArtwork@2x.png
index eb0ca49..38db89b 100644
--- a/platforms/ios/dlapp/Images.xcassets/AppIcon.appiconset/ItunesArtwork@2x.png
+++ b/platforms/ios/dlapp/Images.xcassets/AppIcon.appiconset/ItunesArtwork@2x.png
Binary files differ
diff --git a/platforms/ios/dlapp/Images.xcassets/iTunesArtwork@1x.png b/platforms/ios/dlapp/Images.xcassets/iTunesArtwork@1x.png
index cfd1080..34df640 100644
--- a/platforms/ios/dlapp/Images.xcassets/iTunesArtwork@1x.png
+++ b/platforms/ios/dlapp/Images.xcassets/iTunesArtwork@1x.png
Binary files differ
diff --git a/platforms/ios/dlapp/Images.xcassets/iTunesArtwork@2x.png b/platforms/ios/dlapp/Images.xcassets/iTunesArtwork@2x.png
index eb0ca49..38db89b 100644
--- a/platforms/ios/dlapp/Images.xcassets/iTunesArtwork@2x.png
+++ b/platforms/ios/dlapp/Images.xcassets/iTunesArtwork@2x.png
Binary files differ
diff --git a/platforms/ios/dlapp/Images.xcassets/iTunesArtwork@3x.png b/platforms/ios/dlapp/Images.xcassets/iTunesArtwork@3x.png
index d6e68b2..317adb1 100644
--- a/platforms/ios/dlapp/Images.xcassets/iTunesArtwork@3x.png
+++ b/platforms/ios/dlapp/Images.xcassets/iTunesArtwork@3x.png
Binary files differ
diff --git a/platforms/ios/dlapp/Plugins/cordova-plugin-fingerprint-aio/Fingerprint.swift b/platforms/ios/dlapp/Plugins/cordova-plugin-fingerprint-aio/Fingerprint.swift
index 547aeb2..1f01be4 100644
--- a/platforms/ios/dlapp/Plugins/cordova-plugin-fingerprint-aio/Fingerprint.swift
+++ b/platforms/ios/dlapp/Plugins/cordova-plugin-fingerprint-aio/Fingerprint.swift
@@ -1,23 +1,47 @@
 import Foundation
 import LocalAuthentication
 
+
 @objc(Fingerprint) class Fingerprint : CDVPlugin {
 
+    enum PluginError:Int {
+        case BIOMETRIC_UNKNOWN_ERROR = -100
+        case BIOMETRIC_UNAVAILABLE = -101
+        case BIOMETRIC_AUTHENTICATION_FAILED = -102
+        case BIOMETRIC_PERMISSION_NOT_GRANTED = -105
+        case BIOMETRIC_NOT_ENROLLED = -106
+        case BIOMETRIC_DISMISSED = -108
+        case BIOMETRIC_SCREEN_GUARD_UNSECURED = -110
+        case BIOMETRIC_LOCKED_OUT = -111
+    }
+
+    struct ErrorCodes {
+        var code: Int
+    }
+
+
     @objc(isAvailable:)
     func isAvailable(_ command: CDVInvokedUrlCommand){
         let authenticationContext = LAContext();
         var biometryType = "finger";
+        var errorResponse: [AnyHashable: Any] = [
+            "code": 0,
+            "message": "Not Available"
+        ];
         var error:NSError?;
         let policy:LAPolicy = .deviceOwnerAuthenticationWithBiometrics;
-
+        var pluginResult = CDVPluginResult(status: CDVCommandStatus_ERROR, messageAs: "Not available");
         let available = authenticationContext.canEvaluatePolicy(policy, error: &error);
 
+        var results: [String : Any]
+
         if(error != nil){
             biometryType = "none";
+            errorResponse["code"] = error?.code;
+            errorResponse["message"] = error?.localizedDescription;
         }
 
-        var pluginResult = CDVPluginResult(status: CDVCommandStatus_ERROR, messageAs: "Not available");
-        if available == true {
+        if (available == true) {
             if #available(iOS 11.0, *) {
                 switch(authenticationContext.biometryType) {
                 case .none:
@@ -30,6 +54,22 @@
             }
 
             pluginResult = CDVPluginResult(status: CDVCommandStatus_OK, messageAs: biometryType);
+        }else{
+            var code: Int;
+            switch(error!._code) {
+                case Int(kLAErrorBiometryNotAvailable):
+                    code = PluginError.BIOMETRIC_UNAVAILABLE.rawValue;
+                    break;
+                case Int(kLAErrorBiometryNotEnrolled):
+                    code = PluginError.BIOMETRIC_NOT_ENROLLED.rawValue;
+                    break;
+
+                default:
+                    code = PluginError.BIOMETRIC_UNKNOWN_ERROR.rawValue;
+                    break;
+            }
+            results = ["code": code, "message": error!.localizedDescription];
+            pluginResult = CDVPluginResult(status: CDVCommandStatus_ERROR, messageAs: results);
         }
 
         commandDelegate.send(pluginResult, callbackId:command.callbackId);
@@ -39,7 +79,10 @@
     @objc(authenticate:)
     func authenticate(_ command: CDVInvokedUrlCommand){
         let authenticationContext = LAContext();
-        var pluginResult = CDVPluginResult(status: CDVCommandStatus_ERROR, messageAs: "Something went wrong");
+        var errorResponse: [AnyHashable: Any] = [
+            "message": "Something went wrong"
+        ];
+        var pluginResult = CDVPluginResult(status: CDVCommandStatus_ERROR, messageAs: errorResponse);
         var reason = "Authentication";
         var policy:LAPolicy = .deviceOwnerAuthentication;
         let data  = command.arguments[0] as AnyObject?;
@@ -49,17 +92,17 @@
                 authenticationContext.localizedFallbackTitle = "";
                 policy = .deviceOwnerAuthenticationWithBiometrics;
             } else {
-                if let localizedFallbackTitle = data?["localizedFallbackTitle"] as! String? {
-                    authenticationContext.localizedFallbackTitle = localizedFallbackTitle;
+                if let fallbackButtonTitle = data?["fallbackButtonTitle"] as! String? {
+                    authenticationContext.localizedFallbackTitle = fallbackButtonTitle;
+                }else{
+                    authenticationContext.localizedFallbackTitle = "Use Pin";
                 }
             }
         }
 
         // Localized reason
-        if let localizedReason = data?["localizedReason"] as! String? {
-            reason = localizedReason;
-        }else if let clientId = data?["clientId"] as! String? {
-            reason = clientId;
+        if let description = data?["description"] as! String? {
+            reason = description;
         }
 
         authenticationContext.evaluatePolicy(
@@ -69,17 +112,32 @@
                 if( success ) {
                     pluginResult = CDVPluginResult(status: CDVCommandStatus_OK, messageAs: "Success");
                 }else {
-                    // Check if there is an error
-                    if error != nil {
-                        pluginResult = CDVPluginResult(status: CDVCommandStatus_ERROR, messageAs: "Error: \(String(describing: error?.localizedDescription))")
+                    if (error != nil) {
+
+                        var errorCodes = [Int: ErrorCodes]()
+                        var errorResult: [String : Any] = ["code":  PluginError.BIOMETRIC_UNKNOWN_ERROR.rawValue, "message": error?.localizedDescription ?? ""];
+
+                        errorCodes[1] = ErrorCodes(code: PluginError.BIOMETRIC_AUTHENTICATION_FAILED.rawValue)
+                        errorCodes[2] = ErrorCodes(code: PluginError.BIOMETRIC_DISMISSED.rawValue)
+                        errorCodes[5] = ErrorCodes(code: PluginError.BIOMETRIC_SCREEN_GUARD_UNSECURED.rawValue)
+                        errorCodes[6] = ErrorCodes(code: PluginError.BIOMETRIC_UNAVAILABLE.rawValue)
+                        errorCodes[7] = ErrorCodes(code: PluginError.BIOMETRIC_NOT_ENROLLED.rawValue)
+                        errorCodes[8] = ErrorCodes(code: PluginError.BIOMETRIC_LOCKED_OUT.rawValue)
+
+                        let errorCode = abs(error!._code)
+                        if let e = errorCodes[errorCode] {
+                           errorResult = ["code": e.code, "message": error!.localizedDescription];
+                        }
+
+                        pluginResult = CDVPluginResult(status: CDVCommandStatus_ERROR, messageAs: errorResult);
                     }
                 }
                 self.commandDelegate.send(pluginResult, callbackId:command.callbackId);
-        });
+            }
+        );
     }
 
     override func pluginInitialize() {
         super.pluginInitialize()
     }
-}
-
+}
\ No newline at end of file
diff --git a/platforms/ios/dlapp/config.xml b/platforms/ios/dlapp/config.xml
index 3ae113a..b06fe28 100755
--- a/platforms/ios/dlapp/config.xml
+++ b/platforms/ios/dlapp/config.xml
@@ -26,9 +26,6 @@
     <feature name="CordovaHttpPlugin">
         <param name="ios-package" value="CordovaHttpPlugin" />
     </feature>
-    <feature name="Fingerprint">
-        <param name="ios-package" value="Fingerprint" />
-    </feature>
     <feature name="StatusBar">
         <param name="ios-package" value="CDVStatusBar" />
         <param name="onload" value="true" />
@@ -67,6 +64,9 @@
     <feature name="Brightness">
         <param name="ios-package" value="Brightness" />
     </feature>
+    <feature name="Fingerprint">
+        <param name="ios-package" value="Fingerprint" />
+    </feature>
     <name short="大理市民卡">dlapp</name>
     <description>
         A sample Apache Cordova application that responds to the deviceready event.
diff --git a/platforms/ios/ios.json b/platforms/ios/ios.json
index 7b9d86f..8247df1 100644
--- a/platforms/ios/ios.json
+++ b/platforms/ios/ios.json
@@ -17,10 +17,6 @@
               "count": 1
             },
             {
-              "xml": "<feature name=\"Fingerprint\"><param name=\"ios-package\" value=\"Fingerprint\" /></feature>",
-              "count": 1
-            },
-            {
               "xml": "<feature name=\"StatusBar\"><param name=\"ios-package\" value=\"CDVStatusBar\" /><param name=\"onload\" value=\"true\" /></feature>",
               "count": 1
             },
@@ -83,6 +79,10 @@
             {
               "xml": "<feature name=\"Brightness\"><param name=\"ios-package\" value=\"Brightness\" /></feature>",
               "count": 1
+            },
+            {
+              "xml": "<feature name=\"Fingerprint\"><param name=\"ios-package\" value=\"Fingerprint\" /></feature>",
+              "count": 1
             }
           ]
         }
@@ -91,12 +91,8 @@
         "parents": {
           "NSFaceIDUsageDescription": [
             {
-              "xml": "<string>认证中...</string>",
-              "count": 1
-            },
-            {
               "xml": "<string> </string>",
-              "count": 1
+              "count": 2
             }
           ],
           "NSCameraUsageDescription": [
@@ -165,10 +161,6 @@
     "cordova-plugin-advanced-http": {
       "PACKAGE_NAME": "$(PRODUCT_BUNDLE_IDENTIFIER)"
     },
-    "cordova-plugin-fingerprint-aio": {
-      "FACEID_USAGE_DESCRIPTION": "认证中...",
-      "PACKAGE_NAME": "$(PRODUCT_BUNDLE_IDENTIFIER)"
-    },
     "cordova-plugin-statusbar": {
       "PACKAGE_NAME": "$(PRODUCT_BUNDLE_IDENTIFIER)"
     },
@@ -213,6 +205,10 @@
     },
     "cordova-plugin-brightness": {
       "PACKAGE_NAME": "$(PRODUCT_BUNDLE_IDENTIFIER)"
+    },
+    "cordova-plugin-fingerprint-aio": {
+      "FACEID_USAGE_DESCRIPTION": " ",
+      "PACKAGE_NAME": "$(PRODUCT_BUNDLE_IDENTIFIER)"
     }
   },
   "dependent_plugins": {},
@@ -449,14 +445,6 @@
       ]
     },
     {
-      "id": "cordova-plugin-fingerprint-aio.Fingerprint",
-      "file": "plugins/cordova-plugin-fingerprint-aio/www/Fingerprint.js",
-      "pluginId": "cordova-plugin-fingerprint-aio",
-      "clobbers": [
-        "Fingerprint"
-      ]
-    },
-    {
       "id": "cordova-plugin-statusbar.statusbar",
       "file": "plugins/cordova-plugin-statusbar/www/statusbar.js",
       "pluginId": "cordova-plugin-statusbar",
@@ -576,13 +564,20 @@
       "clobbers": [
         "cordova.plugins.brightness"
       ]
+    },
+    {
+      "id": "cordova-plugin-fingerprint-aio.Fingerprint",
+      "file": "plugins/cordova-plugin-fingerprint-aio/www/Fingerprint.js",
+      "pluginId": "cordova-plugin-fingerprint-aio",
+      "clobbers": [
+        "Fingerprint"
+      ]
     }
   ],
   "plugin_metadata": {
     "cordova-plugin-add-swift-support": "2.0.2",
     "cordova-plugin-file": "6.0.1",
     "cordova-plugin-advanced-http": "2.1.1",
-    "cordova-plugin-fingerprint-aio": "1.7.0",
     "cordova-plugin-statusbar": "2.4.2",
     "cordova-plugin-touch-id": "3.3.1",
     "cordova-plugin-whitelist": "1.3.3",
@@ -596,6 +591,7 @@
     "jpush-phonegap-plugin": "3.7.2",
     "cordova-plugin-app-version": "0.1.9",
     "cordova-plugin-wkwebview-engine": "1.2.1",
-    "cordova-plugin-brightness": "0.1.5"
+    "cordova-plugin-brightness": "0.1.5",
+    "cordova-plugin-fingerprint-aio": "3.0.1"
   }
 }
diff --git a/platforms/ios/platform_www/cordova_plugins.js b/platforms/ios/platform_www/cordova_plugins.js
index eca1f34..ed613ac 100644
--- a/platforms/ios/platform_www/cordova_plugins.js
+++ b/platforms/ios/platform_www/cordova_plugins.js
@@ -232,14 +232,6 @@
       ]
     },
     {
-      "id": "cordova-plugin-fingerprint-aio.Fingerprint",
-      "file": "plugins/cordova-plugin-fingerprint-aio/www/Fingerprint.js",
-      "pluginId": "cordova-plugin-fingerprint-aio",
-      "clobbers": [
-        "Fingerprint"
-      ]
-    },
-    {
       "id": "cordova-plugin-statusbar.statusbar",
       "file": "plugins/cordova-plugin-statusbar/www/statusbar.js",
       "pluginId": "cordova-plugin-statusbar",
@@ -359,13 +351,20 @@
       "clobbers": [
         "cordova.plugins.brightness"
       ]
+    },
+    {
+      "id": "cordova-plugin-fingerprint-aio.Fingerprint",
+      "file": "plugins/cordova-plugin-fingerprint-aio/www/Fingerprint.js",
+      "pluginId": "cordova-plugin-fingerprint-aio",
+      "clobbers": [
+        "Fingerprint"
+      ]
     }
   ];
   module.exports.metadata = {
     "cordova-plugin-add-swift-support": "2.0.2",
     "cordova-plugin-file": "6.0.1",
     "cordova-plugin-advanced-http": "2.1.1",
-    "cordova-plugin-fingerprint-aio": "1.7.0",
     "cordova-plugin-statusbar": "2.4.2",
     "cordova-plugin-touch-id": "3.3.1",
     "cordova-plugin-whitelist": "1.3.3",
@@ -379,6 +378,7 @@
     "jpush-phonegap-plugin": "3.7.2",
     "cordova-plugin-app-version": "0.1.9",
     "cordova-plugin-wkwebview-engine": "1.2.1",
-    "cordova-plugin-brightness": "0.1.5"
+    "cordova-plugin-brightness": "0.1.5",
+    "cordova-plugin-fingerprint-aio": "3.0.1"
   };
 });
\ No newline at end of file
diff --git a/platforms/ios/platform_www/plugins/cordova-plugin-fingerprint-aio/www/Fingerprint.js b/platforms/ios/platform_www/plugins/cordova-plugin-fingerprint-aio/www/Fingerprint.js
index 3982139..22ecb6c 100644
--- a/platforms/ios/platform_www/plugins/cordova-plugin-fingerprint-aio/www/Fingerprint.js
+++ b/platforms/ios/platform_www/plugins/cordova-plugin-fingerprint-aio/www/Fingerprint.js
@@ -1,8 +1,28 @@
 cordova.define("cordova-plugin-fingerprint-aio.Fingerprint", function(require, exports, module) {
 /*global cordova */
 
-function Fingerprint() {
-}
+var Fingerprint = function() {
+};
+
+// Plugin Errors
+Fingerprint.prototype.BIOMETRIC_UNKNOWN_ERROR = -100;
+Fingerprint.prototype.BIOMETRIC_UNAVAILABLE = -101;
+Fingerprint.prototype.BIOMETRIC_AUTHENTICATION_FAILED = -102;
+Fingerprint.prototype.BIOMETRIC_SDK_NOT_SUPPORTED = -103;
+Fingerprint.prototype.BIOMETRIC_HARDWARE_NOT_SUPPORTED = -104;
+Fingerprint.prototype.BIOMETRIC_PERMISSION_NOT_GRANTED = -105;
+Fingerprint.prototype.BIOMETRIC_NOT_ENROLLED = -106;
+Fingerprint.prototype.BIOMETRIC_INTERNAL_PLUGIN_ERROR = -107;
+Fingerprint.prototype.BIOMETRIC_DISMISSED = -108;
+Fingerprint.prototype.BIOMETRIC_PIN_OR_PATTERN_DISMISSED = -109;
+Fingerprint.prototype.BIOMETRIC_SCREEN_GUARD_UNSECURED = -110;
+Fingerprint.prototype.BIOMETRIC_LOCKED_OUT = -111;
+Fingerprint.prototype.BIOMETRIC_LOCKED_OUT_PERMANENT = -112;
+
+// Biometric types
+Fingerprint.prototype.BIOMETRIC_TYPE_FINGERPRINT = "finger";
+Fingerprint.prototype.BIOMETRIC_TYPE_FACE = "face";
+Fingerprint.prototype.BIOMETRIC_TYPE_COMMON = "biometric";
 
 Fingerprint.prototype.show = function (params, successCallback, errorCallback) {
   cordova.exec(