添加极光推送插件
diff --git a/platforms/ios/Podfile.lock b/platforms/ios/Podfile.lock
new file mode 100644
index 0000000..61a59aa
--- /dev/null
+++ b/platforms/ios/Podfile.lock
@@ -0,0 +1,3 @@
+PODFILE CHECKSUM: e5038167266107ffa86081c2bbb7148c097e71eb
+
+COCOAPODS: 1.5.2
diff --git a/platforms/ios/Pods/Manifest.lock b/platforms/ios/Pods/Manifest.lock
new file mode 100644
index 0000000..61a59aa
--- /dev/null
+++ b/platforms/ios/Pods/Manifest.lock
@@ -0,0 +1,3 @@
+PODFILE CHECKSUM: e5038167266107ffa86081c2bbb7148c097e71eb
+
+COCOAPODS: 1.5.2
diff --git a/platforms/ios/Pods/Pods.xcodeproj/project.pbxproj b/platforms/ios/Pods/Pods.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..a03347f
--- /dev/null
+++ b/platforms/ios/Pods/Pods.xcodeproj/project.pbxproj
@@ -0,0 +1,329 @@
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 46;
+	objects = {
+
+/* Begin PBXBuildFile section */
+		643D3B1E52B2984E46E7B2242856084D /* Pods-dlapp-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 1154D50C03F2C4A4D1E1A6A35A4580D9 /* Pods-dlapp-dummy.m */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXFileReference section */
+		0B9FDFC65AF777A68D74F86F830E8D29 /* libPods-dlapp.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = "libPods-dlapp.a"; path = "libPods-dlapp.a"; sourceTree = BUILT_PRODUCTS_DIR; };
+		1154D50C03F2C4A4D1E1A6A35A4580D9 /* Pods-dlapp-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-dlapp-dummy.m"; sourceTree = "<group>"; };
+		53416009C0EB96589449A0D152302159 /* Pods-dlapp-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-dlapp-acknowledgements.markdown"; sourceTree = "<group>"; };
+		93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };
+		AF5E9BBF20F1C626FFD56F1ACC2A945D /* Pods-dlapp-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-dlapp-frameworks.sh"; sourceTree = "<group>"; };
+		CB6583549252874668D1D65B0EC3158C /* Pods-dlapp-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-dlapp-resources.sh"; sourceTree = "<group>"; };
+		D2031FC780E4135865DBAC7B0BECDA29 /* Pods-dlapp.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-dlapp.debug.xcconfig"; sourceTree = "<group>"; };
+		E60AB409C8228577C8314E69A54EC524 /* Pods-dlapp-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-dlapp-acknowledgements.plist"; sourceTree = "<group>"; };
+		EEC91C98D2D922E40FAE18A4F04D83AE /* Pods-dlapp.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-dlapp.release.xcconfig"; sourceTree = "<group>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+		8C1A83A20A9DA90317678291D8688BF5 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+		0F8D2E47FE03D3B91B51069F7C273AF4 /* Frameworks */ = {
+			isa = PBXGroup;
+			children = (
+			);
+			name = Frameworks;
+			sourceTree = "<group>";
+		};
+		548BE5040BA5F7460A0477C20076FED1 /* Pods-dlapp */ = {
+			isa = PBXGroup;
+			children = (
+				53416009C0EB96589449A0D152302159 /* Pods-dlapp-acknowledgements.markdown */,
+				E60AB409C8228577C8314E69A54EC524 /* Pods-dlapp-acknowledgements.plist */,
+				1154D50C03F2C4A4D1E1A6A35A4580D9 /* Pods-dlapp-dummy.m */,
+				AF5E9BBF20F1C626FFD56F1ACC2A945D /* Pods-dlapp-frameworks.sh */,
+				CB6583549252874668D1D65B0EC3158C /* Pods-dlapp-resources.sh */,
+				D2031FC780E4135865DBAC7B0BECDA29 /* Pods-dlapp.debug.xcconfig */,
+				EEC91C98D2D922E40FAE18A4F04D83AE /* Pods-dlapp.release.xcconfig */,
+			);
+			name = "Pods-dlapp";
+			path = "Target Support Files/Pods-dlapp";
+			sourceTree = "<group>";
+		};
+		7DB346D0F39D3F0E887471402A8071AB = {
+			isa = PBXGroup;
+			children = (
+				93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */,
+				0F8D2E47FE03D3B91B51069F7C273AF4 /* Frameworks */,
+				C2B1D5AB28132D1F1EC74A313228649B /* Products */,
+				ABF54CA5D18420FEA3DD9419BE3E157A /* Targets Support Files */,
+			);
+			sourceTree = "<group>";
+		};
+		ABF54CA5D18420FEA3DD9419BE3E157A /* Targets Support Files */ = {
+			isa = PBXGroup;
+			children = (
+				548BE5040BA5F7460A0477C20076FED1 /* Pods-dlapp */,
+			);
+			name = "Targets Support Files";
+			sourceTree = "<group>";
+		};
+		C2B1D5AB28132D1F1EC74A313228649B /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				0B9FDFC65AF777A68D74F86F830E8D29 /* libPods-dlapp.a */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+		095FEF9C74B1A68F66A3061771703C06 /* Pods-dlapp */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = F6A3DDA2CD5F1F9A4AEF4D6F6662EAD9 /* Build configuration list for PBXNativeTarget "Pods-dlapp" */;
+			buildPhases = (
+				A54DF46585559C2430C5DDBBDB2D11FF /* Sources */,
+				8C1A83A20A9DA90317678291D8688BF5 /* Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = "Pods-dlapp";
+			productName = "Pods-dlapp";
+			productReference = 0B9FDFC65AF777A68D74F86F830E8D29 /* libPods-dlapp.a */;
+			productType = "com.apple.product-type.library.static";
+		};
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+		D41D8CD98F00B204E9800998ECF8427E /* Project object */ = {
+			isa = PBXProject;
+			attributes = {
+				LastSwiftUpdateCheck = 0930;
+				LastUpgradeCheck = 0930;
+			};
+			buildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */;
+			compatibilityVersion = "Xcode 3.2";
+			developmentRegion = English;
+			hasScannedForEncodings = 0;
+			knownRegions = (
+				en,
+			);
+			mainGroup = 7DB346D0F39D3F0E887471402A8071AB;
+			productRefGroup = C2B1D5AB28132D1F1EC74A313228649B /* Products */;
+			projectDirPath = "";
+			projectRoot = "";
+			targets = (
+				095FEF9C74B1A68F66A3061771703C06 /* Pods-dlapp */,
+			);
+		};
+/* End PBXProject section */
+
+/* Begin PBXSourcesBuildPhase section */
+		A54DF46585559C2430C5DDBBDB2D11FF /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				643D3B1E52B2984E46E7B2242856084D /* Pods-dlapp-dummy.m in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXSourcesBuildPhase section */
+
+/* Begin XCBuildConfiguration section */
+		199D972A13F2B4C56847F7A89CCA83BC /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				CLANG_ANALYZER_NONNULL = YES;
+				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+				CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+				CLANG_CXX_LIBRARY = "libc++";
+				CLANG_ENABLE_MODULES = YES;
+				CLANG_ENABLE_OBJC_ARC = YES;
+				CLANG_ENABLE_OBJC_WEAK = YES;
+				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_COMMA = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INFINITE_RECURSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+				CLANG_WARN_STRICT_PROTOTYPES = YES;
+				CLANG_WARN_SUSPICIOUS_MOVE = YES;
+				CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				CODE_SIGNING_ALLOWED = NO;
+				CODE_SIGNING_REQUIRED = NO;
+				COPY_PHASE_STRIP = NO;
+				DEBUG_INFORMATION_FORMAT = dwarf;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
+				ENABLE_TESTABILITY = YES;
+				GCC_C_LANGUAGE_STANDARD = gnu11;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_NO_COMMON_BLOCKS = YES;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_PREPROCESSOR_DEFINITIONS = (
+					"POD_CONFIGURATION_DEBUG=1",
+					"DEBUG=1",
+					"$(inherited)",
+				);
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+				GCC_WARN_UNUSED_FUNCTION = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+				MTL_ENABLE_DEBUG_INFO = YES;
+				ONLY_ACTIVE_ARCH = YES;
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				STRIP_INSTALLED_PRODUCT = NO;
+				SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
+				SYMROOT = "${SRCROOT}/../build";
+			};
+			name = Debug;
+		};
+		CB0C4A0438BB41F9A7F1E080D5B2AD40 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			baseConfigurationReference = D2031FC780E4135865DBAC7B0BECDA29 /* Pods-dlapp.debug.xcconfig */;
+			buildSettings = {
+				ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;
+				CODE_SIGN_IDENTITY = "iPhone Developer";
+				"CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
+				"CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
+				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+				MACH_O_TYPE = staticlib;
+				OTHER_LDFLAGS = "";
+				OTHER_LIBTOOLFLAGS = "";
+				PODS_ROOT = "$(SRCROOT)";
+				PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}";
+				SDKROOT = iphoneos;
+				SKIP_INSTALL = YES;
+				TARGETED_DEVICE_FAMILY = "1,2";
+			};
+			name = Debug;
+		};
+		D410F425008A083F9E9694725B8E89FB /* Release */ = {
+			isa = XCBuildConfiguration;
+			baseConfigurationReference = EEC91C98D2D922E40FAE18A4F04D83AE /* Pods-dlapp.release.xcconfig */;
+			buildSettings = {
+				ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;
+				CODE_SIGN_IDENTITY = "iPhone Developer";
+				"CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
+				"CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
+				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+				MACH_O_TYPE = staticlib;
+				OTHER_LDFLAGS = "";
+				OTHER_LIBTOOLFLAGS = "";
+				PODS_ROOT = "$(SRCROOT)";
+				PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}";
+				SDKROOT = iphoneos;
+				SKIP_INSTALL = YES;
+				TARGETED_DEVICE_FAMILY = "1,2";
+				VALIDATE_PRODUCT = YES;
+			};
+			name = Release;
+		};
+		FDB2FC4A1E5891381CD9D922145497F1 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				CLANG_ANALYZER_NONNULL = YES;
+				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+				CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+				CLANG_CXX_LIBRARY = "libc++";
+				CLANG_ENABLE_MODULES = YES;
+				CLANG_ENABLE_OBJC_ARC = YES;
+				CLANG_ENABLE_OBJC_WEAK = YES;
+				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_COMMA = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INFINITE_RECURSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+				CLANG_WARN_STRICT_PROTOTYPES = YES;
+				CLANG_WARN_SUSPICIOUS_MOVE = YES;
+				CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				CODE_SIGNING_ALLOWED = NO;
+				CODE_SIGNING_REQUIRED = NO;
+				COPY_PHASE_STRIP = NO;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				ENABLE_NS_ASSERTIONS = NO;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
+				GCC_C_LANGUAGE_STANDARD = gnu11;
+				GCC_NO_COMMON_BLOCKS = YES;
+				GCC_PREPROCESSOR_DEFINITIONS = (
+					"POD_CONFIGURATION_RELEASE=1",
+					"$(inherited)",
+				);
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+				GCC_WARN_UNUSED_FUNCTION = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+				MTL_ENABLE_DEBUG_INFO = NO;
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				STRIP_INSTALLED_PRODUCT = NO;
+				SYMROOT = "${SRCROOT}/../build";
+			};
+			name = Release;
+		};
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+		2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				199D972A13F2B4C56847F7A89CCA83BC /* Debug */,
+				FDB2FC4A1E5891381CD9D922145497F1 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		F6A3DDA2CD5F1F9A4AEF4D6F6662EAD9 /* Build configuration list for PBXNativeTarget "Pods-dlapp" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				CB0C4A0438BB41F9A7F1E080D5B2AD40 /* Debug */,
+				D410F425008A083F9E9694725B8E89FB /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+/* End XCConfigurationList section */
+	};
+	rootObject = D41D8CD98F00B204E9800998ECF8427E /* Project object */;
+}
diff --git a/platforms/ios/Pods/Target Support Files/Pods-dlapp/Pods-dlapp-acknowledgements.markdown b/platforms/ios/Pods/Target Support Files/Pods-dlapp/Pods-dlapp-acknowledgements.markdown
new file mode 100644
index 0000000..102af75
--- /dev/null
+++ b/platforms/ios/Pods/Target Support Files/Pods-dlapp/Pods-dlapp-acknowledgements.markdown
@@ -0,0 +1,3 @@
+# Acknowledgements
+This application makes use of the following third party libraries:
+Generated by CocoaPods - https://cocoapods.org
diff --git a/platforms/ios/Pods/Target Support Files/Pods-dlapp/Pods-dlapp-acknowledgements.plist b/platforms/ios/Pods/Target Support Files/Pods-dlapp/Pods-dlapp-acknowledgements.plist
new file mode 100644
index 0000000..7acbad1
--- /dev/null
+++ b/platforms/ios/Pods/Target Support Files/Pods-dlapp/Pods-dlapp-acknowledgements.plist
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>PreferenceSpecifiers</key>
+	<array>
+		<dict>
+			<key>FooterText</key>
+			<string>This application makes use of the following third party libraries:</string>
+			<key>Title</key>
+			<string>Acknowledgements</string>
+			<key>Type</key>
+			<string>PSGroupSpecifier</string>
+		</dict>
+		<dict>
+			<key>FooterText</key>
+			<string>Generated by CocoaPods - https://cocoapods.org</string>
+			<key>Title</key>
+			<string></string>
+			<key>Type</key>
+			<string>PSGroupSpecifier</string>
+		</dict>
+	</array>
+	<key>StringsTable</key>
+	<string>Acknowledgements</string>
+	<key>Title</key>
+	<string>Acknowledgements</string>
+</dict>
+</plist>
diff --git a/platforms/ios/Pods/Target Support Files/Pods-dlapp/Pods-dlapp-dummy.m b/platforms/ios/Pods/Target Support Files/Pods-dlapp/Pods-dlapp-dummy.m
new file mode 100644
index 0000000..f22e3b1
--- /dev/null
+++ b/platforms/ios/Pods/Target Support Files/Pods-dlapp/Pods-dlapp-dummy.m
@@ -0,0 +1,5 @@
+#import <Foundation/Foundation.h>
+@interface PodsDummy_Pods_dlapp : NSObject
+@end
+@implementation PodsDummy_Pods_dlapp
+@end
diff --git a/platforms/ios/Pods/Target Support Files/Pods-dlapp/Pods-dlapp-frameworks.sh b/platforms/ios/Pods/Target Support Files/Pods-dlapp/Pods-dlapp-frameworks.sh
new file mode 100755
index 0000000..08e3eaa
--- /dev/null
+++ b/platforms/ios/Pods/Target Support Files/Pods-dlapp/Pods-dlapp-frameworks.sh
@@ -0,0 +1,146 @@
+#!/bin/sh
+set -e
+set -u
+set -o pipefail
+
+if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then
+    # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy
+    # frameworks to, so exit 0 (signalling the script phase was successful).
+    exit 0
+fi
+
+echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
+mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
+
+COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}"
+SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}"
+
+# Used as a return value for each invocation of `strip_invalid_archs` function.
+STRIP_BINARY_RETVAL=0
+
+# This protects against multiple targets copying the same framework dependency at the same time. The solution
+# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html
+RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????")
+
+# Copies and strips a vendored framework
+install_framework()
+{
+  if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then
+    local source="${BUILT_PRODUCTS_DIR}/$1"
+  elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then
+    local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")"
+  elif [ -r "$1" ]; then
+    local source="$1"
+  fi
+
+  local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
+
+  if [ -L "${source}" ]; then
+      echo "Symlinked..."
+      source="$(readlink "${source}")"
+  fi
+
+  # Use filter instead of exclude so missing patterns don't throw errors.
+  echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\""
+  rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}"
+
+  local basename
+  basename="$(basename -s .framework "$1")"
+  binary="${destination}/${basename}.framework/${basename}"
+  if ! [ -r "$binary" ]; then
+    binary="${destination}/${basename}"
+  fi
+
+  # Strip invalid architectures so "fat" simulator / device frameworks work on device
+  if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then
+    strip_invalid_archs "$binary"
+  fi
+
+  # Resign the code if required by the build settings to avoid unstable apps
+  code_sign_if_enabled "${destination}/$(basename "$1")"
+
+  # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7.
+  if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then
+    local swift_runtime_libs
+    swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u  && exit ${PIPESTATUS[0]})
+    for lib in $swift_runtime_libs; do
+      echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\""
+      rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}"
+      code_sign_if_enabled "${destination}/${lib}"
+    done
+  fi
+}
+
+# Copies and strips a vendored dSYM
+install_dsym() {
+  local source="$1"
+  if [ -r "$source" ]; then
+    # Copy the dSYM into a the targets temp dir.
+    echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\""
+    rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}"
+
+    local basename
+    basename="$(basename -s .framework.dSYM "$source")"
+    binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}"
+
+    # Strip invalid architectures so "fat" simulator / device frameworks work on device
+    if [[ "$(file "$binary")" == *"Mach-O dSYM companion"* ]]; then
+      strip_invalid_archs "$binary"
+    fi
+
+    if [[ $STRIP_BINARY_RETVAL == 1 ]]; then
+      # Move the stripped file into its final destination.
+      echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\""
+      rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}"
+    else
+      # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing.
+      touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM"
+    fi
+  fi
+}
+
+# Signs a framework with the provided identity
+code_sign_if_enabled() {
+  if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then
+    # Use the current code_sign_identitiy
+    echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}"
+    local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'"
+
+    if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then
+      code_sign_cmd="$code_sign_cmd &"
+    fi
+    echo "$code_sign_cmd"
+    eval "$code_sign_cmd"
+  fi
+}
+
+# Strip invalid architectures
+strip_invalid_archs() {
+  binary="$1"
+  # Get architectures for current target binary
+  binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)"
+  # Intersect them with the architectures we are building for
+  intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)"
+  # If there are no archs supported by this binary then warn the user
+  if [[ -z "$intersected_archs" ]]; then
+    echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)."
+    STRIP_BINARY_RETVAL=0
+    return
+  fi
+  stripped=""
+  for arch in $binary_archs; do
+    if ! [[ "${ARCHS}" == *"$arch"* ]]; then
+      # Strip non-valid architectures in-place
+      lipo -remove "$arch" -output "$binary" "$binary" || exit 1
+      stripped="$stripped $arch"
+    fi
+  done
+  if [[ "$stripped" ]]; then
+    echo "Stripped $binary of architectures:$stripped"
+  fi
+  STRIP_BINARY_RETVAL=1
+}
+
+if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then
+  wait
+fi
diff --git a/platforms/ios/Pods/Target Support Files/Pods-dlapp/Pods-dlapp-resources.sh b/platforms/ios/Pods/Target Support Files/Pods-dlapp/Pods-dlapp-resources.sh
new file mode 100755
index 0000000..345301f
--- /dev/null
+++ b/platforms/ios/Pods/Target Support Files/Pods-dlapp/Pods-dlapp-resources.sh
@@ -0,0 +1,118 @@
+#!/bin/sh
+set -e
+set -u
+set -o pipefail
+
+if [ -z ${UNLOCALIZED_RESOURCES_FOLDER_PATH+x} ]; then
+    # If UNLOCALIZED_RESOURCES_FOLDER_PATH is not set, then there's nowhere for us to copy
+    # resources to, so exit 0 (signalling the script phase was successful).
+    exit 0
+fi
+
+mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
+
+RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt
+> "$RESOURCES_TO_COPY"
+
+XCASSET_FILES=()
+
+# This protects against multiple targets copying the same framework dependency at the same time. The solution
+# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html
+RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????")
+
+case "${TARGETED_DEVICE_FAMILY:-}" in
+  1,2)
+    TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone"
+    ;;
+  1)
+    TARGET_DEVICE_ARGS="--target-device iphone"
+    ;;
+  2)
+    TARGET_DEVICE_ARGS="--target-device ipad"
+    ;;
+  3)
+    TARGET_DEVICE_ARGS="--target-device tv"
+    ;;
+  4)
+    TARGET_DEVICE_ARGS="--target-device watch"
+    ;;
+  *)
+    TARGET_DEVICE_ARGS="--target-device mac"
+    ;;
+esac
+
+install_resource()
+{
+  if [[ "$1" = /* ]] ; then
+    RESOURCE_PATH="$1"
+  else
+    RESOURCE_PATH="${PODS_ROOT}/$1"
+  fi
+  if [[ ! -e "$RESOURCE_PATH" ]] ; then
+    cat << EOM
+error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script.
+EOM
+    exit 1
+  fi
+  case $RESOURCE_PATH in
+    *.storyboard)
+      echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true
+      ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS}
+      ;;
+    *.xib)
+      echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true
+      ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS}
+      ;;
+    *.framework)
+      echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true
+      mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
+      echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true
+      rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
+      ;;
+    *.xcdatamodel)
+      echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" || true
+      xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom"
+      ;;
+    *.xcdatamodeld)
+      echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" || true
+      xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd"
+      ;;
+    *.xcmappingmodel)
+      echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" || true
+      xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm"
+      ;;
+    *.xcassets)
+      ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH"
+      XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE")
+      ;;
+    *)
+      echo "$RESOURCE_PATH" || true
+      echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY"
+      ;;
+  esac
+}
+
+mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
+rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
+if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then
+  mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
+  rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
+fi
+rm -f "$RESOURCES_TO_COPY"
+
+if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "${XCASSET_FILES:-}" ]
+then
+  # Find all other xcassets (this unfortunately includes those of path pods and other targets).
+  OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d)
+  while read line; do
+    if [[ $line != "${PODS_ROOT}*" ]]; then
+      XCASSET_FILES+=("$line")
+    fi
+  done <<<"$OTHER_XCASSETS"
+
+  if [ -z ${ASSETCATALOG_COMPILER_APPICON_NAME+x} ]; then
+    printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
+  else
+    printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" --app-icon "${ASSETCATALOG_COMPILER_APPICON_NAME}" --output-partial-info-plist "${TARGET_TEMP_DIR}/assetcatalog_generated_info_cocoapods.plist"
+  fi
+fi
diff --git a/platforms/ios/Pods/Target Support Files/Pods-dlapp/Pods-dlapp.debug.xcconfig b/platforms/ios/Pods/Target Support Files/Pods-dlapp/Pods-dlapp.debug.xcconfig
new file mode 100644
index 0000000..729bac8
--- /dev/null
+++ b/platforms/ios/Pods/Target Support Files/Pods-dlapp/Pods-dlapp.debug.xcconfig
@@ -0,0 +1,6 @@
+GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
+OTHER_LDFLAGS = $(inherited) -ObjC
+PODS_BUILD_DIR = ${BUILD_DIR}
+PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
+PODS_ROOT = ${SRCROOT}/Pods
diff --git a/platforms/ios/Pods/Target Support Files/Pods-dlapp/Pods-dlapp.release.xcconfig b/platforms/ios/Pods/Target Support Files/Pods-dlapp/Pods-dlapp.release.xcconfig
new file mode 100644
index 0000000..729bac8
--- /dev/null
+++ b/platforms/ios/Pods/Target Support Files/Pods-dlapp/Pods-dlapp.release.xcconfig
@@ -0,0 +1,6 @@
+GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
+OTHER_LDFLAGS = $(inherited) -ObjC
+PODS_BUILD_DIR = ${BUILD_DIR}
+PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
+PODS_ROOT = ${SRCROOT}/Pods
diff --git a/platforms/ios/dlapp.xcodeproj/project.pbxproj b/platforms/ios/dlapp.xcodeproj/project.pbxproj
old mode 100755
new mode 100644
index f9c0c1b..6560ea3
--- 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 */; };
 		0FBFC45D12B44FF79785B959 /* UIImage+CropScaleOrientation.m in Sources */ = {isa = PBXBuildFile; fileRef = 281DF600F6B747808087E4FC /* UIImage+CropScaleOrientation.m */; };
@@ -33,6 +32,7 @@
 		9224D3CE70AE4072BBEB170D /* CDVLocalFilesystem.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A8DD2DDC8694A97A56F9FA7 /* CDVLocalFilesystem.m */; };
 		94868B10923A4508B06A4310 /* CDVAssetLibraryFilesystem.m in Sources */ = {isa = PBXBuildFile; fileRef = A719A69FD70D4CC9B8104FF6 /* CDVAssetLibraryFilesystem.m */; };
 		A42AE846FF7B482FB889AAEB /* QRScanner.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8478FFD487C4004A1CEFCA8 /* QRScanner.swift */; };
+		A50EB04ADB24A5CBB680802F /* libPods-dlapp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D992375F52889311A88544EF /* libPods-dlapp.a */; };
 		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 */; };
@@ -45,26 +45,40 @@
 		F46AE1B50D8B4A81B05D4100 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A673D8D8920E4086A9152FC4 /* Security.framework */; };
 		F939AD8D22BB769B006B371B /* libsqlite3.0.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = F939AD8C22BB769B006B371B /* libsqlite3.0.tbd */; };
 		FDE92C386167415E8040F8AB /* AFURLResponseSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = FDEE8379D7A34C55A616F700 /* AFURLResponseSerialization.m */; };
+		04347BD0ABAC4EE0B4CDDDB6 /* jcore-ios-2.1.1.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 444DBF371D8346D7BC7EE35D /* jcore-ios-2.1.1.a */; };
+		3EBABAA2209349F6AF91DF03 /* JPushPlugin.m in Sources */ = {isa = PBXBuildFile; fileRef = CD3E9CB7CBA54989AB62BA7F /* JPushPlugin.m */; };
+		A54A9FED843144C887EA4286 /* AppDelegate+JPush.m in Sources */ = {isa = PBXBuildFile; fileRef = 91E044FC8377488C886C818B /* AppDelegate+JPush.m */; };
+		C04B4EC2FAAD4D328ABA0C95 /* jpush-ios-3.2.1.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CCDEFB0C0632436FA86F0F31 /* jpush-ios-3.2.1.a */; };
+		3BE6767AAFDC4926A08E6690 /* JPushConfig.plist in Resources */ = {isa = PBXBuildFile; fileRef = E9D260B7FB6C49A3AE6CD0DB /* JPushConfig.plist */; };
+		BFA0CF013EEC44F9B2C6FA6E /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0162975BB3964038A51EDED4 /* CFNetwork.framework */; settings = {ATTRIBUTES = (Weak, ); }; };
+		7EC1B4999B2E48C098BA1BBB /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C44E29C3B190445C98BBAB84 /* CoreFoundation.framework */; settings = {ATTRIBUTES = (Weak, ); }; };
+		432FFA418F2F4247BE9C8472 /* CoreTelephony.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B1F790D5B00B4F178F835DE1 /* CoreTelephony.framework */; settings = {ATTRIBUTES = (Weak, ); }; };
+		7352A67D82B2499FBFFF8A2A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9B080F410C164D6582A23E36 /* Foundation.framework */; settings = {ATTRIBUTES = (Weak, ); }; };
+		A15A414BEE7A48538C758317 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D5F2FFCAD8E4A4392B781A3 /* UIKit.framework */; settings = {ATTRIBUTES = (Weak, ); }; };
+		D3E822CFC71546E191C10DA7 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 22DF35565BBA44B1980FFAF5 /* libz.tbd */; settings = {ATTRIBUTES = (Weak, ); }; };
+		CDD6F217CA274CF18EC146D3 /* AdSupport.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 048B6FC037E1479790969D83 /* AdSupport.framework */; settings = {ATTRIBUTES = (Weak, ); }; };
+		77CDF61132F44B81B0064744 /* UserNotifications.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 59D1F618C1ED464283B7B2E6 /* UserNotifications.framework */; settings = {ATTRIBUTES = (Weak, ); }; };
+		3C00FC06B74E49CFBABD0CFF /* libresolv.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = CBD6EA74C612474DA862E146 /* libresolv.tbd */; settings = {ATTRIBUTES = (Weak, ); }; };
 /* End PBXBuildFile section */
 
 /* Begin PBXContainerItemProxy section */
 		301BF534109A57CC0062928A /* PBXContainerItemProxy */ = {
 			isa = PBXContainerItemProxy;
-			containerPortal = 301BF52D109A57CC0062928A /* CordovaLib/CordovaLib.xcodeproj */;
+			containerPortal = 301BF52D109A57CC0062928A /* CordovaLib.xcodeproj */;
 			proxyType = 2;
 			remoteGlobalIDString = D2AAC07E0554694100DB518D;
 			remoteInfo = CordovaLib;
 		};
 		301BF550109A68C00062928A /* PBXContainerItemProxy */ = {
 			isa = PBXContainerItemProxy;
-			containerPortal = 301BF52D109A57CC0062928A /* CordovaLib/CordovaLib.xcodeproj */;
+			containerPortal = 301BF52D109A57CC0062928A /* CordovaLib.xcodeproj */;
 			proxyType = 1;
 			remoteGlobalIDString = D2AAC07D0554694100DB518D;
 			remoteInfo = CordovaLib;
 		};
 		907D8123214C687600058A10 /* PBXContainerItemProxy */ = {
 			isa = PBXContainerItemProxy;
-			containerPortal = 301BF52D109A57CC0062928A /* CordovaLib/CordovaLib.xcodeproj */;
+			containerPortal = 301BF52D109A57CC0062928A /* CordovaLib.xcodeproj */;
 			proxyType = 2;
 			remoteGlobalIDString = C0C01EB21E3911D50056E6CB;
 			remoteInfo = Cordova;
@@ -95,7 +109,7 @@
 		28B91F31B6FD410AAF87BBDC /* CDVThemeableBrowser.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; name = CDVThemeableBrowser.m; path = "cordova-plugin-themeablebrowser/CDVThemeableBrowser.m"; sourceTree = "<group>"; };
 		29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
 		2F977C7D2E4448098AA27AE8 /* CDVAssetLibraryFilesystem.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = CDVAssetLibraryFilesystem.h; path = "cordova-plugin-file/CDVAssetLibraryFilesystem.h"; sourceTree = "<group>"; };
-		301BF52D109A57CC0062928A /* CordovaLib/CordovaLib.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = CordovaLib/CordovaLib.xcodeproj; sourceTree = "<group>"; };
+		301BF52D109A57CC0062928A /* CordovaLib.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = CordovaLib/CordovaLib.xcodeproj; sourceTree = "<group>"; };
 		301BF56E109A69640062928A /* www */ = {isa = PBXFileReference; lastKnownFileType = folder; path = www; sourceTree = SOURCE_ROOT; };
 		302D95EE14D2391D003F00A1 /* MainViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MainViewController.h; sourceTree = "<group>"; };
 		302D95EF14D2391D003F00A1 /* MainViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MainViewController.m; sourceTree = "<group>"; };
@@ -135,6 +149,7 @@
 		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>"; };
 		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>"; };
 		D4DBE4512BAD4694B7EB5217 /* SDNetworkActivityIndicator.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = SDNetworkActivityIndicator.h; path = "cordova-plugin-advanced-http/SDNetworkActivityIndicator.h"; sourceTree = "<group>"; };
+		D992375F52889311A88544EF /* libPods-dlapp.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-dlapp.a"; sourceTree = BUILT_PRODUCTS_DIR; };
 		DBDBB5C64D17465C9452AF28 /* TextRequestSerializer.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; name = TextRequestSerializer.m; path = "cordova-plugin-advanced-http/TextRequestSerializer.m"; sourceTree = "<group>"; };
 		DD3651F245114E52ABEB9060 /* CDVFile.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; name = CDVFile.m; path = "cordova-plugin-file/CDVFile.m"; sourceTree = "<group>"; };
 		DE50527E757F47D08F4E076C /* CDVFile.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = CDVFile.h; path = "cordova-plugin-file/CDVFile.h"; sourceTree = "<group>"; };
@@ -148,6 +163,24 @@
 		F939AD8C22BB769B006B371B /* libsqlite3.0.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libsqlite3.0.tbd; path = usr/lib/libsqlite3.0.tbd; sourceTree = SDKROOT; };
 		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>"; };
+		444DBF371D8346D7BC7EE35D /* jcore-ios-2.1.1.a */ = {isa = PBXFileReference; name = "jcore-ios-2.1.1.a"; path = "dlapp/Plugins/cordova-plugin-jcore/jcore-ios-2.1.1.a"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = archive.ar; explicitFileType = undefined; includeInIndex = 0; };
+		CD3E9CB7CBA54989AB62BA7F /* JPushPlugin.m */ = {isa = PBXFileReference; name = "JPushPlugin.m"; path = "jpush-phonegap-plugin/JPushPlugin.m"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; };
+		91E044FC8377488C886C818B /* AppDelegate+JPush.m */ = {isa = PBXFileReference; name = "AppDelegate+JPush.m"; path = "jpush-phonegap-plugin/AppDelegate+JPush.m"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; };
+		CCDEFB0C0632436FA86F0F31 /* jpush-ios-3.2.1.a */ = {isa = PBXFileReference; name = "jpush-ios-3.2.1.a"; path = "dlapp/Plugins/jpush-phonegap-plugin/jpush-ios-3.2.1.a"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = archive.ar; explicitFileType = undefined; includeInIndex = 0; };
+		FC8EA7F3637547AD8BC62127 /* JPushDefine.h */ = {isa = PBXFileReference; name = "JPushDefine.h"; path = "jpush-phonegap-plugin/JPushDefine.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; };
+		3291AEB63DCC45B58959915F /* JPushPlugin.h */ = {isa = PBXFileReference; name = "JPushPlugin.h"; path = "jpush-phonegap-plugin/JPushPlugin.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; };
+		0EFE153A83734473AE4D0E4C /* AppDelegate+JPush.h */ = {isa = PBXFileReference; name = "AppDelegate+JPush.h"; path = "jpush-phonegap-plugin/AppDelegate+JPush.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; };
+		A32F7333BFEB461B9C84F6E5 /* JPUSHService.h */ = {isa = PBXFileReference; name = "JPUSHService.h"; path = "jpush-phonegap-plugin/JPUSHService.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; };
+		E9D260B7FB6C49A3AE6CD0DB /* JPushConfig.plist */ = {isa = PBXFileReference; name = "JPushConfig.plist"; path = "JPushConfig.plist"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = text.plist.xml; explicitFileType = undefined; includeInIndex = 0; };
+		0162975BB3964038A51EDED4 /* CFNetwork.framework */ = {isa = PBXFileReference; name = "CFNetwork.framework"; path = "System/Library/Frameworks/CFNetwork.framework"; sourceTree = SDKROOT; fileEncoding = undefined; lastKnownFileType = wrapper.framework; explicitFileType = undefined; includeInIndex = 0; };
+		C44E29C3B190445C98BBAB84 /* CoreFoundation.framework */ = {isa = PBXFileReference; name = "CoreFoundation.framework"; path = "System/Library/Frameworks/CoreFoundation.framework"; sourceTree = SDKROOT; fileEncoding = undefined; lastKnownFileType = wrapper.framework; explicitFileType = undefined; includeInIndex = 0; };
+		B1F790D5B00B4F178F835DE1 /* CoreTelephony.framework */ = {isa = PBXFileReference; name = "CoreTelephony.framework"; path = "System/Library/Frameworks/CoreTelephony.framework"; sourceTree = SDKROOT; fileEncoding = undefined; lastKnownFileType = wrapper.framework; explicitFileType = undefined; includeInIndex = 0; };
+		9B080F410C164D6582A23E36 /* Foundation.framework */ = {isa = PBXFileReference; name = "Foundation.framework"; path = "System/Library/Frameworks/Foundation.framework"; sourceTree = SDKROOT; fileEncoding = undefined; lastKnownFileType = wrapper.framework; explicitFileType = undefined; includeInIndex = 0; };
+		6D5F2FFCAD8E4A4392B781A3 /* UIKit.framework */ = {isa = PBXFileReference; name = "UIKit.framework"; path = "System/Library/Frameworks/UIKit.framework"; sourceTree = SDKROOT; fileEncoding = undefined; lastKnownFileType = wrapper.framework; explicitFileType = undefined; includeInIndex = 0; };
+		22DF35565BBA44B1980FFAF5 /* libz.tbd */ = {isa = PBXFileReference; name = "libz.tbd"; path = "usr/lib/libz.tbd"; sourceTree = SDKROOT; fileEncoding = undefined; lastKnownFileType = sourcecode.text-based-dylib-definition; explicitFileType = undefined; includeInIndex = 0; };
+		048B6FC037E1479790969D83 /* AdSupport.framework */ = {isa = PBXFileReference; name = "AdSupport.framework"; path = "System/Library/Frameworks/AdSupport.framework"; sourceTree = SDKROOT; fileEncoding = undefined; lastKnownFileType = wrapper.framework; explicitFileType = undefined; includeInIndex = 0; };
+		59D1F618C1ED464283B7B2E6 /* UserNotifications.framework */ = {isa = PBXFileReference; name = "UserNotifications.framework"; path = "System/Library/Frameworks/UserNotifications.framework"; sourceTree = SDKROOT; fileEncoding = undefined; lastKnownFileType = wrapper.framework; explicitFileType = undefined; includeInIndex = 0; };
+		CBD6EA74C612474DA862E146 /* libresolv.tbd */ = {isa = PBXFileReference; name = "libresolv.tbd"; path = "usr/lib/libresolv.tbd"; sourceTree = SDKROOT; fileEncoding = undefined; lastKnownFileType = sourcecode.text-based-dylib-definition; explicitFileType = undefined; includeInIndex = 0; };
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
@@ -163,6 +196,18 @@
 				7D8430D010A848FBBA5FB7ED /* ImageIO.framework in Frameworks */,
 				D2F2072984AE43BCBD0A430D /* CoreLocation.framework in Frameworks */,
 				74A56CC7F6724870ABD136F2 /* AVFoundation.framework in Frameworks */,
+				A50EB04ADB24A5CBB680802F /* libPods-dlapp.a in Frameworks */,
+				04347BD0ABAC4EE0B4CDDDB6 /* jcore-ios-2.1.1.a in Frameworks */,
+				C04B4EC2FAAD4D328ABA0C95 /* jpush-ios-3.2.1.a in Frameworks */,
+				BFA0CF013EEC44F9B2C6FA6E /* CFNetwork.framework in Frameworks */,
+				7EC1B4999B2E48C098BA1BBB /* CoreFoundation.framework in Frameworks */,
+				432FFA418F2F4247BE9C8472 /* CoreTelephony.framework in Frameworks */,
+				7352A67D82B2499FBFFF8A2A /* Foundation.framework in Frameworks */,
+				A15A414BEE7A48538C758317 /* UIKit.framework in Frameworks */,
+				D3E822CFC71546E191C10DA7 /* libz.tbd in Frameworks */,
+				CDD6F217CA274CF18EC146D3 /* AdSupport.framework in Frameworks */,
+				77CDF61132F44B81B0064744 /* UserNotifications.framework in Frameworks */,
+				3C00FC06B74E49CFBABD0CFF /* libresolv.tbd in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -190,19 +235,20 @@
 			name = Products;
 			sourceTree = "<group>";
 		};
-		29B97314FDCFA39411CA2CEA /* CustomTemplate */ = {
+		29B97314FDCFA39411CA2CEA = {
 			isa = PBXGroup;
 			children = (
 				EB87FDF41871DAF40020F90C /* config.xml */,
 				EB87FDF31871DA8E0020F90C /* www */,
 				EB87FDF11871DA420020F90C /* Staging */,
-				301BF52D109A57CC0062928A /* CordovaLib/CordovaLib.xcodeproj */,
+				301BF52D109A57CC0062928A /* CordovaLib.xcodeproj */,
 				080E96DDFE201D6D7F000001 /* Classes */,
 				307C750510C5A3420062BCA9 /* Plugins */,
 				29B97315FDCFA39411CA2CEA /* Other Sources */,
 				29B97317FDCFA39411CA2CEA /* Resources */,
 				29B97323FDCFA39411CA2CEA /* Frameworks */,
 				19C28FACFE9D520D11CA2CBB /* Products */,
+				BC4A1507117AEF25CBA069D3 /* Pods */,
 			);
 			name = CustomTemplate;
 			sourceTree = "<group>";
@@ -224,6 +270,7 @@
 				0207DA571B56EA530066E2B4 /* Images.xcassets */,
 				3047A50E1AB8057F00498E2A /* config */,
 				8D1107310486CEB800E47090 /* dlapp-Info.plist */,
+				E9D260B7FB6C49A3AE6CD0DB /* JPushConfig.plist */,
 			);
 			name = Resources;
 			path = dlapp/Resources;
@@ -239,6 +286,18 @@
 				5192EB17EA164DFD80D433E4 /* ImageIO.framework */,
 				1D1F25845F964D87B880BFA9 /* CoreLocation.framework */,
 				11A34CB026314A2AA98A0044 /* AVFoundation.framework */,
+				D992375F52889311A88544EF /* libPods-dlapp.a */,
+				444DBF371D8346D7BC7EE35D /* jcore-ios-2.1.1.a */,
+				CCDEFB0C0632436FA86F0F31 /* jpush-ios-3.2.1.a */,
+				0162975BB3964038A51EDED4 /* CFNetwork.framework */,
+				C44E29C3B190445C98BBAB84 /* CoreFoundation.framework */,
+				B1F790D5B00B4F178F835DE1 /* CoreTelephony.framework */,
+				9B080F410C164D6582A23E36 /* Foundation.framework */,
+				6D5F2FFCAD8E4A4392B781A3 /* UIKit.framework */,
+				22DF35565BBA44B1980FFAF5 /* libz.tbd */,
+				048B6FC037E1479790969D83 /* AdSupport.framework */,
+				59D1F618C1ED464283B7B2E6 /* UserNotifications.framework */,
+				CBD6EA74C612474DA862E146 /* libresolv.tbd */,
 			);
 			name = Frameworks;
 			sourceTree = "<group>";
@@ -315,11 +374,24 @@
 				265BE52D975B49ACA2F7B3FE /* CDVDevice.h */,
 				28B91F31B6FD410AAF87BBDC /* CDVThemeableBrowser.m */,
 				EF1A4FA720C24397A32AF09C /* CDVThemeableBrowser.h */,
+				CD3E9CB7CBA54989AB62BA7F /* JPushPlugin.m */,
+				91E044FC8377488C886C818B /* AppDelegate+JPush.m */,
+				FC8EA7F3637547AD8BC62127 /* JPushDefine.h */,
+				3291AEB63DCC45B58959915F /* JPushPlugin.h */,
+				0EFE153A83734473AE4D0E4C /* AppDelegate+JPush.h */,
+				A32F7333BFEB461B9C84F6E5 /* JPUSHService.h */,
 			);
 			name = Plugins;
 			path = dlapp/Plugins;
 			sourceTree = SOURCE_ROOT;
 		};
+		BC4A1507117AEF25CBA069D3 /* Pods */ = {
+			isa = PBXGroup;
+			children = (
+			);
+			name = Pods;
+			sourceTree = "<group>";
+		};
 		EB87FDF11871DA420020F90C /* Staging */ = {
 			isa = PBXGroup;
 			children = (
@@ -336,6 +408,7 @@
 			isa = PBXNativeTarget;
 			buildConfigurationList = 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "dlapp" */;
 			buildPhases = (
+				CE3CFE251273EDBCFA429761 /* [CP] Check Pods Manifest.lock */,
 				304B58A110DAC018002A0835 /* Copy www directory */,
 				1D60588D0D05DD3D006BFB54 /* Resources */,
 				1D60588E0D05DD3D006BFB54 /* Sources */,
@@ -373,12 +446,13 @@
 				English,
 				en,
 			);
-			mainGroup = 29B97314FDCFA39411CA2CEA /* CustomTemplate */;
+			mainGroup = 29B97314FDCFA39411CA2CEA;
+			productRefGroup = 19C28FACFE9D520D11CA2CBB /* Products */;
 			projectDirPath = "";
 			projectReferences = (
 				{
 					ProductGroup = 301BF52E109A57CC0062928A /* Products */;
-					ProjectRef = 301BF52D109A57CC0062928A /* CordovaLib/CordovaLib.xcodeproj */;
+					ProjectRef = 301BF52D109A57CC0062928A /* CordovaLib.xcodeproj */;
 				},
 			);
 			projectRoot = "";
@@ -412,6 +486,7 @@
 			files = (
 				302D95F214D2391D003F00A1 /* MainViewController.xib in Resources */,
 				0207DA581B56EA530066E2B4 /* Images.xcassets in Resources */,
+				3BE6767AAFDC4926A08E6690 /* JPushConfig.plist in Resources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -433,6 +508,24 @@
 			shellScript = "\"$SRCROOT/dlapp/Scripts/copy-www-build-step.sh\"";
 			showEnvVarsInLog = 0;
 		};
+		CE3CFE251273EDBCFA429761 /* [CP] Check Pods Manifest.lock */ = {
+			isa = PBXShellScriptBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			inputPaths = (
+				"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
+				"${PODS_ROOT}/Manifest.lock",
+			);
+			name = "[CP] Check Pods Manifest.lock";
+			outputPaths = (
+				"$(DERIVED_FILE_DIR)/Pods-dlapp-checkManifestLockResult.txt",
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+			shellPath = /bin/sh;
+			shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n    # print error to STDERR\n    echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n    exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
+			showEnvVarsInLog = 0;
+		};
 /* End PBXShellScriptBuildPhase section */
 
 /* Begin PBXSourcesBuildPhase section */
@@ -468,6 +561,8 @@
 				6FB343627AC8409CB2AA79B7 /* CDVInAppBrowser.m in Sources */,
 				BC39BA77AF0D4F94BC27666A /* CDVDevice.m in Sources */,
 				4F83621E48F143429B20FB3A /* CDVThemeableBrowser.m in Sources */,
+				3EBABAA2209349F6AF91DF03 /* JPushPlugin.m in Sources */,
+				A54A9FED843144C887EA4286 /* AppDelegate+JPush.m in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -509,6 +604,11 @@
 				SWIFT_OPTIMIZATION_LEVEL = "-Onone";
 				SWIFT_VERSION = 4.0;
 				TARGETED_DEVICE_FAMILY = 1;
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					"\"$(SRCROOT)/$(TARGET_NAME)/Plugins/cordova-plugin-jcore\"",
+					"\"$(SRCROOT)/$(TARGET_NAME)/Plugins/jpush-phonegap-plugin\"",
+				);
 			};
 			name = Debug;
 		};
@@ -536,6 +636,11 @@
 				SWIFT_OBJC_BRIDGING_HEADER = "$(PROJECT_DIR)/$(PROJECT_NAME)/Bridging-Header.h";
 				SWIFT_VERSION = 4.0;
 				TARGETED_DEVICE_FAMILY = 1;
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					"\"$(SRCROOT)/$(TARGET_NAME)/Plugins/cordova-plugin-jcore\"",
+					"\"$(SRCROOT)/$(TARGET_NAME)/Plugins/jpush-phonegap-plugin\"",
+				);
 			};
 			name = Release;
 		};
diff --git a/platforms/ios/dlapp.xcworkspace/contents.xcworkspacedata b/platforms/ios/dlapp.xcworkspace/contents.xcworkspacedata
index da2a5d5..408f199 100644
--- a/platforms/ios/dlapp.xcworkspace/contents.xcworkspacedata
+++ b/platforms/ios/dlapp.xcworkspace/contents.xcworkspacedata
@@ -4,4 +4,7 @@
    <FileRef
       location = "group:dlapp.xcodeproj">
    </FileRef>
+   <FileRef
+      location = "group:Pods/Pods.xcodeproj">
+   </FileRef>
 </Workspace>
diff --git a/platforms/ios/dlapp/Entitlements-Debug.plist b/platforms/ios/dlapp/Entitlements-Debug.plist
index 1ed4ae5..74c85d2 100644
--- a/platforms/ios/dlapp/Entitlements-Debug.plist
+++ b/platforms/ios/dlapp/Entitlements-Debug.plist
@@ -1,24 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<!--
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied.  See the License for the
-    specific language governing permissions and limitations
-    under the License.
--->
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 <plist version="1.0">
-    <dict>
-    </dict>
-</plist>
+<dict>
+	<key>aps-environment</key>
+	<string>development</string>
+</dict>
+</plist>
\ No newline at end of file
diff --git a/platforms/ios/dlapp/Entitlements-Release.plist b/platforms/ios/dlapp/Entitlements-Release.plist
index 1ed4ae5..4b18a83 100644
--- a/platforms/ios/dlapp/Entitlements-Release.plist
+++ b/platforms/ios/dlapp/Entitlements-Release.plist
@@ -1,24 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<!--
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied.  See the License for the
-    specific language governing permissions and limitations
-    under the License.
--->
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 <plist version="1.0">
-    <dict>
-    </dict>
-</plist>
+<dict>
+	<key>aps-environment</key>
+	<string>production</string>
+</dict>
+</plist>
\ No newline at end of file
diff --git a/platforms/ios/dlapp/Plugins/cordova-plugin-jcore/jcore-ios-2.1.1.a b/platforms/ios/dlapp/Plugins/cordova-plugin-jcore/jcore-ios-2.1.1.a
new file mode 100755
index 0000000..4cafd84
--- /dev/null
+++ b/platforms/ios/dlapp/Plugins/cordova-plugin-jcore/jcore-ios-2.1.1.a
Binary files differ
diff --git a/platforms/ios/dlapp/Plugins/jpush-phonegap-plugin/AppDelegate+JPush.h b/platforms/ios/dlapp/Plugins/jpush-phonegap-plugin/AppDelegate+JPush.h
new file mode 100644
index 0000000..8072fa1
--- /dev/null
+++ b/platforms/ios/dlapp/Plugins/jpush-phonegap-plugin/AppDelegate+JPush.h
@@ -0,0 +1,16 @@
+//

+//  AppDelegate+JPush.h

+//  delegateExtention

+//

+//  Created by 张庆贺 on 15/8/3.

+//  Copyright (c) 2015年 JPush. All rights reserved.

+//

+

+#import "AppDelegate.h"

+#import <UserNotifications/UserNotifications.h>

+#import "JPUSHService.h"

+

+@interface AppDelegate (JPush) <JPUSHRegisterDelegate>

+-(void)registerForRemoteNotification;

+-(void)startJPushSDK;

+@end

diff --git a/platforms/ios/dlapp/Plugins/jpush-phonegap-plugin/AppDelegate+JPush.m b/platforms/ios/dlapp/Plugins/jpush-phonegap-plugin/AppDelegate+JPush.m
new file mode 100644
index 0000000..81e7820
--- /dev/null
+++ b/platforms/ios/dlapp/Plugins/jpush-phonegap-plugin/AppDelegate+JPush.m
@@ -0,0 +1,213 @@
+//
+//  AppDelegate+JPush.m
+//  delegateExtention
+//
+//  Created by 张庆贺 on 15/8/3.
+//  Copyright (c) 2015年 JPush. All rights reserved.
+//
+
+#import "AppDelegate+JPush.h"
+#import "JPushPlugin.h"
+#import <objc/runtime.h>
+#import <AdSupport/AdSupport.h>
+#import <UserNotifications/UserNotifications.h>
+#import "JPushDefine.h"
+
+@implementation AppDelegate (JPush)
+
++(void)load{
+    Method origin1;
+    Method swizzle1;
+    origin1  = class_getInstanceMethod([self class],@selector(init));
+    swizzle1 = class_getInstanceMethod([self class], @selector(init_plus));
+    method_exchangeImplementations(origin1, swizzle1);
+}
+
+-(instancetype)init_plus{
+    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidLaunch:) name:UIApplicationDidFinishLaunchingNotification object:nil];
+    return [self init_plus];
+}
+
+NSDictionary *_launchOptions;
+-(void)applicationDidLaunch:(NSNotification *)notification{
+
+    if (!_jpushEventCache) {
+        _jpushEventCache = @{}.mutableCopy;
+    }
+
+    [JPUSHService registrationIDCompletionHandler:^(int resCode, NSString *registrationID) {
+      NSDictionary *event = @{@"registrationId": registrationID?:@""};
+      [JPushPlugin fireDocumentEvent:JPushDocumentEvent_receiveRegistrationId jsString:[event toJsonString]];
+    }];
+  
+  if (notification != nil &&
+      [[UIDevice currentDevice].systemVersion floatValue] < 10.0) {// iOS 10 以后通过 openNotification 这个回调触发事件。
+        if (notification.userInfo) {
+          
+          if ([notification.userInfo valueForKey:UIApplicationLaunchOptionsRemoteNotificationKey]) {
+            [JPushPlugin fireDocumentEvent:JPushDocumentEvent_OpenNotification
+                                  jsString:[[self jpushFormatAPNSDic: notification.userInfo[UIApplicationLaunchOptionsRemoteNotificationKey]] toJsonString]];
+          }
+          
+          if ([notification.userInfo valueForKey:UIApplicationLaunchOptionsLocalNotificationKey]) {
+            UILocalNotification *localNotification = [notification.userInfo valueForKey:UIApplicationLaunchOptionsLocalNotificationKey];
+            NSMutableDictionary *localNotificationEvent = @{}.mutableCopy;
+            localNotificationEvent[@"content"] = localNotification.alertBody;
+            localNotificationEvent[@"badge"] = @(localNotification.applicationIconBadgeNumber);
+            localNotificationEvent[@"extras"] = localNotification.userInfo;
+
+            [JPushPlugin fireDocumentEvent:JPushDocumentEvent_OpenNotification jsString:[localNotificationEvent toJsonString]];
+          }
+        }
+    }
+  
+  [JPUSHService setDebugMode];
+  
+  NSString *plistPath = [[NSBundle mainBundle] pathForResource:JPushConfig_FileName ofType:@"plist"];
+  NSMutableDictionary *plistData = [[NSMutableDictionary alloc] initWithContentsOfFile:plistPath];
+  NSNumber *delay       = [plistData valueForKey:JPushConfig_Delay];
+  
+  _launchOptions = notification.userInfo;
+  
+  if (![delay boolValue]) {
+    [self startJPushSDK];
+  }
+}
+
+-(void)startJPushSDK{
+    [self registerForRemoteNotification];
+    [JPushPlugin setupJPushSDK:_launchOptions];
+}
+
+- (void)jpushSDKDidLoginNotification {
+  NSDictionary *event = @{@"registrationId": JPUSHService.registrationID};
+  [JPushPlugin fireDocumentEvent:JPushDocumentEvent_receiveRegistrationId jsString:[event toJsonString]];
+}
+
+- (NSMutableDictionary *)jpushFormatAPNSDic:(NSDictionary *)dic {
+  NSMutableDictionary *extras = @{}.mutableCopy;
+  for (NSString *key in dic) {
+    if([key isEqualToString:@"_j_business"]      ||
+       [key isEqualToString:@"_j_msgid"]         ||
+       [key isEqualToString:@"_j_uid"]           ||
+       [key isEqualToString:@"actionIdentifier"] ||
+       [key isEqualToString:@"aps"]) {
+      continue;
+    }
+    extras[key] = dic[key];
+  }
+  NSMutableDictionary *formatDic = dic.mutableCopy;
+  formatDic[@"extras"] = extras;
+  return formatDic;
+}
+
+-(void)registerForRemoteNotification{
+    if ([[UIDevice currentDevice].systemVersion floatValue] >= 10.0) {
+#ifdef NSFoundationVersionNumber_iOS_9_x_Max
+        JPUSHRegisterEntity * entity = [[JPUSHRegisterEntity alloc] init];
+        entity.types = UNAuthorizationOptionAlert|UNAuthorizationOptionBadge|UNAuthorizationOptionSound;
+        [JPUSHService registerForRemoteNotificationConfig:entity delegate:self];
+#endif
+    }else if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {
+        //可以添加自定义categories
+        [JPUSHService registerForRemoteNotificationTypes:(UIUserNotificationTypeBadge |
+                                                          UIUserNotificationTypeSound |
+                                                          UIUserNotificationTypeAlert)
+                                              categories:nil];
+    } else if([[UIDevice currentDevice].systemVersion floatValue] < 8.0){
+        //categories 必须为nil
+        [JPUSHService registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge |
+                                                          UIRemoteNotificationTypeSound |
+                                                          UIRemoteNotificationTypeAlert)
+                                              categories:nil];
+    }
+}
+
+- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
+    [JPUSHService registerDeviceToken:deviceToken];
+}
+
+-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{
+    [JPUSHService handleRemoteNotification:userInfo];
+
+    [JPushPlugin fireDocumentEvent:JPushDocumentEvent_ReceiveNotification jsString:[userInfo toJsonString]];
+}
+
+-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{
+    [JPUSHService handleRemoteNotification:userInfo];
+    NSString *eventName;
+    switch ([UIApplication sharedApplication].applicationState) {
+      case UIApplicationStateBackground:
+        eventName = JPushDocumentEvent_BackgroundNotification;
+        break;
+      default:
+        eventName = JPushDocumentEvent_ReceiveNotification;
+        break;
+    }
+
+    [JPushPlugin fireDocumentEvent:eventName jsString:[[self jpushFormatAPNSDic:userInfo] toJsonString]];
+    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(30 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
+      completionHandler(UIBackgroundFetchResultNewData);
+    });
+}
+
+-(void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger))completionHandler{
+  NSMutableDictionary *userInfo = @{}.mutableCopy;
+  
+  if ([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
+    userInfo = [self jpushFormatAPNSDic:notification.request.content.userInfo];
+  } else {
+    UNNotificationContent *content = notification.request.content;
+    userInfo[@"content"] = content.body;
+    userInfo[@"badge"] = content.badge;
+    userInfo[@"extras"] = content.userInfo;
+    userInfo[@"identifier"] = notification.request.identifier;
+  }
+  
+  completionHandler(UNNotificationPresentationOptionBadge|UNNotificationPresentationOptionSound|UNNotificationPresentationOptionAlert);
+  
+  if ([userInfo[@"aps"][@"content-available"] isEqualToNumber:@(1)]) {// content-available 当用户开启后台推送是,防止触发两次事件
+    return;
+  }
+  
+  [JPushPlugin fireDocumentEvent:JPushDocumentEvent_ReceiveNotification jsString:[userInfo toJsonString]];
+  
+}
+
+-(void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler{
+  UNNotification *notification = response.notification;
+  NSMutableDictionary *userInfo = @{}.mutableCopy;
+  
+  if ([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
+    userInfo = [self jpushFormatAPNSDic:notification.request.content.userInfo];
+  } else {
+    UNNotificationContent *content = notification.request.content;
+    userInfo[@"content"] = content.body;
+    userInfo[@"badge"] = content.badge;
+    userInfo[@"extras"] = content.userInfo;
+    userInfo[@"identifier"] = notification.request.identifier;
+  }
+  
+  [JPushPlugin fireDocumentEvent:JPushDocumentEvent_OpenNotification jsString:[userInfo toJsonString]];
+  completionHandler();
+}
+
+- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {
+  NSMutableDictionary *localNotificationEvent = @{}.mutableCopy;
+  localNotificationEvent[@"content"] = notification.alertBody;
+  localNotificationEvent[@"badge"] = @(notification.applicationIconBadgeNumber);
+  localNotificationEvent[@"extras"] = notification.userInfo;
+  
+  [[NSNotificationCenter defaultCenter] postNotificationName:JPushDocumentEvent_ReceiveLocalNotification object:localNotificationEvent];
+}
+
+- (void)applicationWillEnterForeground:(UIApplication *)application {
+    //  [application setApplicationIconBadgeNumber:0];
+    //  [application cancelAllLocalNotifications];
+}
+
+- (void)applicationDidEnterBackground:(UIApplication *)application {
+    //  [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
+}
+
+@end
diff --git a/platforms/ios/dlapp/Plugins/jpush-phonegap-plugin/JPUSHService.h b/platforms/ios/dlapp/Plugins/jpush-phonegap-plugin/JPUSHService.h
new file mode 100755
index 0000000..904da9a
--- /dev/null
+++ b/platforms/ios/dlapp/Plugins/jpush-phonegap-plugin/JPUSHService.h
@@ -0,0 +1,686 @@
+/*
+ *	| |    | |  \ \  / /  | |    | |   / _______|
+ *	| |____| |   \ \/ /   | |____| |  / /
+ *	| |____| |    \  /    | |____| |  | |   _____
+ * 	| |    | |    /  \    | |    | |  | |  |____ |
+ *  | |    | |   / /\ \   | |    | |  \ \______| |
+ *  | |    | |  /_/  \_\  | |    | |   \_________|
+ *
+ * Copyright (c) 2011 ~ 2017 Shenzhen HXHG. All rights reserved.
+ */
+
+#define JPUSH_VERSION_NUMBER 3.2.1
+
+#import <Foundation/Foundation.h>
+
+@class CLRegion;
+@class UILocalNotification;
+@class CLLocation;
+@class UNNotificationCategory;
+@class UNNotificationSettings;
+@class UNNotificationRequest;
+@class UNNotification;
+@protocol JPUSHRegisterDelegate;
+@protocol JPUSHGeofenceDelegate;
+
+typedef void (^JPUSHTagsOperationCompletion)(NSInteger iResCode, NSSet *iTags, NSInteger seq);
+typedef void (^JPUSHTagValidOperationCompletion)(NSInteger iResCode, NSSet *iTags, NSInteger seq, BOOL isBind);
+typedef void (^JPUSHAliasOperationCompletion)(NSInteger iResCode, NSString *iAlias, NSInteger seq);
+
+extern NSString *const kJPFNetworkIsConnectingNotification; // 正在连接中
+extern NSString *const kJPFNetworkDidSetupNotification;     // 建立连接
+extern NSString *const kJPFNetworkDidCloseNotification;     // 关闭连接
+extern NSString *const kJPFNetworkDidRegisterNotification;  // 注册成功
+extern NSString *const kJPFNetworkFailedRegisterNotification; //注册失败
+extern NSString *const kJPFNetworkDidLoginNotification;     // 登录成功
+extern NSString *const kJPFNetworkDidReceiveMessageNotification;         // 收到消息(非APNS)
+extern NSString *const kJPFServiceErrorNotification;  // 错误提示
+
+typedef NS_OPTIONS(NSUInteger, JPAuthorizationOptions) {
+    JPAuthorizationOptionNone    = 0,   // the application may not present any UI upon a notification being received
+    JPAuthorizationOptionBadge   = (1 << 0),    // the application may badge its icon upon a notification being received
+    JPAuthorizationOptionSound   = (1 << 1),    // the application may play a sound upon a notification being received
+    JPAuthorizationOptionAlert   = (1 << 2),    // the application may display an alert upon a notification being received
+    JPAuthorizationOptionCarPlay = (1 << 3),    // The ability to display notifications in a CarPlay environment.
+    JPAuthorizationOptionCriticalAlert NS_AVAILABLE_IOS(12.0) = (1 << 4) ,   //The ability to play sounds for critical alerts.
+    JPAuthorizationOptionProvidesAppNotificationSettings NS_AVAILABLE_IOS(12.0) = (1 << 5) ,      //An option indicating the system should display a button for in-app notification settings.
+    JPAuthorizationOptionProvisional NS_AVAILABLE_IOS(12.0) = (1 << 6) ,     //The ability to post noninterrupting notifications provisionally to the Notification Center.
+  
+};
+
+/*!
+ * 通知注册实体类
+ */
+@interface JPUSHRegisterEntity : NSObject
+
+/*!
+ * 支持的类型
+ * badge,sound,alert
+ */
+@property (nonatomic, assign) NSInteger types;
+/*!
+ * 注入的类别
+ * iOS10 UNNotificationCategory
+ * iOS8-iOS9 UIUserNotificationCategory
+ */
+@property (nonatomic, strong) NSSet *categories;
+@end
+
+/*!
+ * 进行删除、查找推送实体类
+ */
+@interface JPushNotificationIdentifier : NSObject<NSCopying, NSCoding>
+
+@property (nonatomic, copy) NSArray<NSString *> *identifiers; // 推送的标识数组
+@property (nonatomic, copy) UILocalNotification *notificationObj NS_DEPRECATED_IOS(4_0, 10_0);  // iOS10以下可以传UILocalNotification对象数据,iOS10以上无效
+@property (nonatomic, assign) BOOL delivered NS_AVAILABLE_IOS(10_0); // 在通知中心显示的或待推送的标志,默认为NO,YES表示在通知中心显示的,NO表示待推送的
+@property (nonatomic, copy) void (^findCompletionHandler)(NSArray *results); // 用于查询回调,调用[findNotification:]方法前必须设置,results为返回相应对象数组,iOS10以下返回UILocalNotification对象数组;iOS10以上根据delivered传入值返回UNNotification或UNNotificationRequest对象数组(delivered传入YES,则返回UNNotification对象数组,否则返回UNNotificationRequest对象数组)
+
+@end
+
+/*!
+ * 推送通知声音实体类
+ * iOS10以上有效
+ */
+@interface JPushNotificationSound : NSObject <NSCopying, NSCoding>
+@property (nonatomic, copy) NSString *soundName; //普通通知铃声
+@property (nonatomic, copy) NSString *criticalSoundName NS_AVAILABLE_IOS(12.0); //警告通知铃声
+@property (nonatomic, assign) float criticalSoundVolume NS_AVAILABLE_IOS(12.0); //警告通知铃声音量,有效值在0~1之间,默认为1
+@end
+
+
+/*!
+ * 推送内容实体类
+ */
+@interface JPushNotificationContent : NSObject<NSCopying, NSCoding>
+
+@property (nonatomic, copy) NSString *title;                // 推送标题
+@property (nonatomic, copy) NSString *subtitle;             // 推送副标题
+@property (nonatomic, copy) NSString *body;                 // 推送内容
+@property (nonatomic, copy) NSNumber *badge;                // 角标的数字。如果不需要改变角标传@(-1)
+@property (nonatomic, copy) NSString *action NS_DEPRECATED_IOS(8_0, 10_0); // 弹框的按钮显示的内容(IOS 8默认为"打开", 其他默认为"启动",iOS10以上无效)
+@property (nonatomic, copy) NSString *categoryIdentifier;   // 行为分类标识
+@property (nonatomic, copy) NSDictionary *userInfo;         // 本地推送时可以设置userInfo来增加附加信息,远程推送时设置的payload推送内容作为此userInfo
+@property (nonatomic, copy) NSString *sound;                // 声音名称,不设置则为默认声音
+@property (nonatomic, copy) JPushNotificationSound *soundSetting NS_AVAILABLE_IOS(10.0);   //推送声音实体
+@property (nonatomic, copy) NSArray *attachments NS_AVAILABLE_IOS(10_0);                 // 附件,iOS10以上有效,需要传入UNNotificationAttachment对象数组类型
+@property (nonatomic, copy) NSString *threadIdentifier NS_AVAILABLE_IOS(10_0); // 线程或与推送请求相关对话的标识,iOS10以上有效,可用来对推送进行分组
+@property (nonatomic, copy) NSString *launchImageName NS_AVAILABLE_IOS(10_0);  // 启动图片名,iOS10以上有效,从推送启动时将会用到
+@property (nonatomic, copy) NSString *summaryArgument NS_AVAILABLE_IOS(12.0);  //插入到通知摘要中的部分参数。iOS12以上有效。
+@property (nonatomic, assign) NSUInteger summaryArgumentCount NS_AVAILABLE_IOS(12.0); //插入到通知摘要中的项目数。iOS12以上有效。
+
+@end
+
+
+/*!
+ * 推送触发方式实体类
+ * 注:dateComponents、timeInterval、region在iOS10以上可选择其中一个参数传入有效值,如果同时传入值会根据优先级I、II、III使其中一种触发方式生效,fireDate为iOS10以下根据时间触发时须传入的参数
+ */
+@interface JPushNotificationTrigger : NSObject<NSCopying, NSCoding>
+
+@property (nonatomic, assign) BOOL repeat;                  // 设置是否重复,默认为NO
+@property (nonatomic, copy) NSDate *fireDate NS_DEPRECATED_IOS(2_0, 10_0);           // 用来设置触发推送的时间,iOS10以上无效
+@property (nonatomic, copy) CLRegion *region NS_AVAILABLE_IOS(8_0);                  // 用来设置触发推送的位置,iOS8以上有效,iOS10以上优先级为I,应用需要有允许使用定位的授权
+@property (nonatomic, copy) NSDateComponents *dateComponents NS_AVAILABLE_IOS(10_0); // 用来设置触发推送的日期时间,iOS10以上有效,优先级为II
+@property (nonatomic, assign) NSTimeInterval timeInterval NS_AVAILABLE_IOS(10_0);    // 用来设置触发推送的时间,iOS10以上有效,优先级为III
+
+@end
+
+/*!
+ * 注册或更新推送实体类
+ */
+@interface JPushNotificationRequest : NSObject<NSCopying, NSCoding>
+
+@property (nonatomic, copy) NSString *requestIdentifier;    // 推送请求标识
+@property (nonatomic, copy) JPushNotificationContent *content; // 设置推送的具体内容
+@property (nonatomic, copy) JPushNotificationTrigger *trigger; // 设置推送的触发方式
+@property (nonatomic, copy) void (^completionHandler)(id result); // 注册或更新推送成功回调,iOS10以上成功则result为UNNotificationRequest对象,失败则result为nil;iOS10以下成功result为UILocalNotification对象,失败则result为nil
+
+@end
+
+/*!
+ * JPush 核心头文件
+ */
+@interface JPUSHService : NSObject
+
+
+///----------------------------------------------------
+/// @name Setup 启动相关
+///----------------------------------------------------
+
+
+/*!
+ * @abstract 启动SDK
+ *
+ * @param launchingOption 启动参数.
+ * @param appKey 一个JPush 应用必须的,唯一的标识. 请参考 JPush 相关说明文档来获取这个标识.
+ * @param channel 发布渠道. 可选.
+ * @param isProduction 是否生产环境. 如果为开发状态,设置为 NO; 如果为生产状态,应改为 YES.
+ *                     App 证书环境取决于profile provision的配置,此处建议与证书环境保持一致.
+ *
+ * @discussion 提供SDK启动必须的参数, 来启动 SDK.
+ * 此接口必须在 App 启动时调用, 否则 JPush SDK 将无法正常工作.
+ */
++ (void)setupWithOption:(NSDictionary *)launchingOption
+                 appKey:(NSString *)appKey
+                channel:(NSString *)channel
+       apsForProduction:(BOOL)isProduction;
+
+/*!
+ * @abstract 启动SDK
+ *
+ * @param launchingOption 启动参数.
+ * @param appKey 一个JPush 应用必须的,唯一的标识. 请参考 JPush 相关说明文档来获取这个标识.
+ * @param channel 发布渠道. 可选.
+ * @param isProduction 是否生产环境. 如果为开发状态,设置为 NO; 如果为生产状态,应改为 YES.
+ *                     App 证书环境取决于profile provision的配置,此处建议与证书环境保持一致.
+ * @param advertisingId 广告标识符(IDFA) 如果不需要使用IDFA,传nil.
+ *
+ * @discussion 提供SDK启动必须的参数, 来启动 SDK.
+ * 此接口必须在 App 启动时调用, 否则 JPush SDK 将无法正常工作.
+ */
++ (void)setupWithOption:(NSDictionary *)launchingOption
+                 appKey:(NSString *)appKey
+                channel:(NSString *)channel
+       apsForProduction:(BOOL)isProduction
+  advertisingIdentifier:(NSString *)advertisingId;
+
+
+///----------------------------------------------------
+/// @name APNs about 通知相关
+///----------------------------------------------------
+
+/*!
+ * @abstract 注册要处理的远程通知类型
+ *
+ * @param types 通知类型
+ * @param categories 类别组
+ *
+ */
++ (void)registerForRemoteNotificationTypes:(NSUInteger)types
+                                categories:(NSSet *)categories;
+/*!
+ * @abstract 新版本的注册方法(兼容iOS10)
+ *
+ * @param config 注册通知配置
+ * @param delegate 代理
+ *
+ */
++ (void)registerForRemoteNotificationConfig:(JPUSHRegisterEntity *)config delegate:(id<JPUSHRegisterDelegate>)delegate;
+
+
++ (void)registerDeviceToken:(NSData *)deviceToken;
+
+
+/*!
+ * @abstract 处理收到的 APNs 消息
+ */
++ (void)handleRemoteNotification:(NSDictionary *)remoteInfo;
+
+/*!
+ * Tags操作接口
+ * 支持增加/覆盖/删除/清空/查询操作
+ * 详情请参考文档:https://docs.jiguang.cn/jpush/client/iOS/ios_api/)
+ */
+
+/**
+ 增加tags
+
+ @param tags 需要增加的tags集合
+ @param completion 响应回调
+ @param seq 请求序列号
+ */
++ (void)addTags:(NSSet<NSString *> *)tags
+     completion:(JPUSHTagsOperationCompletion)completion
+            seq:(NSInteger)seq;
+
+/**
+ 覆盖tags
+ 调用该接口会覆盖用户所有的tags
+
+ @param tags 需要设置的tags集合
+ @param completion 响应回调
+ @param seq 请求序列号
+ */
++ (void)setTags:(NSSet<NSString *> *)tags
+     completion:(JPUSHTagsOperationCompletion)completion
+            seq:(NSInteger)seq;
+
+/**
+ 删除指定tags
+
+ @param tags 需要删除的tags集合
+ @param completion 响应回调
+ @param seq 请求序列号
+ */
++ (void)deleteTags:(NSSet<NSString *> *)tags
+        completion:(JPUSHTagsOperationCompletion)completion
+               seq:(NSInteger)seq;
+
+/**
+ 清空所有tags
+ @param completion 响应回调
+ @param seq 请求序列号
+ */
++ (void)cleanTags:(JPUSHTagsOperationCompletion)completion
+              seq:(NSInteger)seq;
+
+/**
+ 查询全部tags
+
+ @param completion 响应回调,请在回调中获取查询结果
+ @param seq 请求序列号
+ */
++ (void)getAllTags:(JPUSHTagsOperationCompletion)completion
+               seq:(NSInteger)seq;
+
+/**
+ 验证tag是否绑定
+ 
+ @param completion 响应回调,回调中查看是否绑定
+ @param seq 请求序列号
+ */
++ (void)validTag:(NSString *)tag
+      completion:(JPUSHTagValidOperationCompletion)completion
+             seq:(NSInteger)seq;
+
+/**
+ 设置Alias
+
+ @param alias 需要设置的alias
+ @param completion 响应回调
+ @param seq 请求序列号
+ */
++ (void)setAlias:(NSString *)alias
+      completion:(JPUSHAliasOperationCompletion)completion
+             seq:(NSInteger)seq;
+
+/**
+ 删除alias
+
+ @param completion 响应回调
+ @param seq 请求序列号
+ */
++ (void)deleteAlias:(JPUSHAliasOperationCompletion)completion
+                seq:(NSInteger)seq;
+
+/**
+ 查询当前alias
+
+ @param completion 响应回调
+ @param seq 请求序列号
+ */
++ (void)getAlias:(JPUSHAliasOperationCompletion)completion
+             seq:(NSInteger)seq;
+
+
+/*!
+ * @abstract 过滤掉无效的 tags
+ *
+ * @discussion 如果 tags 数量超过限制数量, 则返回靠前的有效的 tags.
+ * 建议设置 tags 前用此接口校验. SDK 内部也会基于此接口来做过滤.
+ */
++ (NSSet *)filterValidTags:(NSSet *)tags;
+
+///----------------------------------------------------
+/// @name Stats 统计功能
+///----------------------------------------------------
+
+/*!
+ * @abstract 开始记录页面停留
+ *
+ * @param pageName 页面名称
+ * @discussion JCore 1.1.8 版本后,如需统计页面流,请使用 JAnalytics
+ */
++ (void)startLogPageView:(NSString *)pageName __attribute__((deprecated("JCore 1.1.8 版本已过期")));
+
+/*!
+ * @abstract 停止记录页面停留
+ *
+ * @param pageName 页面
+ * @discussion JCore 1.1.8 版本后,如需统计页面流,请使用 JAnalytics
+ */
++ (void)stopLogPageView:(NSString *)pageName __attribute__((deprecated("JCore 1.1.8 版本已过期")));
+
+/*!
+ * @abstract 直接上报在页面的停留时间
+ *
+ * @param pageName 页面
+ * @param seconds 停留的秒数
+ * @discussion JCore 1.1.8 版本后,如需统计页面流,请使用 JAnalytics
+ */
++ (void)beginLogPageView:(NSString *)pageName duration:(int)seconds __attribute__((deprecated("JCore 1.1.8 版本已过期")));
+
+/*!
+ * @abstract 开启Crash日志收集
+ *
+ * @discussion 默认是关闭状态.
+ */
++ (void)crashLogON;
+
+/*!
+ * @abstract 地理位置上报
+ *
+ * @param latitude 纬度.
+ * @param longitude 经度.
+ *
+ */
++ (void)setLatitude:(double)latitude longitude:(double)longitude;
+
+/*!
+ * @abstract 地理位置上报
+ *
+ * @param location 直接传递 CLLocation * 型的地理信息
+ *
+ * @discussion 需要链接 CoreLocation.framework 并且 #import <CoreLocation/CoreLocation.h>
+ */
++ (void)setLocation:(CLLocation *)location;
+
+/**
+ 设置地理围栏的最大个数
+ 默认值为 10 ,iOS系统默认地理围栏最大个数为20
+ @param count 个数 count
+ */
++ (void)setGeofenecMaxCount:(NSInteger)count;
+/**
+ 注册地理围栏的代理
+
+ @param delegate 代理
+ @param launchOptions app启动完成是收到的字段参数
+ */
++ (void)registerLbsGeofenceDelegate:(id<JPUSHGeofenceDelegate>)delegate withLaunchOptions:(NSDictionary *)launchOptions;
+
+/**
+ 删除地理围栏
+ 
+ @param geofenceId 地理围栏id
+ */
++ (void)removeGeofenceWithIdentifier:(NSString *)geofenceId;
+
+///----------------------------------------------------
+/// @name Local Notification 本地通知
+///----------------------------------------------------
+/*!
+ * @abstract 注册或更新推送 (支持iOS10,并兼容iOS10以下版本)
+ *
+ * JPush 2.1.9新接口
+ * @param request JPushNotificationRequest类型,设置推送的属性,设置已有推送的request.requestIdentifier即更新已有的推送,否则为注册新推送,更新推送仅仅在iOS10以上有效,结果通过request.completionHandler返回
+ * @discussion 旧的注册本地推送接口被废弃,使用此接口可以替换
+ *
+ */
++ (void)addNotification:(JPushNotificationRequest *)request;
+
+/*!
+ * @abstract 移除推送 (支持iOS10,并兼容iOS10以下版本)
+ *
+ * JPush 2.1.9新接口
+ * @param identifier JPushNotificationIdentifier类型,iOS10以上identifier设置为nil,则移除所有在通知中心显示推送和待推送请求,也可以通过设置identifier.delivered和identifier.identifiers来移除相应在通知中心显示推送或待推送请求,identifier.identifiers如果设置为nil或空数组则移除相应标志下所有在通知中心显示推送或待推送请求;iOS10以下identifier设置为nil,则移除所有推送,identifier.delivered属性无效,另外可以通过identifier.notificationObj传入特定推送对象来移除此推送。
+ * @discussion 旧的所有删除推送接口被废弃,使用此接口可以替换
+ *
+ */
++ (void)removeNotification:(JPushNotificationIdentifier *)identifier;
+
+/*!
+ * @abstract 查找推送 (支持iOS10,并兼容iOS10以下版本)
+ *
+ * JPush 2.1.9新接口
+ * @param identifier JPushNotificationIdentifier类型,iOS10以上可以通过设置identifier.delivered和identifier.identifiers来查找相应在通知中心显示推送或待推送请求,identifier.identifiers如果设置为nil或空数组则返回相应标志下所有在通知中心显示推送或待推送请求;iOS10以下identifier.delivered属性无效,identifier.identifiers如果设置nil或空数组则返回所有未触发的推送。须要设置identifier.findCompletionHandler回调才能得到查找结果,通过(NSArray *results)返回相应对象数组。
+ * @discussion 旧的查找推送接口被废弃,使用此接口可以替换
+ *
+ */
++ (void)findNotification:(JPushNotificationIdentifier *)identifier;
+
+/*!
+ * @abstract 本地推送,最多支持64个
+ *
+ * @param fireDate 本地推送触发的时间
+ * @param alertBody 本地推送需要显示的内容
+ * @param badge 角标的数字。如果不需要改变角标传-1
+ * @param alertAction 弹框的按钮显示的内容(IOS 8默认为"打开", 其他默认为"启动")
+ * @param notificationKey 本地推送标示符
+ * @param userInfo 自定义参数,可以用来标识推送和增加附加信息
+ * @param soundName 自定义通知声音,设置为nil为默认声音
+ *
+ * @discussion 最多支持 64 个定义,此方法被[addNotification:]方法取代
+ */
++ (UILocalNotification *)setLocalNotification:(NSDate *)fireDate
+                                    alertBody:(NSString *)alertBody
+                                        badge:(int)badge
+                                  alertAction:(NSString *)alertAction
+                                identifierKey:(NSString *)notificationKey
+                                     userInfo:(NSDictionary *)userInfo
+                                    soundName:(NSString *)soundName __attribute__((deprecated("JPush 2.1.9 版本已过期")));
+
+/*!
+ * @abstract 本地推送 (支持 iOS8 新参数)
+ *
+ * IOS8新参数
+ * @param region 自定义参数
+ * @param regionTriggersOnce 自定义参数
+ * @param category 自定义参数
+ * @discussion 此方法被[addNotification:]方法取代
+ */
++ (UILocalNotification *)setLocalNotification:(NSDate *)fireDate
+                                    alertBody:(NSString *)alertBody
+                                        badge:(int)badge
+                                  alertAction:(NSString *)alertAction
+                                identifierKey:(NSString *)notificationKey
+                                     userInfo:(NSDictionary *)userInfo
+                                    soundName:(NSString *)soundName
+                                       region:(CLRegion *)region
+                           regionTriggersOnce:(BOOL)regionTriggersOnce
+                                     category:(NSString *)category NS_AVAILABLE_IOS(8_0) __attribute__((deprecated("JPush 2.1.9 版本已过期")));
+
+/*!
+ * @abstract 前台展示本地推送
+ *
+ * @param notification 本地推送对象
+ * @param notificationKey 需要前台显示的本地推送通知的标示符
+ *
+ * @discussion 默认App在前台运行时不会进行弹窗,在程序接收通知调用此接口可实现指定的推送弹窗。--iOS10以下还可继续使用,iOS10以上在[UNUserNotificationCenterDelegate willPresentNotification:withCompletionHandler:]方法中调用completionHandler(UNNotificationPresentationOptionSound | UNNotificationPresentationOptionAlert);即可
+ */
++ (void)showLocalNotificationAtFront:(UILocalNotification *)notification
+                       identifierKey:(NSString *)notificationKey __attribute__((deprecated("JPush 2.1.9 版本已过期")));
+/*!
+ * @abstract 删除本地推送定义
+ *
+ * @param notificationKey 本地推送标示符
+ * @discussion 此方法被[removeNotification:]方法取代
+ */
++ (void)deleteLocalNotificationWithIdentifierKey:(NSString *)notificationKey __attribute__((deprecated("JPush 2.1.9 版本已过期")));
+
+/*!
+ * @abstract 删除本地推送定义
+ * @discussion 此方法被[removeNotification:]方法取代
+ */
++ (void)deleteLocalNotification:(UILocalNotification *)localNotification __attribute__((deprecated("JPush 2.1.9 版本已过期")));
+
+/*!
+ * @abstract 获取指定通知
+ *
+ * @param notificationKey 本地推送标示符
+ * @return 本地推送对象数组, [array count]为0时表示没找到
+ * @discussion 此方法被[findNotification:]方法取代
+ */
++ (NSArray *)findLocalNotificationWithIdentifier:(NSString *)notificationKey __attribute__((deprecated("JPush 2.1.9 版本已过期")));
+
+/*!
+ * @abstract 清除所有本地推送对象
+ * @discussion 此方法被[removeNotification:]方法取代
+ */
++ (void)clearAllLocalNotifications __attribute__((deprecated("JPush 2.1.9 版本已过期")));
+
+
+///----------------------------------------------------
+/// @name Server badge 服务器端 badge 功能
+///----------------------------------------------------
+
+/*!
+ * @abstract 设置角标(到服务器)
+ *
+ * @param value 新的值. 会覆盖服务器上保存的值(这个用户)
+ *
+ * @discussion 本接口不会改变应用本地的角标值.
+ * 本地仍须调用 UIApplication:setApplicationIconBadgeNumber 函数来设置脚标.
+ *
+ * 本接口用于配合 JPush 提供的服务器端角标功能.
+ * 该功能解决的问题是, 服务器端推送 APNs 时, 并不知道客户端原来已经存在的角标是多少, 指定一个固定的数字不太合理.
+ *
+ * JPush 服务器端脚标功能提供:
+ *
+ * - 通过本 API 把当前客户端(当前这个用户的) 的实际 badge 设置到服务器端保存起来;
+ * - 调用服务器端 API 发 APNs 时(通常这个调用是批量针对大量用户),
+ *   使用 "+1" 的语义, 来表达需要基于目标用户实际的 badge 值(保存的) +1 来下发通知时带上新的 badge 值;
+ */
++ (BOOL)setBadge:(NSInteger)value;
+
+/*!
+ * @abstract 重置脚标(为0)
+ *
+ * @discussion 相当于 [setBadge:0] 的效果.
+ * 参考 [JPUSHService setBadge:] 说明来理解其作用.
+ */
++ (void)resetBadge;
+
+///----------------------------------------------------
+/// @name Other Feature 其他功能
+///----------------------------------------------------
+
+/*!
+ * @abstract 设置手机号码(到服务器)
+ *
+ * @param mobileNumber 手机号码. 会与用户信息一一对应。可为空,为空则清除号码
+ * @param completion 响应回调。成功则error为空,失败则error带有错误码及错误信息
+ *
+ * @discussion 设置手机号码后,可实现“推送不到短信到”的通知方式,提高推送达到率。结果信息通过completion异步返回,也可将completion设置为nil不处理结果信息。
+ *
+ */
++ (void)setMobileNumber:(NSString *)mobileNumber completion:(void (^)(NSError *error))completion;
+
+///----------------------------------------------------
+/// @name Logs and others 日志与其他
+///----------------------------------------------------
+
+/*!
+ * @abstract JPush标识此设备的 registrationID
+ *
+ * @discussion SDK注册成功后, 调用此接口获取到 registrationID 才能够获取到.
+ *
+ * JPush 支持根据 registrationID 来进行推送.
+ * 如果你需要此功能, 应该通过此接口获取到 registrationID 后, 上报到你自己的服务器端, 并保存下来.
+ * registrationIDCompletionHandler:是新增的获取registrationID的方法,需要在block中获取registrationID,resCode为返回码,模拟器调用此接口resCode返回1011,registrationID返回nil.
+ * 更多的理解请参考 JPush 的文档网站.
+ */
++ (NSString *)registrationID;
+
++ (void)registrationIDCompletionHandler:(void(^)(int resCode,NSString *registrationID))completionHandler;
+
+/*!
+ * @abstract 打开日志级别到 Debug
+ *
+ * @discussion JMessage iOS 的日志系统参考 Android 设计了级别.
+ * 从低到高是: Verbose, Debug, Info, Warning, Error.
+ * 对日志级别的进一步理解, 请参考 Android 相关的说明.
+ *
+ * SDK 默认开启的日志级别为: Info. 只显示必要的信息, 不打印调试日志.
+ *
+ * 请在SDK启动后调用本接口,调用本接口可打开日志级别为: Debug, 打印调试日志.
+ */
++ (void)setDebugMode;
+
+/*!
+ * @abstract 关闭日志
+ *
+ * @discussion 关于日志级别的说明, 参考 [JPUSHService setDebugMode]
+ *
+ * 虽说是关闭日志, 但还是会打印 Warning, Error 日志. 这二种日志级别, 在程序运行正常时, 不应有打印输出.
+ *
+ * 建议在发布的版本里, 调用此接口, 关闭掉日志打印.
+ */
++ (void)setLogOFF;
+
+///----------------------------------------------------
+///********************下列方法已过期********************
+///**************请使用新版tag/alias操作接口**************
+///----------------------------------------------------
+/// @name Tag alias setting 设置别名与标签
+///----------------------------------------------------
+
+/*!
+ * 下面的接口是可选的
+ * 设置标签和(或)别名(若参数为nil,则忽略;若是空对象,则清空;详情请参考文档:https://docs.jiguang.cn/jpush/client/iOS/ios_api/)
+ * setTags:alias:fetchCompletionHandle:是新的设置标签别名的方法,不再需要显示声明回调函数,只需要在block里面处理设置结果即可.
+ * WARN: 使用block时需要注意循环引用问题
+ */
++ (void) setTags:(NSSet *)tags
+           alias:(NSString *)alias
+callbackSelector:(SEL)cbSelector
+          target:(id)theTarget __attribute__((deprecated("JPush 2.1.1 版本已过期")));
++ (void) setTags:(NSSet *)tags
+           alias:(NSString *)alias
+callbackSelector:(SEL)cbSelector
+          object:(id)theTarget __attribute__((deprecated("JPush 3.0.6 版本已过期")));
++ (void) setTags:(NSSet *)tags
+callbackSelector:(SEL)cbSelector
+          object:(id)theTarget __attribute__((deprecated("JPush 3.0.6 版本已过期")));
++ (void)setTags:(NSSet *)tags
+          alias:(NSString *)alias
+fetchCompletionHandle:(void (^)(int iResCode, NSSet *iTags, NSString *iAlias))completionHandler __attribute__((deprecated("JPush 3.0.6 版本已过期")));
++ (void)  setTags:(NSSet *)tags
+aliasInbackground:(NSString *)alias __attribute__((deprecated("JPush 3.0.6 版本已过期")));
++ (void)setAlias:(NSString *)alias
+callbackSelector:(SEL)cbSelector
+          object:(id)theTarget __attribute__((deprecated("JPush 3.0.6 版本已过期")));
+
+@end
+
+@class UNUserNotificationCenter;
+@class UNNotificationResponse;
+
+@protocol JPUSHRegisterDelegate <NSObject>
+
+/*
+ * @brief handle UserNotifications.framework [willPresentNotification:withCompletionHandler:]
+ * @param center [UNUserNotificationCenter currentNotificationCenter] 新特性用户通知中心
+ * @param notification 前台得到的的通知对象
+ * @param completionHandler 该callback中的options 请使用UNNotificationPresentationOptions
+ */
+- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger options))completionHandler;
+/*
+ * @brief handle UserNotifications.framework [didReceiveNotificationResponse:withCompletionHandler:]
+ * @param center [UNUserNotificationCenter currentNotificationCenter] 新特性用户通知中心
+ * @param response 通知响应对象
+ * @param completionHandler
+ */
+- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)(void))completionHandler;
+
+/*
+ * @brief handle UserNotifications.framework [openSettingsForNotification:]
+ * @param center [UNUserNotificationCenter currentNotificationCenter] 新特性用户通知中心
+ * @param notification 当前管理的通知对象
+ */
+- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center openSettingsForNotification:(nullable UNNotification *)notification NS_AVAILABLE_IOS(12.0);
+
+@end
+
+@protocol JPUSHGeofenceDelegate <NSObject>
+
+/**
+ 进入地理围栏区域
+ 
+ @param geofenceId 地理围栏id
+ @param userInfo 地理围栏触发时返回的信息
+ @param error 错误信息
+ */
+- (void)jpushGeofenceIdentifer:(NSString * _Nonnull)geofenceId didEnterRegion:(NSDictionary * _Nullable)userInfo error:(NSError * _Nullable)error;
+
+/**
+ 离开地理围栏区域
+ 
+ @param geofenceId 地理围栏id
+ @param userInfo 地理围栏触发时返回的信息
+ @param error 错误信息
+ */
+- (void)jpushGeofenceIdentifer:(NSString * _Nonnull)geofenceId didExitRegion:(NSDictionary * _Nullable)userInfo error:(NSError * _Nullable)error;
+
+@end
diff --git a/platforms/ios/dlapp/Plugins/jpush-phonegap-plugin/JPushDefine.h b/platforms/ios/dlapp/Plugins/jpush-phonegap-plugin/JPushDefine.h
new file mode 100644
index 0000000..7307ea7
--- /dev/null
+++ b/platforms/ios/dlapp/Plugins/jpush-phonegap-plugin/JPushDefine.h
@@ -0,0 +1,32 @@
+//
+//  ConstantDef.h
+//  jmessage
+//
+//  Created by ljg on 16/1/19.
+//
+//
+
+#ifndef ConstantDef_h
+#define ConstantDef_h
+
+
+
+#endif /* ConstantDef_h */
+
+#define WEAK_SELF(weakSelf)  __weak __typeof(&*self)weakSelf = self;
+
+static NSString *const JPushConfig_FileName     = @"JPushConfig";
+static NSString *const JPushConfig_Appkey       = @"Appkey";
+static NSString *const JPushConfig_Channel      = @"Channel";
+static NSString *const JPushConfig_IsProduction = @"IsProduction";
+static NSString *const JPushConfig_IsIDFA       = @"IsIDFA";
+static NSString *const JPushConfig_Delay        = @"Delay";
+
+static NSString *const JPushDocumentEvent_ReceiveNotification       = @"receiveNotification";
+static NSString *const JPushDocumentEvent_OpenNotification          = @"openNotification";
+static NSString *const JPushDocumentEvent_BackgroundNotification    = @"backgroundNotification";
+static NSString *const JPushDocumentEvent_SetTagsWithAlias          = @"setTagsWithAlias";
+static NSString *const JPushDocumentEvent_ReceiveMessage            = @"receiveMessage";
+static NSString *const JPushDocumentEvent_ReceiveLocalNotification  = @"receiveLocalNotification";
+
+static NSString *const JPushDocumentEvent_receiveRegistrationId     = @"receiveRegistrationId";
diff --git a/platforms/ios/dlapp/Plugins/jpush-phonegap-plugin/JPushPlugin.h b/platforms/ios/dlapp/Plugins/jpush-phonegap-plugin/JPushPlugin.h
new file mode 100644
index 0000000..2a7f932
--- /dev/null
+++ b/platforms/ios/dlapp/Plugins/jpush-phonegap-plugin/JPushPlugin.h
@@ -0,0 +1,102 @@
+//
+//  PushTalkPlugin.h
+//  PushTalk
+//
+//  Created by zhangqinghe on 13-12-13.
+//
+//
+
+#import <Cordova/CDV.h>
+
+static NSMutableDictionary *_jpushEventCache;
+
+@interface JPushPlugin : CDVPlugin{
+
+}
+
+//注册通知服务并启动 SDK
+-(void)startJPushSDK:(CDVInvokedUrlCommand*)command;
+
+//以下为js中可调用接口
+//设置标签、别名
+-(void)setTags:(CDVInvokedUrlCommand*)command;
+-(void)addTags:(CDVInvokedUrlCommand*)command;
+-(void)deleteTags:(CDVInvokedUrlCommand*)command;
+-(void)cleanTags:(CDVInvokedUrlCommand*)command;
+-(void)getAllTags:(CDVInvokedUrlCommand*)command;
+-(void)checkTagBindState:(CDVInvokedUrlCommand*)command;
+
+-(void)setAlias:(CDVInvokedUrlCommand*)command;
+-(void)deleteAlias:(CDVInvokedUrlCommand*)command;
+-(void)getAlias:(CDVInvokedUrlCommand*)command;
+
+//获取 RegistrationID
+-(void)getRegistrationID:(CDVInvokedUrlCommand*)command;
+
+//页面统计
+-(void)startLogPageView:(CDVInvokedUrlCommand*)command;
+-(void)stopLogPageView:(CDVInvokedUrlCommand*)command;
+-(void)beginLogPageView:(CDVInvokedUrlCommand*)command;
+
+//设置角标到服务器,服务器下一次发消息时,会设置成这个值
+//本接口不会改变应用本地的角标值.
+-(void)setBadge:(CDVInvokedUrlCommand*)command;
+//相当于 [setBadge:0]
+-(void)resetBadge:(CDVInvokedUrlCommand*)command;
+
+//应用本地的角标值设置/获取
+-(void)setApplicationIconBadgeNumber:(CDVInvokedUrlCommand*)command;
+-(void)getApplicationIconBadgeNumber:(CDVInvokedUrlCommand*)command;
+
+//停止与恢复推送
+-(void)stopPush:(CDVInvokedUrlCommand*)command;
+-(void)resumePush:(CDVInvokedUrlCommand*)command;
+-(void)isPushStopped:(CDVInvokedUrlCommand*)command;
+
+//开关日志
+-(void)setDebugModeFromIos:(CDVInvokedUrlCommand*)command;
+-(void)setLogOFF:(CDVInvokedUrlCommand*)command;
+-(void)crashLogON:(CDVInvokedUrlCommand*)command;
+
+//本地推送
+-(void)setLocalNotification:(CDVInvokedUrlCommand*)command;
+-(void)deleteLocalNotificationWithIdentifierKey:(CDVInvokedUrlCommand*)command;
+-(void)clearAllLocalNotifications:(CDVInvokedUrlCommand*)command;
+
+//地理位置上报 [latitude,longitude]
+-(void)setLocation:(CDVInvokedUrlCommand*)command;
+
+//检查用户的推送设置情况
+-(void)getUserNotificationSettings:(CDVInvokedUrlCommand*)command;
+
+//ios 10 APIs
+-(void)addDismissActions:(CDVInvokedUrlCommand*)command;
+-(void)addNotificationActions:(CDVInvokedUrlCommand*)command;
+
+/*
+ *  以下为js中可监听到的事件
+ *  jpush.openNotification      点击推送消息启动或唤醒app
+ *  jpush.receiveMessage        收到自定义消息
+ *  jpush.receiveNotification   前台收到推送
+ *  jpush.backgroundNotification 后台收到推送
+ */
+
+# pragma mark - private
+
++(void)fireDocumentEvent:(NSString*)eventName jsString:(NSString*)jsString;
+
++(void)setupJPushSDK:(NSDictionary*)userInfo;
+
+@end
+
+static JPushPlugin *SharedJPushPlugin;
+
+@interface NSDictionary (JPush)
+-(NSString*)toJsonString;
+@end
+
+@interface NSString (JPush)
+-(NSDictionary*)toDictionary;
+@end
+
+
diff --git a/platforms/ios/dlapp/Plugins/jpush-phonegap-plugin/JPushPlugin.m b/platforms/ios/dlapp/Plugins/jpush-phonegap-plugin/JPushPlugin.m
new file mode 100644
index 0000000..33229a5
--- /dev/null
+++ b/platforms/ios/dlapp/Plugins/jpush-phonegap-plugin/JPushPlugin.m
@@ -0,0 +1,576 @@
+#import "JPushPlugin.h"
+#import "JPUSHService.h"
+#import <UIKit/UIKit.h>
+#import <AdSupport/AdSupport.h>
+#import <UserNotifications/UserNotifications.h>
+#import "AppDelegate+JPush.h"
+#import "JPushDefine.h"
+
+@implementation NSDictionary (JPush)
+-(NSString*)toJsonString{
+    NSError  *error;
+    NSData   *data       = [NSJSONSerialization dataWithJSONObject:self options:0 error:&error];
+    NSString *jsonString = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
+    return jsonString;
+}
+@end
+
+@implementation NSString (JPush)
+-(NSDictionary*)toDictionary{
+    NSError      *error;
+    NSData       *jsonData = [self dataUsingEncoding:NSUTF8StringEncoding];
+    NSDictionary *dict     = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&error];
+    return dict;
+}
+@end
+
+@interface JPushPlugin()
+
+@end
+
+@implementation JPushPlugin
+
+-(void)startJPushSDK:(CDVInvokedUrlCommand*)command{
+    [(AppDelegate*)[UIApplication sharedApplication].delegate startJPushSDK];
+}
+
+#pragma mark- 外部接口
+-(void)stopPush:(CDVInvokedUrlCommand*)command{
+    [[UIApplication sharedApplication]unregisterForRemoteNotifications];
+}
+
+-(void)resumePush:(CDVInvokedUrlCommand*)command{
+    [(AppDelegate*)[UIApplication sharedApplication].delegate registerForRemoteNotification];
+}
+
+-(void)isPushStopped:(CDVInvokedUrlCommand*)command{
+    NSNumber *result = [[UIApplication sharedApplication] isRegisteredForRemoteNotifications] ? @(0) : @(1);
+    [self handleResultWithValue:result command:command];
+}
+
+-(void)initial:(CDVInvokedUrlCommand*)command{
+    //do nithng,because Cordova plugin use lazy load mode.
+}
+
+#ifdef __CORDOVA_4_0_0
+
+- (void)pluginInitialize {
+    NSLog(@"### pluginInitialize ");
+    [self initPlugin];
+}
+
+#else
+
+- (CDVPlugin*)initWithWebView:(UIWebView*)theWebView{
+    NSLog(@"### initWithWebView ");
+    if (self=[super initWithWebView:theWebView]) {
+    }
+    [self initPlugin];
+    return self;
+}
+
+#endif
+
+-(void)initPlugin{
+    if (!SharedJPushPlugin) {
+        SharedJPushPlugin = self;
+    }
+    [[NSNotificationCenter defaultCenter] addObserver:self
+                                             selector:@selector(networkDidReceiveMessage:)
+                                                 name:kJPFNetworkDidReceiveMessageNotification
+                                               object:nil];
+  [[NSNotificationCenter defaultCenter] addObserver:self
+                                           selector:@selector(receiveLocalNotification:)
+                                               name:JPushDocumentEvent_ReceiveLocalNotification
+                                             object:nil];
+  [self dispatchJPushCacheEvent];
+}
+
+- (void)dispatchJPushCacheEvent {
+  for (NSString* key in _jpushEventCache) {
+    NSArray *evenList = _jpushEventCache[key];
+    for (NSString *event in evenList) {
+        [JPushPlugin fireDocumentEvent:key jsString:event];
+    }
+  }
+}
+
++(void)fireDocumentEvent:(NSString*)eventName jsString:(NSString*)jsString{
+  if (SharedJPushPlugin) {
+    dispatch_async(dispatch_get_main_queue(), ^{
+      [SharedJPushPlugin.commandDelegate evalJs:[NSString stringWithFormat:@"cordova.fireDocumentEvent('jpush.%@',%@)", eventName, jsString]];
+    });
+    return;
+  }
+  
+  if (!_jpushEventCache) {
+    _jpushEventCache = @{}.mutableCopy;
+  }
+  
+  if (!_jpushEventCache[eventName]) {
+    _jpushEventCache[eventName] = @[].mutableCopy;
+  }
+  
+  [_jpushEventCache[eventName] addObject: jsString];
+}
+
+-(void)setTags:(CDVInvokedUrlCommand*)command {
+    NSDictionary* params = [command.arguments objectAtIndex:0];
+    NSNumber* sequence = params[@"sequence"];
+    NSArray* tags = params[@"tags"];
+  
+    [JPUSHService setTags:[NSSet setWithArray:tags]
+               completion:^(NSInteger iResCode, NSSet *iTags, NSInteger seq) {
+                   NSMutableDictionary* dic = [[NSMutableDictionary alloc] init];
+                   [dic setObject:sequence forKey:@"sequence"];
+                   
+                   CDVPluginResult* result;
+                   
+                   if (iResCode == 0) { 
+                       [dic setObject:[iTags allObjects] forKey:@"tags"];
+                       result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:dic];
+                   } else {
+                       [dic setValue:[NSNumber numberWithUnsignedInteger:iResCode] forKey:@"code"];
+                       result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsDictionary:dic];
+                   }
+                   
+                   [self.commandDelegate sendPluginResult:result callbackId:command.callbackId];
+               } seq:[sequence integerValue]];
+}
+
+-(void)addTags:(CDVInvokedUrlCommand *)command {
+    NSDictionary* params = [command.arguments objectAtIndex:0];
+    NSNumber* sequence = params[@"sequence"];
+    NSArray* tags = params[@"tags"];
+    
+    [JPUSHService addTags:[NSSet setWithArray:tags]
+               completion:^(NSInteger iResCode, NSSet *iTags, NSInteger seq) {
+                   NSMutableDictionary* dic = [[NSMutableDictionary alloc] init];
+                   [dic setObject:sequence forKey:@"sequence"];
+                   
+                   CDVPluginResult* result;
+                   
+                   if (iResCode == 0) { 
+                       [dic setObject:[iTags allObjects] forKey:@"tags"];
+                       result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:dic];
+                   } else {
+                       [dic setValue:[NSNumber numberWithUnsignedInteger:iResCode] forKey:@"code"];
+                       result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsDictionary:dic];
+                   }
+                   
+                   [self.commandDelegate sendPluginResult:result callbackId:command.callbackId];
+               } seq:[sequence integerValue]];
+}
+
+-(void)deleteTags:(CDVInvokedUrlCommand *)command {
+    NSDictionary* params = [command.arguments objectAtIndex:0];
+    NSNumber* sequence = params[@"sequence"];
+    NSArray* tags = params[@"tags"];
+    
+    [JPUSHService deleteTags:[NSSet setWithArray:tags]
+               completion:^(NSInteger iResCode, NSSet *iTags, NSInteger seq) {
+                   NSMutableDictionary* dic = [[NSMutableDictionary alloc] init];
+                   [dic setObject:sequence forKey:@"sequence"];
+                   
+                   CDVPluginResult* result;
+                   
+                   if (iResCode == 0) { 
+                       [dic setObject:[iTags allObjects] forKey:@"tags"];
+                       result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:dic];
+                   } else {
+                       [dic setValue:[NSNumber numberWithUnsignedInteger:iResCode] forKey:@"code"];
+                       result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsDictionary:dic];
+                   }
+                   
+                   [self.commandDelegate sendPluginResult:result callbackId:command.callbackId];
+               } seq:[sequence integerValue]];
+}
+
+-(void)cleanTags:(CDVInvokedUrlCommand *)command {
+    NSDictionary* params = [command.arguments objectAtIndex:0];
+    NSNumber* sequence = params[@"sequence"];
+    
+    [JPUSHService cleanTags:^(NSInteger iResCode, NSSet *iTags, NSInteger seq) {
+        NSMutableDictionary* dic = [[NSMutableDictionary alloc] init];
+        [dic setObject:sequence forKey:@"sequence"];
+        
+        CDVPluginResult* result;
+        
+        if (iResCode == 0) {
+            result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:dic];
+        } else {
+            [dic setValue:[NSNumber numberWithUnsignedInteger:iResCode] forKey:@"code"];
+            result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsDictionary:dic];
+        }
+        
+        [self.commandDelegate sendPluginResult:result callbackId:command.callbackId];
+    } seq:[sequence integerValue]];
+}
+
+-(void)getAllTags:(CDVInvokedUrlCommand *)command {
+    NSDictionary* params = [command.arguments objectAtIndex:0];
+    NSNumber* sequence = params[@"sequence"];
+    
+    [JPUSHService getAllTags:^(NSInteger iResCode, NSSet *iTags, NSInteger seq) {
+        NSMutableDictionary* dic = [[NSMutableDictionary alloc] init];
+        [dic setObject:sequence forKey:@"sequence"];
+        
+        CDVPluginResult* result;
+        
+        if (iResCode == 0) { 
+            [dic setObject:[iTags allObjects] forKey:@"tags"];
+            result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:dic];
+        } else {
+            [dic setValue:[NSNumber numberWithUnsignedInteger:iResCode] forKey:@"code"];
+            result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsDictionary:dic];
+        }
+        
+        [self.commandDelegate sendPluginResult:result callbackId:command.callbackId];
+    } seq:[sequence integerValue]];
+}
+
+-(void)checkTagBindState:(CDVInvokedUrlCommand *)command {
+    NSDictionary* params = [command.arguments objectAtIndex:0];
+    NSNumber* sequence = params[@"sequence"];
+    NSString* tag = params[@"tag"];
+    
+    [JPUSHService validTag:tag completion:^(NSInteger iResCode, NSSet *iTags, NSInteger seq, BOOL isBind) {
+        NSMutableDictionary* dic = [[NSMutableDictionary alloc] init];
+        [dic setObject:sequence forKey:@"sequence"];
+        
+        CDVPluginResult* result;
+        
+        if (iResCode == 0) { 
+            dic[@"tag"] = tag;
+            [dic setObject:[NSNumber numberWithBool:isBind] forKey:@"isBind"];
+            result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:dic];
+        } else {
+            [dic setValue:[NSNumber numberWithUnsignedInteger:iResCode] forKey:@"code"];
+            result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsDictionary:dic];
+        }
+        
+        [self.commandDelegate sendPluginResult:result callbackId:command.callbackId];
+    } seq:[sequence integerValue]];
+}
+
+-(void)setAlias:(CDVInvokedUrlCommand*)command {
+    NSDictionary* params = [command.arguments objectAtIndex:0];
+    NSNumber* sequence = params[@"sequence"];
+    NSString* alias = params[@"alias"];
+    
+    [JPUSHService setAlias:alias completion:^(NSInteger iResCode, NSString *iAlias, NSInteger seq) {
+        NSMutableDictionary* dic = [[NSMutableDictionary alloc] init];
+        [dic setObject:sequence forKey:@"sequence"];
+        
+        CDVPluginResult* result;
+        
+        if (iResCode == 0) {
+            [dic setObject:iAlias forKey:@"alias"];
+            result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:dic];
+            
+        } else {
+            [dic setValue:[NSNumber numberWithUnsignedInteger:iResCode] forKey:@"code"];
+            result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsDictionary:dic];
+        }
+        
+        [self.commandDelegate sendPluginResult:result callbackId:command.callbackId];
+    } seq:[sequence integerValue]];
+}
+
+-(void)deleteAlias:(CDVInvokedUrlCommand*)command {
+    NSDictionary* params = [command.arguments objectAtIndex:0];
+    NSNumber* sequence = params[@"sequence"];
+    
+    [JPUSHService deleteAlias:^(NSInteger iResCode, NSString *iAlias, NSInteger seq) {
+        NSMutableDictionary* dic = [[NSMutableDictionary alloc] init];
+        [dic setObject:sequence forKey:@"sequence"];
+        
+        CDVPluginResult* result;
+        
+        if (iResCode == 0) {
+            result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:dic];
+        } else {
+            [dic setValue:[NSNumber numberWithUnsignedInteger:iResCode] forKey:@"code"];
+            result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsDictionary:dic];
+        }
+        
+        [self.commandDelegate sendPluginResult:result callbackId:command.callbackId];
+    } seq:[sequence integerValue]];
+}
+
+-(void)getAlias:(CDVInvokedUrlCommand*)command {
+    NSDictionary* params = [command.arguments objectAtIndex:0];
+    NSNumber* sequence = params[@"sequence"];
+    
+    [JPUSHService getAlias:^(NSInteger iResCode, NSString *iAlias, NSInteger seq) {
+        NSMutableDictionary* dic = [[NSMutableDictionary alloc] init];
+        [dic setObject:sequence forKey:@"sequence"];
+        
+        CDVPluginResult* result;
+        
+        if (iResCode == 0) {
+            [dic setObject:iAlias forKey:@"alias"];
+            result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:dic];
+        } else {
+            [dic setValue:[NSNumber numberWithUnsignedInteger:iResCode] forKey:@"code"];
+            result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsDictionary:dic];
+        }
+        
+        [self.commandDelegate sendPluginResult:result callbackId:command.callbackId];
+    } seq:[sequence integerValue]];
+}
+
+-(void)getRegistrationID:(CDVInvokedUrlCommand*)command{
+    NSString* registrationID = [JPUSHService registrationID];
+    [self handleResultWithValue:registrationID command:command];
+}
+
+-(void)startLogPageView:(CDVInvokedUrlCommand*)command{
+    NSString * pageName = [command argumentAtIndex:0];
+    [JPUSHService startLogPageView:pageName];
+}
+
+-(void)stopLogPageView:(CDVInvokedUrlCommand*)command{
+    NSString * pageName = [command argumentAtIndex:0];
+    [JPUSHService stopLogPageView:pageName];
+}
+
+-(void)beginLogPageView:(CDVInvokedUrlCommand*)command{
+    NSString *pageName = [command argumentAtIndex:0];
+    NSNumber *duration = [command argumentAtIndex:1];
+    [JPUSHService beginLogPageView:pageName duration:duration.intValue];
+}
+
+-(void)setBadge:(CDVInvokedUrlCommand*)command{
+    NSNumber *badge = [command argumentAtIndex:0];
+    [JPUSHService setBadge:badge.intValue];
+}
+
+-(void)resetBadge:(CDVInvokedUrlCommand*)command{
+    [JPUSHService resetBadge];
+}
+
+-(void)setApplicationIconBadgeNumber:(CDVInvokedUrlCommand*)command{
+    NSNumber *badge = [command argumentAtIndex:0];
+    [UIApplication sharedApplication].applicationIconBadgeNumber = badge.intValue;
+}
+
+-(void)getApplicationIconBadgeNumber:(CDVInvokedUrlCommand*)command {
+    NSInteger num = [UIApplication sharedApplication].applicationIconBadgeNumber;
+    NSNumber *number = [NSNumber numberWithInteger:num];
+    [self handleResultWithValue:number command:command];
+}
+
+-(void)setDebugModeFromIos:(CDVInvokedUrlCommand*)command{
+    [JPUSHService setDebugMode];
+}
+
+-(void)setLogOFF:(CDVInvokedUrlCommand*)command{
+    [JPUSHService setLogOFF];
+}
+
+-(void)crashLogON:(CDVInvokedUrlCommand*)command{
+    [JPUSHService crashLogON];
+}
+
+-(void)setLocalNotification:(CDVInvokedUrlCommand*)command{
+  NSNumber     *delay = [command argumentAtIndex:0];
+  NSString     *alert = [command argumentAtIndex:1];
+  NSNumber     *badge = [command argumentAtIndex:2];
+  NSString     *idKey = [command argumentAtIndex:3];
+  NSDictionary *userInfo  = [command argumentAtIndex:4];
+  
+  JPushNotificationContent *content = [[JPushNotificationContent alloc] init];
+  
+  if (alert) {
+    content.body = alert;
+  }
+  
+  if (badge) {
+    content.badge = badge;
+  }
+  
+  if (userInfo) {
+    content.userInfo = userInfo;
+  }
+  
+  JPushNotificationTrigger *trigger = [[JPushNotificationTrigger alloc] init];
+  // 由于 不支持 0 作为传入参数,在传入参数基础上添加一个极小的时间于 android 端保持一致。
+  if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 10.0) {
+    if (delay) {
+      trigger.timeInterval = [delay doubleValue] + 0.000001;
+    }
+  } else {
+    if (delay) {
+      trigger.fireDate = [NSDate dateWithTimeIntervalSinceNow:[[command argumentAtIndex:0] doubleValue] + 0.001];
+    }
+  }
+  
+  JPushNotificationRequest *request = [[JPushNotificationRequest alloc] init];
+  request.content = content;
+  request.trigger = trigger;
+  
+  if (idKey) {
+    request.requestIdentifier = idKey;
+  }
+  
+  request.completionHandler = ^(id result) {
+    NSLog(@"result");
+  };
+  
+  [JPUSHService addNotification:request];
+}
+
+-(void)deleteLocalNotificationWithIdentifierKey:(CDVInvokedUrlCommand*)command{
+    NSString *identifier = [command argumentAtIndex:0];
+    JPushNotificationIdentifier *jpid = [JPushNotificationIdentifier new];
+    jpid.identifiers = @[identifier];
+    [JPUSHService removeNotification:jpid];
+}
+
+-(void)clearAllLocalNotifications:(CDVInvokedUrlCommand*)command{
+    [JPUSHService removeNotification:nil];
+}
+
+-(void)setLocation:(CDVInvokedUrlCommand*)command{
+    NSNumber *latitude  = [command argumentAtIndex:0];
+    NSNumber *longitude = [command argumentAtIndex:1];
+    [JPUSHService setLatitude:latitude.doubleValue longitude:longitude.doubleValue];
+}
+
+-(void)getUserNotificationSettings:(CDVInvokedUrlCommand*)command{
+    if ([[UIDevice currentDevice].systemVersion floatValue] >= 10.0) {
+        UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
+        WEAK_SELF(weakSelf);
+        [center getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings * _Nonnull settings) {
+            NSMutableDictionary *dict = [NSMutableDictionary dictionary];
+            dict[@"authorizationStatus"]       = @(settings.authorizationStatus);
+            dict[@"soundSetting"]              = @(settings.soundSetting);
+            dict[@"badgeSetting"]              = @(settings.badgeSetting);
+            dict[@"alertSetting"]              = @(settings.alertSetting);
+            dict[@"notificationCenterSetting"] = @(settings.notificationCenterSetting);
+            dict[@"lockScreenSetting"]         = @(settings.lockScreenSetting);
+            dict[@"carPlaySetting"]            = @(settings.carPlaySetting);
+            dict[@"alertStyle"]                = @(settings.alertStyle);
+            [weakSelf handleResultWithValue:dict command:command];
+        }];
+    }else if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {
+        UIUserNotificationSettings *settings = [[UIApplication sharedApplication] currentUserNotificationSettings];
+        UIUserNotificationType type = settings.types;
+        NSNumber *number = [NSNumber numberWithInteger:type];
+        [self handleResultWithValue:number command:command];
+    }else{
+        UIRemoteNotificationType type = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];
+        NSNumber *number = [NSNumber numberWithInteger:type];
+        [self handleResultWithValue:number command:command];
+    }
+}
+
+#pragma mark - ios 10 APIs
+
+-(void)addDismissActions:(CDVInvokedUrlCommand*)command{
+    [self addActions:command dismiss:YES];
+}
+
+-(void)addNotificationActions:(CDVInvokedUrlCommand*)command{
+    [self addActions:command dismiss:NO];
+}
+
+-(void)addActions:(CDVInvokedUrlCommand*)command dismiss:(BOOL)dimiss{
+    NSArray *actionsData     = [command argumentAtIndex:0];
+    NSString *categoryId     = [command argumentAtIndex:1];
+    NSMutableArray *actions  = [NSMutableArray array];
+    for (NSDictionary *dict in actionsData) {
+        NSString *title      = dict[@"title"];
+        NSString *identifier = dict[@"identifier"];
+        NSString *option     = dict[@"option"];
+        NSString *type       = dict[@"type"];
+        if ([type isEqualToString:@"textInput"]) {
+            NSString *textInputButtonTitle = dict[@"textInputButtonTitle"];
+            NSString *textInputPlaceholder = dict[@"textInputPlaceholder"];
+            UNTextInputNotificationAction *inputAction = [UNTextInputNotificationAction actionWithIdentifier:identifier title:title options:option.integerValue textInputButtonTitle:textInputButtonTitle textInputPlaceholder:textInputPlaceholder];
+            [actions addObject:inputAction];
+        } else {
+            UNNotificationAction *action = [UNNotificationAction actionWithIdentifier:title title:title options:option.integerValue];
+            [actions addObject:action];
+        }
+    }
+    UNNotificationCategory *category;
+    if (dimiss) {
+        category = [UNNotificationCategory categoryWithIdentifier:categoryId
+                                                          actions:actions
+                                                intentIdentifiers:@[]
+                                                          options:UNNotificationCategoryOptionCustomDismissAction];
+    } else {
+        category = [UNNotificationCategory categoryWithIdentifier:categoryId
+                                                          actions:actions
+                                                intentIdentifiers:@[]
+                                                          options:UNNotificationCategoryOptionNone];
+    }
+    [[UNUserNotificationCenter currentNotificationCenter] setNotificationCategories:[NSSet setWithObject:category]];
+}
+
+#pragma mark - 内部方法
+
++(void)setupJPushSDK:(NSDictionary*)userInfo{
+    NSString *plistPath = [[NSBundle mainBundle] pathForResource:JPushConfig_FileName ofType:@"plist"];
+    if (plistPath == nil) {
+        NSLog(@"error: PushConfig.plist not found");
+        assert(0);
+    }
+
+    NSMutableDictionary *plistData = [[NSMutableDictionary alloc] initWithContentsOfFile:plistPath];
+    NSString *appkey       = [plistData valueForKey:JPushConfig_Appkey];
+    NSString *channel      = [plistData valueForKey:JPushConfig_Channel];
+    NSNumber *isProduction = [plistData valueForKey:JPushConfig_IsProduction];
+    NSNumber *isIDFA       = [plistData valueForKey:JPushConfig_IsIDFA];
+
+    NSString *advertisingId = nil;
+    if(isIDFA.boolValue) {
+        advertisingId = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
+    }
+    [JPUSHService setupWithOption:userInfo
+                           appKey:appkey
+                          channel:channel
+                 apsForProduction:[isProduction boolValue]
+            advertisingIdentifier:advertisingId];
+}
+
+#pragma mark 将参数返回给js
+-(void)handleResultWithValue:(id)value command:(CDVInvokedUrlCommand*)command {
+    CDVPluginResult *result = nil;
+    CDVCommandStatus status = CDVCommandStatus_OK;
+
+    if ([value isKindOfClass:[NSString class]]) {
+        value = [value stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
+    } else if ([value isKindOfClass:[NSNull class]]) {
+        value = nil;
+    }
+
+    if ([value isKindOfClass:[NSObject class]]) {
+        result = [CDVPluginResult resultWithStatus:status messageAsString:value];//NSObject 类型都可以
+    } else {
+        NSLog(@"Cordova callback block returned unrecognized type: %@", NSStringFromClass([value class]));
+        result = nil;
+    }
+
+    if (!result) {
+        result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR];
+    }
+    [self.commandDelegate sendPluginResult:result callbackId:command.callbackId];
+}
+
+-(void)networkDidReceiveMessage:(NSNotification *)notification {
+    if (notification && notification.userInfo) {
+        [JPushPlugin fireDocumentEvent:JPushDocumentEvent_ReceiveMessage
+                              jsString:[notification.userInfo toJsonString]];
+    }
+}
+
+-(void)receiveLocalNotification:(NSNotification *)notification {
+  if (notification && notification.object) {
+    [JPushPlugin fireDocumentEvent:JPushDocumentEvent_ReceiveLocalNotification
+                          jsString:[notification.object toJsonString]];
+  }
+}
+@end
diff --git a/platforms/ios/dlapp/Plugins/jpush-phonegap-plugin/jpush-ios-3.2.1.a b/platforms/ios/dlapp/Plugins/jpush-phonegap-plugin/jpush-ios-3.2.1.a
new file mode 100755
index 0000000..6aa3beb
--- /dev/null
+++ b/platforms/ios/dlapp/Plugins/jpush-phonegap-plugin/jpush-ios-3.2.1.a
Binary files differ
diff --git a/platforms/ios/dlapp/Resources/JPushConfig.plist b/platforms/ios/dlapp/Resources/JPushConfig.plist
new file mode 100644
index 0000000..8d4a326
--- /dev/null
+++ b/platforms/ios/dlapp/Resources/JPushConfig.plist
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>Appkey</key>
+	<string>your_jpush_appkey</string>
+	<key>Channel</key>
+	<string>channel name</string>
+	<key>IsProduction</key>
+	<false/>
+	<key>IsIDFA</key>
+	<false/>
+	<key>Delay</key>
+	<false/>
+</dict>
+</plist>
\ No newline at end of file
diff --git a/platforms/ios/dlapp/config.xml b/platforms/ios/dlapp/config.xml
index ed6c95a..e4a0567 100755
--- a/platforms/ios/dlapp/config.xml
+++ b/platforms/ios/dlapp/config.xml
@@ -55,6 +55,9 @@
     <feature name="ThemeableBrowser">
         <param name="ios-package" value="CDVThemeableBrowser" />
     </feature>
+    <feature name="JPushPlugin">
+        <param name="ios-package" value="JPushPlugin" />
+    </feature>
     <name short="大理市民卡">dlapp</name>
     <description>
         A sample Apache Cordova application that responds to the deviceready event.
diff --git a/platforms/ios/dlapp/dlapp-Info.plist b/platforms/ios/dlapp/dlapp-Info.plist
index 1e0b815..67584e9 100644
--- a/platforms/ios/dlapp/dlapp-Info.plist
+++ b/platforms/ios/dlapp/dlapp-Info.plist
@@ -63,5 +63,9 @@
 		<string>UIInterfaceOrientationPortrait</string>
 		<string>UIInterfaceOrientationPortraitUpsideDown</string>
 	</array>
+	<key>UIBackgroundModes</key>
+	<array>
+		<string>remote-notification</string>
+	</array>
 </dict>
 </plist>
\ No newline at end of file
diff --git a/platforms/ios/frameworks.json b/platforms/ios/frameworks.json
index be943cc..d1a9e95 100644
--- a/platforms/ios/frameworks.json
+++ b/platforms/ios/frameworks.json
@@ -1,8 +1,17 @@
 {
-    "Security.framework": 2,
-    "SystemConfiguration.framework": 1,
+    "Security.framework": 3,
+    "SystemConfiguration.framework": 2,
     "LocalAuthentication.framework": 1,
     "ImageIO.framework": 1,
     "CoreLocation.framework": 1,
-    "AVFoundation.framework": 1
+    "AVFoundation.framework": 1,
+    "CFNetwork.framework": 1,
+    "CoreFoundation.framework": 1,
+    "CoreTelephony.framework": 1,
+    "Foundation.framework": 1,
+    "UIKit.framework": 1,
+    "libz.tbd": 1,
+    "AdSupport.framework": 1,
+    "UserNotifications.framework": 1,
+    "libresolv.tbd": 1
 }
\ No newline at end of file
diff --git a/platforms/ios/ios.json b/platforms/ios/ios.json
index ba7facb..8bd066d 100644
--- a/platforms/ios/ios.json
+++ b/platforms/ios/ios.json
@@ -63,6 +63,10 @@
             {
               "xml": "<feature name=\"ThemeableBrowser\"><param name=\"ios-package\" value=\"CDVThemeableBrowser\" /></feature>",
               "count": 1
+            },
+            {
+              "xml": "<feature name=\"JPushPlugin\"><param name=\"ios-package\" value=\"JPushPlugin\" /></feature>",
+              "count": 1
             }
           ]
         }
@@ -86,6 +90,42 @@
               "mode": "merge",
               "id": "config.xml"
             }
+          ],
+          "UIBackgroundModes": [
+            {
+              "xml": "<array><string>remote-notification</string></array>",
+              "count": 1
+            }
+          ]
+        }
+      },
+      "*-Debug.plist": {
+        "parents": {
+          "aps-environment": [
+            {
+              "xml": "<string>development</string>",
+              "count": 1
+            }
+          ]
+        }
+      },
+      "*-Release.plist": {
+        "parents": {
+          "aps-environment": [
+            {
+              "xml": "<string>production</string>",
+              "count": 1
+            }
+          ]
+        }
+      },
+      "*JPushConfig.plist": {
+        "parents": {
+          "Appkey": [
+            {
+              "xml": "<string>your_jpush_appkey</string>",
+              "count": 1
+            }
           ]
         }
       }
@@ -132,6 +172,14 @@
     },
     "cordova-plugin-themeablebrowser": {
       "PACKAGE_NAME": "$(PRODUCT_BUNDLE_IDENTIFIER)"
+    },
+    "cordova-plugin-jcore": {
+      "PACKAGE_NAME": "$(PRODUCT_BUNDLE_IDENTIFIER)"
+    },
+    "jpush-phonegap-plugin": {
+      "APP_KEY": "your_jpush_appkey",
+      "CHANNEL": "developer-default",
+      "PACKAGE_NAME": "$(PRODUCT_BUNDLE_IDENTIFIER)"
     }
   },
   "dependent_plugins": {},
@@ -455,6 +503,14 @@
       "clobbers": [
         "cordova.ThemeableBrowser"
       ]
+    },
+    {
+      "id": "jpush-phonegap-plugin.JPushPlugin",
+      "file": "plugins/jpush-phonegap-plugin/www/JPushPlugin.js",
+      "pluginId": "jpush-phonegap-plugin",
+      "clobbers": [
+        "JPush"
+      ]
     }
   ],
   "plugin_metadata": {
@@ -470,6 +526,8 @@
     "cordova-plugin-camera": "4.0.3",
     "cordova-plugin-inappbrowser": "3.0.0",
     "cordova-plugin-device": "2.0.2",
-    "cordova-plugin-themeablebrowser": "0.2.17"
+    "cordova-plugin-themeablebrowser": "0.2.17",
+    "cordova-plugin-jcore": "1.3.0",
+    "jpush-phonegap-plugin": "3.7.2"
   }
 }
diff --git a/platforms/ios/platform_www/cordova_plugins.js b/platforms/ios/platform_www/cordova_plugins.js
index 79df2d5..2a5d5a5 100644
--- a/platforms/ios/platform_www/cordova_plugins.js
+++ b/platforms/ios/platform_www/cordova_plugins.js
@@ -319,6 +319,14 @@
       "clobbers": [
         "cordova.ThemeableBrowser"
       ]
+    },
+    {
+      "id": "jpush-phonegap-plugin.JPushPlugin",
+      "file": "plugins/jpush-phonegap-plugin/www/JPushPlugin.js",
+      "pluginId": "jpush-phonegap-plugin",
+      "clobbers": [
+        "JPush"
+      ]
     }
   ];
   module.exports.metadata = {
@@ -334,6 +342,8 @@
     "cordova-plugin-camera": "4.0.3",
     "cordova-plugin-inappbrowser": "3.0.0",
     "cordova-plugin-device": "2.0.2",
-    "cordova-plugin-themeablebrowser": "0.2.17"
+    "cordova-plugin-themeablebrowser": "0.2.17",
+    "cordova-plugin-jcore": "1.3.0",
+    "jpush-phonegap-plugin": "3.7.2"
   };
 });
\ No newline at end of file
diff --git a/platforms/ios/platform_www/plugins/jpush-phonegap-plugin/www/JPushPlugin.js b/platforms/ios/platform_www/plugins/jpush-phonegap-plugin/www/JPushPlugin.js
new file mode 100644
index 0000000..773b885
--- /dev/null
+++ b/platforms/ios/platform_www/plugins/jpush-phonegap-plugin/www/JPushPlugin.js
@@ -0,0 +1,489 @@
+cordova.define("jpush-phonegap-plugin.JPushPlugin", function(require, exports, module) {
+var JPushPlugin = function() {};
+
+// private plugin function
+
+JPushPlugin.prototype.receiveMessage = {};
+JPushPlugin.prototype.openNotification = {};
+JPushPlugin.prototype.receiveNotification = {};
+
+JPushPlugin.prototype.isPlatformIOS = function() {
+  return (
+    device.platform === "iPhone" ||
+    device.platform === "iPad" ||
+    device.platform === "iPod touch" ||
+    device.platform === "iOS"
+  );
+};
+
+JPushPlugin.prototype.errorCallback = function(msg) {
+  console.log("JPush Callback Error: " + msg);
+};
+
+JPushPlugin.prototype.callNative = function(
+  name,
+  args,
+  successCallback,
+  errorCallback
+) {
+  if (errorCallback) {
+    cordova.exec(successCallback, errorCallback, "JPushPlugin", name, args);
+  } else {
+    cordova.exec(
+      successCallback,
+      this.errorCallback,
+      "JPushPlugin",
+      name,
+      args
+    );
+  }
+};
+
+// Common methods
+JPushPlugin.prototype.init = function() {
+  if (this.isPlatformIOS()) {
+    this.callNative("initial", [], null);
+  } else {
+    this.callNative("init", [], null);
+  }
+};
+
+JPushPlugin.prototype.setDebugMode = function(mode) {
+  if (device.platform === "Android") {
+    this.callNative("setDebugMode", [mode], null);
+  } else {
+    if (mode === true) {
+      this.setDebugModeFromIos();
+    } else {
+      this.setLogOFF();
+    }
+  }
+};
+
+JPushPlugin.prototype.getRegistrationID = function(successCallback) {
+  this.callNative("getRegistrationID", [], successCallback);
+};
+
+JPushPlugin.prototype.stopPush = function() {
+  this.callNative("stopPush", [], null);
+};
+
+JPushPlugin.prototype.resumePush = function() {
+  this.callNative("resumePush", [], null);
+};
+
+JPushPlugin.prototype.isPushStopped = function(successCallback) {
+  this.callNative("isPushStopped", [], successCallback);
+};
+
+JPushPlugin.prototype.clearLocalNotifications = function() {
+  if (device.platform === "Android") {
+    this.callNative("clearLocalNotifications", [], null);
+  } else {
+    this.clearAllLocalNotifications();
+  }
+};
+
+/**
+ * 设置标签。
+ * 注意:该接口是覆盖逻辑,而不是增量逻辑。即新的调用会覆盖之前的设置。
+ *
+ * @param params = { 'sequence': number, 'tags': ['tag1', 'tag2'] }
+ */
+JPushPlugin.prototype.setTags = function(
+  params,
+  successCallback,
+  errorCallback
+) {
+  this.callNative("setTags", [params], successCallback, errorCallback);
+};
+
+/**
+ * 新增标签。
+ *
+ * @param params = { 'sequence': number, 'tags': ['tag1', 'tag2'] }
+ */
+JPushPlugin.prototype.addTags = function(
+  params,
+  successCallback,
+  errorCallback
+) {
+  this.callNative("addTags", [params], successCallback, errorCallback);
+};
+
+/**
+ * 删除指定标签。
+ *
+ * @param params = { 'sequence': number, 'tags': ['tag1', 'tag2'] }
+ */
+JPushPlugin.prototype.deleteTags = function(
+  params,
+  successCallback,
+  errorCallback
+) {
+  this.callNative("deleteTags", [params], successCallback, errorCallback);
+};
+
+/**
+ * 清除所有标签。
+ *
+ * @param params = { 'sequence': number }
+ */
+JPushPlugin.prototype.cleanTags = function(
+  params,
+  successCallback,
+  errorCallback
+) {
+  this.callNative("cleanTags", [params], successCallback, errorCallback);
+};
+
+/**
+ * 查询所有标签。
+ *
+ * @param params = { 'sequence': number }
+ */
+JPushPlugin.prototype.getAllTags = function(
+  params,
+  successCallback,
+  errorCallback
+) {
+  this.callNative("getAllTags", [params], successCallback, errorCallback);
+};
+
+/**
+ * 查询指定标签与当前用户的绑定状态。
+ *
+ * @param params = { 'sequence': number, 'tag': string }
+ */
+JPushPlugin.prototype.checkTagBindState = function(
+  params,
+  successCallback,
+  errorCallback
+) {
+  this.callNative(
+    "checkTagBindState",
+    [params],
+    successCallback,
+    errorCallback
+  );
+};
+
+/**
+ * 设置别名。
+ * 注意:该接口是覆盖逻辑,而不是增量逻辑。即新的调用会覆盖之前的设置。
+ *
+ * @param params = { 'sequence': number, 'alias': string }
+ */
+JPushPlugin.prototype.setAlias = function(
+  params,
+  successCallback,
+  errorCallback
+) {
+  this.callNative("setAlias", [params], successCallback, errorCallback);
+};
+
+/**
+ * 删除别名。
+ *
+ * @param params = { 'sequence': number }
+ */
+JPushPlugin.prototype.deleteAlias = function(
+  params,
+  successCallback,
+  errorCallback
+) {
+  this.callNative("deleteAlias", [params], successCallback, errorCallback);
+};
+
+/**
+ * 查询当前绑定的别名。
+ *
+ * @param params = { 'sequence': number }
+ */
+JPushPlugin.prototype.getAlias = function(
+  params,
+  successCallback,
+  errorCallback
+) {
+  this.callNative("getAlias", [params], successCallback, errorCallback);
+};
+
+// 判断系统设置中是否对本应用启用通知。
+// iOS: 返回值如果大于 0,代表通知开启;0: 通知关闭。
+// UIRemoteNotificationTypeNone = 0,
+// UIRemoteNotificationTypeBadge = 1 << 0,
+// UIRemoteNotificationTypeSound = 1 << 1,
+// UIRemoteNotificationTypeAlert = 1 << 2,
+// UIRemoteNotificationTypeNewsstandContentAvailability = 1 << 3,
+// Android: 返回值 1 代表通知启用;0: 通知关闭。
+JPushPlugin.prototype.getUserNotificationSettings = function(successCallback) {
+  if (this.isPlatformIOS()) {
+    this.callNative("getUserNotificationSettings", [], successCallback);
+  } else if (device.platform === "Android") {
+    this.callNative("areNotificationEnabled", [], successCallback);
+  }
+};
+
+// iOS methods
+
+JPushPlugin.prototype.startJPushSDK = function() {
+  this.callNative("startJPushSDK", [], null);
+};
+
+JPushPlugin.prototype.setBadge = function(value) {
+  if (this.isPlatformIOS()) {
+    this.callNative("setBadge", [value], null);
+  }
+};
+
+JPushPlugin.prototype.resetBadge = function() {
+  if (this.isPlatformIOS()) {
+    this.callNative("resetBadge", [], null);
+  }
+};
+
+JPushPlugin.prototype.setDebugModeFromIos = function() {
+  if (this.isPlatformIOS()) {
+    this.callNative("setDebugModeFromIos", [], null);
+  }
+};
+
+JPushPlugin.prototype.setLogOFF = function() {
+  if (this.isPlatformIOS()) {
+    this.callNative("setLogOFF", [], null);
+  }
+};
+
+JPushPlugin.prototype.setCrashLogON = function() {
+  if (this.isPlatformIOS()) {
+    this.callNative("crashLogON", [], null);
+  }
+};
+
+JPushPlugin.prototype.addLocalNotificationForIOS = function(
+  delayTime,
+  content,
+  badge,
+  notificationID,
+  extras
+) {
+  if (this.isPlatformIOS()) {
+    this.callNative(
+      "setLocalNotification",
+      [delayTime, content, badge, notificationID, extras],
+      null
+    );
+  }
+};
+
+JPushPlugin.prototype.deleteLocalNotificationWithIdentifierKeyInIOS = function(
+  identifierKey
+) {
+  if (this.isPlatformIOS()) {
+    this.callNative(
+      "deleteLocalNotificationWithIdentifierKey",
+      [identifierKey],
+      null
+    );
+  }
+};
+
+JPushPlugin.prototype.clearAllLocalNotifications = function() {
+  if (this.isPlatformIOS()) {
+    this.callNative("clearAllLocalNotifications", [], null);
+  }
+};
+
+JPushPlugin.prototype.setLocation = function(latitude, longitude) {
+  if (this.isPlatformIOS()) {
+    this.callNative("setLocation", [latitude, longitude], null);
+  }
+};
+
+JPushPlugin.prototype.startLogPageView = function(pageName) {
+  if (this.isPlatformIOS()) {
+    this.callNative("startLogPageView", [pageName], null);
+  }
+};
+
+JPushPlugin.prototype.stopLogPageView = function(pageName) {
+  if (this.isPlatformIOS()) {
+    this.callNative("stopLogPageView", [pageName], null);
+  }
+};
+
+JPushPlugin.prototype.beginLogPageView = function(pageName, duration) {
+  if (this.isPlatformIOS()) {
+    this.callNative("beginLogPageView", [pageName, duration], null);
+  }
+};
+
+JPushPlugin.prototype.setApplicationIconBadgeNumber = function(badge) {
+  if (this.isPlatformIOS()) {
+    this.callNative("setApplicationIconBadgeNumber", [badge], null);
+  }
+};
+
+JPushPlugin.prototype.getApplicationIconBadgeNumber = function(callback) {
+  if (this.isPlatformIOS()) {
+    this.callNative("getApplicationIconBadgeNumber", [], callback);
+  }
+};
+
+JPushPlugin.prototype.addDismissActions = function(actions, categoryId) {
+  this.callNative("addDismissActions", [actions, categoryId]);
+};
+
+JPushPlugin.prototype.addNotificationActions = function(actions, categoryId) {
+  this.callNative("addNotificationActions", [actions, categoryId]);
+};
+
+// Android methods
+JPushPlugin.prototype.getConnectionState = function(successCallback) {
+  if (device.platform === "Android") {
+    this.callNative("getConnectionState", [], successCallback);
+  }
+};
+
+JPushPlugin.prototype.setBasicPushNotificationBuilder = function() {
+  if (device.platform === "Android") {
+    this.callNative("setBasicPushNotificationBuilder", [], null);
+  }
+};
+
+JPushPlugin.prototype.setCustomPushNotificationBuilder = function() {
+  if (device.platform === "Android") {
+    this.callNative("setCustomPushNotificationBuilder", [], null);
+  }
+};
+
+JPushPlugin.prototype.receiveRegistrationIdInAndroidCallback = function(data) {
+  if (device.platform === "Android") {
+    data = JSON.stringify(data);
+    var event = JSON.parse(data);
+    cordova.fireDocumentEvent("jpush.receiveRegistrationId", event);
+  }
+};
+
+JPushPlugin.prototype.receiveMessageInAndroidCallback = function(data) {
+  data = JSON.stringify(data);
+  this.receiveMessage = JSON.parse(data);
+  cordova.fireDocumentEvent("jpush.receiveMessage", this.receiveMessage);
+};
+
+JPushPlugin.prototype.openNotificationInAndroidCallback = function(data) {
+  data = JSON.stringify(data);
+  this.openNotification = JSON.parse(data);
+  cordova.fireDocumentEvent("jpush.openNotification", this.openNotification);
+};
+
+JPushPlugin.prototype.receiveNotificationInAndroidCallback = function(data) {
+  data = JSON.stringify(data);
+  this.receiveNotification = JSON.parse(data);
+  cordova.fireDocumentEvent(
+    "jpush.receiveNotification",
+    this.receiveNotification
+  );
+};
+
+JPushPlugin.prototype.clearAllNotification = function() {
+  if (device.platform === "Android") {
+    this.callNative("clearAllNotification", [], null);
+  }
+};
+
+JPushPlugin.prototype.clearNotificationById = function(id) {
+  if (device.platform === "Android") {
+    this.callNative("clearNotificationById", [id], null);
+  }
+};
+
+JPushPlugin.prototype.setLatestNotificationNum = function(num) {
+  if (device.platform === "Android") {
+    this.callNative("setLatestNotificationNum", [num], null);
+  }
+};
+
+JPushPlugin.prototype.addLocalNotification = function(
+  builderId,
+  content,
+  title,
+  notificationID,
+  broadcastTime,
+  extras
+) {
+  if (device.platform === "Android") {
+    this.callNative(
+      "addLocalNotification",
+      [builderId, content, title, notificationID, broadcastTime, extras],
+      null
+    );
+  }
+};
+
+JPushPlugin.prototype.removeLocalNotification = function(notificationID) {
+  if (device.platform === "Android") {
+    this.callNative("removeLocalNotification", [notificationID], null);
+  }
+};
+
+JPushPlugin.prototype.reportNotificationOpened = function(msgID) {
+  if (device.platform === "Android") {
+    this.callNative("reportNotificationOpened", [msgID], null);
+  }
+};
+
+/**
+ * 用于在 Android 6.0 及以上系统,申请一些权限
+ * 具体可看:http://docs.jpush.io/client/android_api/#android-60
+ */
+JPushPlugin.prototype.requestPermission = function() {
+  if (device.platform === "Android") {
+    this.callNative("requestPermission", [], null);
+  }
+};
+
+JPushPlugin.prototype.setSilenceTime = function(
+  startHour,
+  startMinute,
+  endHour,
+  endMinute
+) {
+  if (device.platform === "Android") {
+    this.callNative(
+      "setSilenceTime",
+      [startHour, startMinute, endHour, endMinute],
+      null
+    );
+  }
+};
+
+JPushPlugin.prototype.setPushTime = function(weekdays, startHour, endHour) {
+  if (device.platform === "Android") {
+    this.callNative("setPushTime", [weekdays, startHour, endHour], null);
+  }
+};
+
+JPushPlugin.prototype.setGeofenceInterval = function(interval) {
+  if (device.platform === "Android") {
+    this.callNative("setGeofenceInterval", [interval], null);
+  }
+};
+
+JPushPlugin.prototype.setMaxGeofenceNumber = function(maxNumber) {
+  if (device.platform === "Android") {
+    this.callNative("setMaxGeofenceNumber", [maxNumber], null);
+  }
+};
+
+if (!window.plugins) {
+  window.plugins = {};
+}
+
+if (!window.plugins.jPushPlugin) {
+  window.plugins.jPushPlugin = new JPushPlugin();
+}
+
+module.exports = new JPushPlugin();
+
+});
diff --git a/platforms/ios/pods-debug.xcconfig b/platforms/ios/pods-debug.xcconfig
index 12c7065..5bd06f2 100644
--- a/platforms/ios/pods-debug.xcconfig
+++ b/platforms/ios/pods-debug.xcconfig
@@ -1,20 +1,2 @@
-//
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-//  KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-//
-
 // DO NOT MODIFY -- auto-generated by Apache Cordova
+#include "Pods/Target Support Files/Pods-dlapp/Pods-dlapp.debug.xcconfig"
\ No newline at end of file
diff --git a/platforms/ios/pods-release.xcconfig b/platforms/ios/pods-release.xcconfig
index 12e2b13..79d2243 100644
--- a/platforms/ios/pods-release.xcconfig
+++ b/platforms/ios/pods-release.xcconfig
@@ -1,20 +1,2 @@
-//
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-//  KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-//
-
-// DO NOT MODIFY -- auto-generated by Apache Cordova
\ No newline at end of file
+// DO NOT MODIFY -- auto-generated by Apache Cordova
+#include "Pods/Target Support Files/Pods-dlapp/Pods-dlapp.release.xcconfig"
\ No newline at end of file