diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 6ae1079e..1704ba4b 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -4,6 +4,7 @@ stages:
- build-artifacts
- release-artifacts
- notification
+ - clean-up
variables:
LC_ALL: "en_US.UTF-8"
@@ -61,7 +62,7 @@ variables:
before_script:
- ls -li
- export NEXT_VERSION="$(cat app_new.version)"
- - flutter pub get
+# - flutter pub get
- bundle install --gemfile android/Gemfile --quiet
cache:
paths:
@@ -72,7 +73,7 @@ variables:
before_script:
- ls -li
- export NEXT_VERSION="$(cat app_new.version)"
- - flutter pub get
+# - flutter pub get
- bundle install --gemfile ios/Gemfile --quiet
cache:
paths:
@@ -204,4 +205,11 @@ notify_failure:
script:
- bash notify.sh failure
allow_failure: true
- when: on_failure
\ No newline at end of file
+ when: on_failure
+
+clean_up:
+ stage: clean-up
+ extends: .build_rule
+ script:
+ - git reset --hard
+ when: always
\ No newline at end of file
diff --git a/android/app/build.gradle b/android/app/build.gradle
index baeb56c7..587f16e3 100755
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -23,6 +23,9 @@ if (flutterVersionName == null) {
}
apply plugin: 'com.android.application'
+//
+apply plugin: 'com.google.gms.google-services'
+//
apply plugin: 'kotlin-android'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
apply plugin: 'com.android.application'
@@ -304,6 +307,8 @@ dependencies {
implementation 'cn.jiguang.sdk.plugin:vivo:5.2.3'
// Umeng统计
+ //
implementation 'com.umeng.umsdk:common:9.7.9'
implementation 'com.umeng.umsdk:asms:1.8.5'
+ //
}
diff --git a/android/app/google-services.json b/android/app/google-services.json
index cbcbc271..c2bc204a 100755
--- a/android/app/google-services.json
+++ b/android/app/google-services.json
@@ -2,14 +2,14 @@
"project_info": {
"project_number": "281500445726",
"project_id": "skychip2023-ecdff",
- "storage_bucket": "skychip2023-ecdff.appspot.com"
+ "storage_bucket": "skychip2023-ecdff.firebasestorage.app"
},
"client": [
{
"client_info": {
- "mobilesdk_app_id": "1:281500445726:android:ddf52ac7b7f83cf5c4d20f",
+ "mobilesdk_app_id": "1:281500445726:android:468195b9cc68dd6cc4d20f",
"android_client_info": {
- "package_name": "com.skychip.lock"
+ "package_name": "com.starlock.lock.local"
}
},
"oauth_client": [],
diff --git a/android/app/src/main/kotlin/com/skychip/lock/App.kt b/android/app/src/main/kotlin/com/skychip/lock/App.kt
index fb6c753d..06adbaf6 100755
--- a/android/app/src/main/kotlin/com/skychip/lock/App.kt
+++ b/android/app/src/main/kotlin/com/skychip/lock/App.kt
@@ -2,15 +2,11 @@ package com.skychip.lock
import io.flutter.app.FlutterApplication
import android.util.Log
-import com.umeng.commonsdk.UMConfigure;
class App : FlutterApplication() {
override fun onCreate() {
super.onCreate()
-// UMConfigure.setLogEnabled(true);
- //友盟预初始化
-// UMConfigure.preInit(getApplicationContext(), "671244cf80464b33f6df9648", "Product");
Log.d("MyApplication", "Application has started")
}
}
\ No newline at end of file
diff --git a/android/app/src/main/kotlin/com/skychip/lock/MainActivity.kt b/android/app/src/main/kotlin/com/skychip/lock/MainActivity.kt
index c788ca3c..76fc8e66 100755
--- a/android/app/src/main/kotlin/com/skychip/lock/MainActivity.kt
+++ b/android/app/src/main/kotlin/com/skychip/lock/MainActivity.kt
@@ -12,16 +12,10 @@ import android.bluetooth.BluetoothAdapter;
import androidx.core.content.FileProvider
import java.io.File
-import com.umeng.commonsdk.UMConfigure
-
class MainActivity : FlutterActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
GeneratedPluginRegistrant.registerWith(flutterEngine!!)
-
- // 初始化 Umeng SDK
-// UMConfigure.init(this, "671244cf80464b33f6df9648", "Product", UMConfigure.DEVICE_TYPE_PHONE, null)
-
MethodChannel(
flutterEngine?.dartExecutor!!.binaryMessenger,
"starLockFlutterSend"
diff --git a/android/app/src/sky/google-services.json b/android/app/src/sky/google-services.json
new file mode 100644
index 00000000..a712cf64
--- /dev/null
+++ b/android/app/src/sky/google-services.json
@@ -0,0 +1,48 @@
+{
+ "project_info": {
+ "project_number": "281500445726",
+ "project_id": "skychip2023-ecdff",
+ "storage_bucket": "skychip2023-ecdff.firebasestorage.app"
+ },
+ "client": [
+ {
+ "client_info": {
+ "mobilesdk_app_id": "1:281500445726:android:ddf52ac7b7f83cf5c4d20f",
+ "android_client_info": {
+ "package_name": "com.skychip.lock"
+ }
+ },
+ "oauth_client": [],
+ "api_key": [
+ {
+ "current_key": "AIzaSyC-3-ABWuy9LrYyAw_KxDRto4DanQ0sq9g"
+ }
+ ],
+ "services": {
+ "appinvite_service": {
+ "other_platform_oauth_client": []
+ }
+ }
+ },
+ {
+ "client_info": {
+ "mobilesdk_app_id": "1:281500445726:android:468195b9cc68dd6cc4d20f",
+ "android_client_info": {
+ "package_name": "com.starlock.lock.local"
+ }
+ },
+ "oauth_client": [],
+ "api_key": [
+ {
+ "current_key": "AIzaSyC-3-ABWuy9LrYyAw_KxDRto4DanQ0sq9g"
+ }
+ ],
+ "services": {
+ "appinvite_service": {
+ "other_platform_oauth_client": []
+ }
+ }
+ }
+ ],
+ "configuration_version": "1"
+}
\ No newline at end of file
diff --git a/android/app/src/xhj/google-services.json b/android/app/src/xhj/google-services.json
new file mode 100644
index 00000000..791f2d92
--- /dev/null
+++ b/android/app/src/xhj/google-services.json
@@ -0,0 +1,48 @@
+{
+ "project_info": {
+ "project_number": "28150044todo",
+ "project_id": "skychip2023-etodo",
+ "storage_bucket": "skychip2023-etodo.firebasestorage.app"
+ },
+ "client": [
+ {
+ "client_info": {
+ "mobilesdk_app_id": "1:281500445726:android:ddf52ac7b7f83cf5c4todo",
+ "android_client_info": {
+ "package_name": "com.xhjcn.lock"
+ }
+ },
+ "oauth_client": [],
+ "api_key": [
+ {
+ "current_key": "AIzaSyC-3-ABWuy9LrYyAw_KxDRto4DanQ0todo"
+ }
+ ],
+ "services": {
+ "appinvite_service": {
+ "other_platform_oauth_client": []
+ }
+ }
+ },
+ {
+ "client_info": {
+ "mobilesdk_app_id": "1:281500445726:android:468195b9cc68dd6cc4todo",
+ "android_client_info": {
+ "package_name": "com.xhjcn.lock.local"
+ }
+ },
+ "oauth_client": [],
+ "api_key": [
+ {
+ "current_key": "AIzaSyC-3-ABWuy9LrYyAw_KxDRto4Dank9todo"
+ }
+ ],
+ "services": {
+ "appinvite_service": {
+ "other_platform_oauth_client": []
+ }
+ }
+ }
+ ],
+ "configuration_version": "1"
+}
\ No newline at end of file
diff --git a/android/build.sh b/android/build.sh
index 8e672739..6482e5a0 100755
--- a/android/build.sh
+++ b/android/build.sh
@@ -12,12 +12,14 @@ regex='^v[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z]+\.[0-9]+)?$'
if [[ "${ENV_BUILD_BRANCH}" == "canary_release" ]]; then
echo "===build canary_release: ${NEXT_VERSION}"
export ENV_BUILD_TAG=${NEXT_VERSION}
- bundle exec fastlane release flavor:xhj --verbose
- bundle exec fastlane release flavor:sky --verbose
+ bundle exec fastlane release_apk flavor:xhj --verbose
+ bundle exec fastlane release_apk flavor:sky --verbose
elif [[ $ENV_BUILD_TAG =~ $regex ]]; then
echo "===build release===$ENV_BUILD_TAG"
- bundle exec fastlane release flavor:xhj --verbose
- bundle exec fastlane release flavor:sky --verbose
+ bundle exec fastlane release_apk flavor:xhj --verbose
+ bundle exec fastlane release_apk flavor:sky --verbose
+ bundle exec fastlane release_bundle flavor:xhj --verbose
+ bundle exec fastlane release_bundle flavor:sky --verbose
elif [[ "${ENV_BUILD_BRANCH}" == "develop" ]]; then
echo "===build dev===${NEXT_VERSION}"
bundle exec fastlane beta flavor:xhj env:dev --verbose
diff --git a/android/fastlane/Fastfile b/android/fastlane/Fastfile
index 3930650f..a99f62f0 100644
--- a/android/fastlane/Fastfile
+++ b/android/fastlane/Fastfile
@@ -67,7 +67,9 @@ platform :android do
commit_hash = last_git_commit
short_hash = commit_hash[:abbreviated_commit_hash]
print_log "last_git_commit_short_hash #{short_hash}"
+ remove_zone_pre_build(zone:"com")
Dir.chdir "../.." do
+ sh("flutter","pub","get")
sh("flutter", "build", "apk", "--no-tree-shake-icons", "--release", "--flavor", "#{flavor}_#{env}", "-t", "lib/main_#{flavor}_#{env}.dart", "--build-number=#{build_number}", "--build-name=#{build_version}")
end
old_file_path = File.join($path_apk_output_dir, "app-#{flavor}_#{env}-release.apk")
@@ -82,7 +84,7 @@ platform :android do
end
desc "Build & upload a new version to Gitlab Release"
- lane :release do |options|
+ lane :release_apk do |options|
flavor = options[:flavor]
UI.user_error!("flavor is required") unless flavor
print_log "build flavor for: #{flavor}"
@@ -93,13 +95,31 @@ platform :android do
commit_hash = last_git_commit
short_hash = commit_hash[:abbreviated_commit_hash]
print_log "last_git_commit_short_hash #{short_hash}"
+ remove_zone_pre_build(zone:"com")
Dir.chdir "../.." do
+ sh("flutter","pub","get")
sh("flutter", "build", "apk", "--no-tree-shake-icons", "--release", "--flavor", "#{flavor}", "-t", "lib/main_#{flavor}_lite.dart", "--build-number=#{build_number}", "--build-name=#{build_version}")
end
old_apk_file_path = File.join($path_apk_output_dir, "app-#{flavor}-release.apk")
new_apk_file_path = File.join($path_apk_output_dir, "starlock-#{flavor}-release-"+$current_tag+".apk")
File.rename(old_apk_file_path, new_apk_file_path)
+ end
+
+ desc "Build & upload a new version to Gitlab Release"
+ lane :release_bundle do |options|
+ flavor = options[:flavor]
+ UI.user_error!("flavor is required") unless flavor
+ print_log "build flavor for: #{flavor}"
+ build_number = Time.now.strftime("%Y%m%d%H")
+ print_log "BuildNo #{build_number}"
+ build_version = $current_tag.match(/^v(\d+\.\d+\.\d+)/).captures[0]
+ print_log "buildVersion #{build_version}"
+ commit_hash = last_git_commit
+ short_hash = commit_hash[:abbreviated_commit_hash]
+ print_log "last_git_commit_short_hash #{short_hash}"
+ remove_zone_pre_build(zone:"cn")
Dir.chdir "../.." do
+ sh("flutter","pub","get")
sh("flutter", "build", "appbundle", "--no-tree-shake-icons", "--release", "--flavor", "#{flavor}", "-t", "lib/main_#{flavor}_lite.dart", "--build-number=#{build_number}", "--build-name=#{build_version}")
end
old_bundle_file_path = File.join($path_bundle_output_dir , "/#{flavor}Release/app-#{flavor}-release.aab")
@@ -122,4 +142,45 @@ platform :android do
File.delete(file)
end
end
+
+ lane :remove_zone_pre_build do |options|
+ sh("git", "reset", "--hard")
+ zone = options[:zone]
+ UI.user_error!("Please provide valid 'zone'") unless zone
+ pathList=["pubspec.yaml","/android/app/build.gradle","/lib/apm"]
+ extensions = [".dart",".gradle"] #options[:extensions]
+ if pathList.empty? || extensions.empty?
+ UI.user_error!("Please provide valid 'paths' and 'extensions' arrays.")
+ end
+ puts "start prepare zone: #{zone},pathList:#{pathList},extensions:#{extensions}"
+ regexp_List = [/#<#{zone}>.*?#<\/#{zone}>/m,/\/\/\<#{zone}\>.*?\/\/\<\/#{zone}\>/m]
+ UI.message("Processed RegExpList: #{regexp_List}")
+ def process_file(file_path, regexpList)
+ content = File.read(file_path)
+ regexpList.each do |tag|
+ content = content.gsub(tag,'')
+ end
+ File.write(file_path, content)
+ UI.message("Processed file: #{file_path},content :\n #{content}")
+ end
+
+ pathList.each do |path|
+ realPath = File.join($path_dir_build, path)
+ if File.directory?(realPath)
+ Dir.glob("#{realPath}/**/*").each do |file|
+ if File.directory?(file)
+ UI.message("Find child dir path: #{file}")
+ elsif extensions.include?(File.extname(file))
+ process_file(file,regexp_List)
+ end
+ end
+ elsif File.file?(realPath)
+ process_file(realPath,regexp_List)
+ else
+ UI.message("Invalid path: #{realPath}")
+ end
+ end
+ UI.success("All matching content removed from specified files.")
+ end
+
end
diff --git a/firebase.json b/firebase.json
new file mode 100644
index 00000000..30b98ac5
--- /dev/null
+++ b/firebase.json
@@ -0,0 +1 @@
+{"flutter":{"platforms":{"android":{"default":{"projectId":"skychip2023-ecdff","appId":"1:281500445726:android:468195b9cc68dd6cc4d20f","fileOutput":"android/app/google-services.json"}},"ios":{"default":{"projectId":"skychip2023-ecdff","appId":"1:281500445726:ios:b194ccffb92fb86cc4d20f","uploadDebugSymbols":false,"fileOutput":"ios/Runner/GoogleService-Info.plist"}},"dart":{"lib/firebase_options.dart":{"projectId":"skychip2023-ecdff","configurations":{"android":"1:281500445726:android:468195b9cc68dd6cc4d20f","ios":"1:281500445726:ios:b194ccffb92fb86cc4d20f"}}}}}}
\ No newline at end of file
diff --git a/images/icon_main_sky_1024.png b/images/icon_main_sky_1024.png
index 1401d392..d03e73fa 100644
Binary files a/images/icon_main_sky_1024.png and b/images/icon_main_sky_1024.png differ
diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj
index 43f75e59..26844532 100644
--- a/ios/Runner.xcodeproj/project.pbxproj
+++ b/ios/Runner.xcodeproj/project.pbxproj
@@ -1075,8 +1075,10 @@
buildSettings = {
CODE_SIGN_ENTITLEMENTS = "Runner/RunnerRelease-sky.entitlements";
CODE_SIGN_IDENTITY = "Apple Development";
- CODE_SIGN_STYLE = Automatic;
- DEVELOPMENT_TEAM = NAQ5PL2DYC;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ CODE_SIGN_STYLE = Manual;
+ DEVELOPMENT_TEAM = "";
+ "DEVELOPMENT_TEAM[sdk=iphoneos*]" = NAQ5PL2DYC;
INFOPLIST_FILE = Runner/info_sky.plist;
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
LD_RUNPATH_SEARCH_PATHS = (
@@ -1086,6 +1088,7 @@
PRODUCT_BUNDLE_IDENTIFIER = com.starlock.lock.local;
PRODUCT_NAME = Runner;
PROVISIONING_PROFILE_SPECIFIER = "";
+ "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = Debug_com.starlock.lock.local.mobileprovision;
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
SUPPORTS_MACCATALYST = NO;
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
@@ -1170,8 +1173,10 @@
buildSettings = {
CODE_SIGN_ENTITLEMENTS = "Runner/RunnerRelease-xhj.entitlements";
CODE_SIGN_IDENTITY = "Apple Development";
- CODE_SIGN_STYLE = Automatic;
- DEVELOPMENT_TEAM = P8997RW3V8;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ CODE_SIGN_STYLE = Manual;
+ DEVELOPMENT_TEAM = "";
+ "DEVELOPMENT_TEAM[sdk=iphoneos*]" = NAQ5PL2DYC;
INFOPLIST_FILE = Runner/info_xhj.plist;
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
LD_RUNPATH_SEARCH_PATHS = (
@@ -1181,6 +1186,7 @@
PRODUCT_BUNDLE_IDENTIFIER = com.starlock.lock.local;
PRODUCT_NAME = Runner;
PROVISIONING_PROFILE_SPECIFIER = "";
+ "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = Debug_com.starlock.lock.local.mobileprovision;
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
SUPPORTS_MACCATALYST = NO;
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
@@ -1194,8 +1200,10 @@
buildSettings = {
CODE_SIGN_ENTITLEMENTS = "Runner/RunnerRelease-sky.entitlements";
CODE_SIGN_IDENTITY = "Apple Development";
- CODE_SIGN_STYLE = Automatic;
- DEVELOPMENT_TEAM = NAQ5PL2DYC;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
+ CODE_SIGN_STYLE = Manual;
+ DEVELOPMENT_TEAM = "";
+ "DEVELOPMENT_TEAM[sdk=iphoneos*]" = NAQ5PL2DYC;
INFOPLIST_FILE = Runner/info_sky.plist;
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
LD_RUNPATH_SEARCH_PATHS = (
@@ -1204,6 +1212,7 @@
);
PRODUCT_NAME = Runner;
PROVISIONING_PROFILE_SPECIFIER = "";
+ "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = Appstore_com.skychip.lock.mobileprovision;
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
SUPPORTS_MACCATALYST = NO;
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
@@ -1217,8 +1226,10 @@
buildSettings = {
CODE_SIGN_ENTITLEMENTS = "Runner/RunnerRelease-xhj.entitlements";
CODE_SIGN_IDENTITY = "Apple Development";
- CODE_SIGN_STYLE = Automatic;
- DEVELOPMENT_TEAM = P8997RW3V8;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
+ CODE_SIGN_STYLE = Manual;
+ DEVELOPMENT_TEAM = "";
+ "DEVELOPMENT_TEAM[sdk=iphoneos*]" = P8997RW3V8;
INFOPLIST_FILE = Runner/info_xhj.plist;
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
LD_RUNPATH_SEARCH_PATHS = (
@@ -1228,6 +1239,7 @@
PRODUCT_BUNDLE_IDENTIFIER = com.xhjcn.lock;
PRODUCT_NAME = Runner;
PROVISIONING_PROFILE_SPECIFIER = "";
+ "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = Appstore_com.xhjcn.lock.mobileprovision;
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
SUPPORTS_MACCATALYST = NO;
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
@@ -1558,8 +1570,10 @@
buildSettings = {
CODE_SIGN_ENTITLEMENTS = "Runner/RunnerRelease-sky.entitlements";
CODE_SIGN_IDENTITY = "Apple Development";
- CODE_SIGN_STYLE = Automatic;
- DEVELOPMENT_TEAM = NAQ5PL2DYC;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
+ CODE_SIGN_STYLE = Manual;
+ DEVELOPMENT_TEAM = "";
+ "DEVELOPMENT_TEAM[sdk=iphoneos*]" = NAQ5PL2DYC;
INFOPLIST_FILE = Runner/info_sky.plist;
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
LD_RUNPATH_SEARCH_PATHS = (
@@ -1569,6 +1583,7 @@
PRODUCT_BUNDLE_IDENTIFIER = com.skychip.lock.pre;
PRODUCT_NAME = Runner;
PROVISIONING_PROFILE_SPECIFIER = "";
+ "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = Adhoc_com.skychip.lock.pre.mobileprovision;
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
SUPPORTS_MACCATALYST = NO;
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
@@ -1653,8 +1668,10 @@
buildSettings = {
CODE_SIGN_ENTITLEMENTS = "Runner/RunnerRelease-sky.entitlements";
CODE_SIGN_IDENTITY = "Apple Development";
- CODE_SIGN_STYLE = Automatic;
- DEVELOPMENT_TEAM = NAQ5PL2DYC;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
+ CODE_SIGN_STYLE = Manual;
+ DEVELOPMENT_TEAM = "";
+ "DEVELOPMENT_TEAM[sdk=iphoneos*]" = NAQ5PL2DYC;
INFOPLIST_FILE = Runner/info_sky.plist;
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
LD_RUNPATH_SEARCH_PATHS = (
@@ -1664,6 +1681,7 @@
PRODUCT_BUNDLE_IDENTIFIER = com.skychip.lock.dev;
PRODUCT_NAME = Runner;
PROVISIONING_PROFILE_SPECIFIER = "";
+ "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = Adhoc_com.skychip.lock.dev.mobileprovision;
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
SUPPORTS_MACCATALYST = NO;
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
@@ -1748,8 +1766,10 @@
buildSettings = {
CODE_SIGN_ENTITLEMENTS = "Runner/RunnerRelease-xhj.entitlements";
CODE_SIGN_IDENTITY = "Apple Development";
- CODE_SIGN_STYLE = Automatic;
- DEVELOPMENT_TEAM = P8997RW3V8;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
+ CODE_SIGN_STYLE = Manual;
+ DEVELOPMENT_TEAM = "";
+ "DEVELOPMENT_TEAM[sdk=iphoneos*]" = P8997RW3V8;
INFOPLIST_FILE = Runner/info_xhj.plist;
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
LD_RUNPATH_SEARCH_PATHS = (
@@ -1759,6 +1779,7 @@
PRODUCT_BUNDLE_IDENTIFIER = com.xhjcn.lock.pre;
PRODUCT_NAME = Runner;
PROVISIONING_PROFILE_SPECIFIER = "";
+ "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = Adhoc_com.xhjcn.lock.pre.mobileprovision;
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
SUPPORTS_MACCATALYST = NO;
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
diff --git a/ios/Runner.xcodeproj/xcshareddata/xcschemes/xhj.xcscheme b/ios/Runner.xcodeproj/xcshareddata/xcschemes/xhj.xcscheme
index 9cae57e2..2767a19f 100755
--- a/ios/Runner.xcodeproj/xcshareddata/xcschemes/xhj.xcscheme
+++ b/ios/Runner.xcodeproj/xcshareddata/xcschemes/xhj.xcscheme
@@ -24,7 +24,7 @@
-#import
+// #import
@interface AppDelegate()
diff --git a/ios/build.sh b/ios/build.sh
index 2900f4d8..a8a977bf 100755
--- a/ios/build.sh
+++ b/ios/build.sh
@@ -7,18 +7,18 @@ export ENV_BUILD_BRANCH=${CI_COMMIT_BRANCH}
export ENV_BUILD_WORKSPACE=${CI_PROJECT_DIR}
echo "GITLAB_WORKSPACE: ${CI_PROJECT_DIR}"
cd ${CI_PROJECT_DIR}/ios
-bundle exec pod install
+#bundle exec pod install
echo "ENV_BUILD_TAG:${ENV_BUILD_TAG},ENV_BUILD_BRANCH:${ENV_BUILD_BRANCH}"
regex='^v[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z]+\.[0-9]+)?$'
if [[ "${ENV_BUILD_BRANCH}" == "canary_release" ]]; then
echo "===build canary_release: ${NEXT_VERSION}"
export ENV_BUILD_TAG=${NEXT_VERSION}
- bundle exec fastlane release flavor:xhj --verbose
- bundle exec fastlane release flavor:sky --verbose
+ bundle exec fastlane release_ipa flavor:xhj --verbose
+ bundle exec fastlane release_ipa flavor:sky --verbose
elif [[ $ENV_BUILD_TAG =~ $regex ]]; then
echo "===build release===$ENV_BUILD_TAG"
- bundle exec fastlane release flavor:xhj --verbose
- bundle exec fastlane release flavor:sky --verbose
+ bundle exec fastlane release_ipa flavor:xhj --verbose
+ bundle exec fastlane release_ipa flavor:sky --verbose
elif [[ "${ENV_BUILD_BRANCH}" == "develop" ]]; then
echo "===build dev===${NEXT_VERSION}"
bundle exec fastlane beta flavor:xhj env:Dev --verbose
diff --git a/ios/fastlane/Fastfile b/ios/fastlane/Fastfile
index e43dcdf3..169ea544 100644
--- a/ios/fastlane/Fastfile
+++ b/ios/fastlane/Fastfile
@@ -84,6 +84,13 @@ platform :ios do
commit_hash = last_git_commit
short_hash = commit_hash[:abbreviated_commit_hash]
print_log "last_git_commit_short_hash #{short_hash}"
+ remove_zone_pre_build(zone:"com")
+ Dir.chdir "../.." do
+ sh("flutter","pub","get")
+ end
+ Dir.chdir ".." do
+ sh("bundle", "exec" ,"pod", "install")
+ end
Dir.chdir "../.." do
sh("flutter", "build", "ios", "--no-tree-shake-icons", "--no-codesign", "--release", "--flavor", "#{flavor}", "-t", "lib/main_#{flavor}_#{env}.dart", "--build-number=#{build_number}", "--build-name=#{build_version}")
end
@@ -119,7 +126,7 @@ platform :ios do
end
desc "Build & Deliver to App Store Connect"
- lane :release do |options|
+ lane :release_ipa do |options|
flavor = options[:flavor]
UI.user_error!("flavor is required") unless flavor
print_log "build flavor: #{flavor}"
@@ -130,6 +137,13 @@ platform :ios do
commit_hash = last_git_commit
short_hash = commit_hash[:abbreviated_commit_hash]
print_log "last_git_commit_short_hash #{short_hash}"
+ remove_zone_pre_build(zone:"com")
+ Dir.chdir "../.." do
+ sh("flutter","pub","get")
+ end
+ Dir.chdir ".." do
+ sh("bundle", "exec" ,"pod", "install")
+ end
Dir.chdir "../.." do
sh("flutter", "build", "ios", "--no-tree-shake-icons", "--no-codesign", "--release", "--flavor", "#{flavor}", "-t", "lib/main_#{flavor}_lite.dart", "--build-number=#{build_number}", "--build-name=#{build_version}")
end
@@ -188,6 +202,46 @@ platform :ios do
end
end
+ lane :remove_zone_pre_build do |options|
+ sh("git", "reset", "--hard")
+ zone = options[:zone]
+ UI.user_error!("Please provide valid 'zone'") unless zone
+ pathList=["pubspec.yaml","/lib/apm"]
+ extensions = [".dart"] #options[:extensions]
+ if pathList.empty? || extensions.empty?
+ UI.user_error!("Please provide valid 'paths' and 'extensions' arrays.")
+ end
+ puts "start prepare zone: #{zone},pathList:#{pathList},extensions:#{extensions}"
+ regexp_List = [/#<#{zone}>.*?#<\/#{zone}>/m,/\/\/\<#{zone}\>.*?\/\/\<\/#{zone}\>/m]
+ UI.message("Processed RegExpList: #{regexp_List}")
+ def process_file(file_path, regexpList)
+ content = File.read(file_path)
+ regexpList.each do |tag|
+ content = content.gsub(tag,'')
+ end
+ File.write(file_path, content)
+ UI.message("Processed file: #{file_path},content :\n #{content}")
+ end
+
+ pathList.each do |path|
+ realPath = File.join($path_dir_build, path)
+ if File.directory?(realPath)
+ Dir.glob("#{realPath}/**/*").each do |file|
+ if File.directory?(file)
+ UI.message("Find child dir path: #{file}")
+ elsif extensions.include?(File.extname(file))
+ process_file(file,regexp_List)
+ end
+ end
+ elsif File.file?(realPath)
+ process_file(realPath,regexp_List)
+ else
+ UI.message("Invalid path: #{realPath}")
+ end
+ end
+ UI.success("All matching content removed from specified files.")
+ end
+
end
diff --git a/lib/apm/apm_helper.dart b/lib/apm/apm_helper.dart
new file mode 100644
index 00000000..928b940f
--- /dev/null
+++ b/lib/apm/apm_helper.dart
@@ -0,0 +1,71 @@
+//
+import 'firebase/firebase_helper.dart';
+
+//
+
+//
+import 'umeng/umeng_helper.dart';
+//
+
+class ApmHelper {
+ ApmHelper._internal();
+
+ factory ApmHelper() => _getInstance();
+
+ static ApmHelper get instance => _getInstance();
+ static ApmHelper? _instance;
+
+ // 增加开关
+ static bool enabled = false;
+
+ static ApmHelper _getInstance() {
+ _instance ??= ApmHelper._internal();
+ return _instance!;
+ }
+
+ Future initApp() async {
+ //
+ await UmengHelper.instance.initApp();
+ //
+ //
+ await FirebaseHelper.instance.initApp();
+ //
+ }
+
+ Future initSdk() async {
+ //
+ UmengHelper.instance.initSdk();
+ //
+ //
+ FirebaseHelper.instance.initSdk();
+ //
+ }
+
+ Future login(String userId) async {
+ //
+ UmengHelper.instance.login(userId);
+ //
+ //
+ FirebaseHelper.instance.login(userId);
+ //
+ }
+
+ Future trackEvent(
+ String eventName, Map parameters) async {
+ //
+ UmengHelper.instance.trackEvent(eventName, parameters);
+ //
+ //
+ FirebaseHelper.instance.trackEvent(eventName, parameters);
+ //
+ }
+
+ Future logout() async {
+ //
+ UmengHelper.instance.logout();
+ //
+ //
+ FirebaseHelper.instance.logout();
+ //
+ }
+}
diff --git a/lib/apm/firebase/firebase_helper.dart b/lib/apm/firebase/firebase_helper.dart
new file mode 100644
index 00000000..98188c1c
--- /dev/null
+++ b/lib/apm/firebase/firebase_helper.dart
@@ -0,0 +1,77 @@
+//
+import 'package:firebase_analytics/firebase_analytics.dart';
+import 'package:firebase_core/firebase_core.dart'
+ show Firebase, FirebaseOptions;
+import 'package:flutter/foundation.dart'
+ show defaultTargetPlatform, kIsWeb, TargetPlatform;
+
+class DefaultFirebaseOptions {
+ static FirebaseOptions get currentPlatform {
+ switch (defaultTargetPlatform) {
+ case TargetPlatform.android:
+ return android;
+ case TargetPlatform.iOS:
+ return ios;
+ default:
+ throw UnsupportedError(
+ 'DefaultFirebaseOptions are not supported for this platform.',
+ );
+ }
+ }
+
+ static const FirebaseOptions android = FirebaseOptions(
+ apiKey: 'AIzaSyC-3-ABWuy9LrYyAw_KxDRto4DanQ0sq9g',
+ appId: '1:281500445726:android:ddf52ac7b7f83cf5c4d20f',
+ messagingSenderId: '281500445726',
+ projectId: 'skychip2023-ecdff',
+ storageBucket: 'skychip2023-ecdff.firebasestorage.app',
+ );
+
+ static const FirebaseOptions ios = FirebaseOptions(
+ apiKey: 'AIzaSyACbp5aUKhLU1SMg8iIdm9WmNX7wxI7fVc',
+ appId: '1:281500445726:ios:b194ccffb92fb86cc4d20f',
+ messagingSenderId: '281500445726',
+ projectId: 'skychip2023-ecdff',
+ storageBucket: 'skychip2023-ecdff.firebasestorage.app',
+ iosBundleId: 'com.starlock.lock.local',
+ );
+}
+
+class FirebaseHelper {
+ factory FirebaseHelper() => _getInstance();
+
+ FirebaseHelper._internal();
+
+ static FirebaseHelper get instance => _getInstance();
+ static FirebaseHelper? _instance;
+
+ static FirebaseHelper _getInstance() {
+ _instance ??= FirebaseHelper._internal();
+ return _instance!;
+ }
+
+ Future initApp() async {
+ await Firebase.initializeApp(
+ options: DefaultFirebaseOptions.currentPlatform,
+ );
+ }
+
+ Future initSdk() async {
+ FirebaseAnalytics.instance.setAnalyticsCollectionEnabled(true);
+ }
+
+ Future login(String userId) async {
+ FirebaseAnalytics.instance.setUserId(id: userId);
+ }
+
+ Future trackEvent(
+ String eventName, Map? parameters) async {
+ FirebaseAnalytics.instance
+ .logEvent(name: eventName, parameters: parameters);
+ }
+
+ Future logout() async {
+ FirebaseAnalytics.instance.setUserId(id: '');
+ }
+}
+//
diff --git a/lib/apm/umeng/umeng_helper.dart b/lib/apm/umeng/umeng_helper.dart
new file mode 100644
index 00000000..bc1e3c04
--- /dev/null
+++ b/lib/apm/umeng/umeng_helper.dart
@@ -0,0 +1,41 @@
+//
+import 'package:umeng_common_sdk/umeng_common_sdk.dart';
+import '../../flavors.dart';
+
+class UmengHelper {
+ UmengHelper._internal();
+
+ factory UmengHelper() => _getInstance();
+
+ static UmengHelper get instance => _getInstance();
+ static UmengHelper? _instance;
+
+ static UmengHelper _getInstance() {
+ _instance ??= UmengHelper._internal();
+ return _instance!;
+ }
+
+ Future initApp() async {
+
+ }
+
+ Future initSdk() async {
+ UmengCommonSdk.initCommon(
+ F.umengKey.androidKey, F.umengKey.iosKey, F.umengKey.channel);
+ UmengCommonSdk.setPageCollectionModeManual();
+ }
+
+ Future login(String userId) async {
+ UmengCommonSdk.onProfileSignIn(userId);
+ }
+
+ Future trackEvent(
+ String eventName, Map parameters) async {
+ UmengCommonSdk.onEvent(eventName, parameters);
+ }
+
+ Future logout() async {
+ UmengCommonSdk.onProfileSignOff();
+ }
+}
+//
diff --git a/lib/flavors.dart b/lib/flavors.dart
index 5123fbfa..1ba07b5c 100755
--- a/lib/flavors.dart
+++ b/lib/flavors.dart
@@ -22,6 +22,20 @@ class StarLockAMapKey {
const StarLockAMapKey({required this.iosKey, required this.androidKey});
}
+class UmengKey {
+ //iOS平台的key
+ final String iosKey;
+
+ //Android平台的key
+ final String androidKey;
+
+ //channle
+ final String channel;
+
+ const UmengKey(
+ {required this.iosKey, required this.androidKey, required this.channel});
+}
+
typedef dynamic fCallFunction();
class F {
@@ -180,6 +194,62 @@ class F {
}
}
+ // StarLockAMapKey
+ static UmengKey get umengKey {
+ switch (appFlavor) {
+ case Flavor.local:
+ return const UmengKey(
+ androidKey: '671244cf80464b33f6df9648',
+ iosKey: '671244ae80464b33f6df9646',
+ channel: 'Product');
+ case Flavor.dev:
+ return const UmengKey(
+ androidKey: '671244cf80464b33f6df9648',
+ iosKey: '671244ae80464b33f6df9646',
+ channel: 'Product');
+ case Flavor.pre:
+ return const UmengKey(
+ androidKey: '671244cf80464b33f6df9648',
+ iosKey: '671244ae80464b33f6df9646',
+ channel: 'Product');
+ case Flavor.sky_dev:
+ return const UmengKey(
+ androidKey: '671244cf80464b33f6df9648',
+ iosKey: '671244ae80464b33f6df9646',
+ channel: 'Product');
+ case Flavor.sky_pre:
+ return const UmengKey(
+ androidKey: '671244cf80464b33f6df9648',
+ iosKey: '671244ae80464b33f6df9646',
+ channel: 'Product');
+ case Flavor.sky:
+ return const UmengKey(
+ androidKey: '671244cf80464b33f6df9648',
+ iosKey: '671244ae80464b33f6df9646',
+ channel: 'Product');
+ case Flavor.xhj_dev:
+ return const UmengKey(
+ androidKey: '671244cf80464b33f6df9648',
+ iosKey: '671244ae80464b33f6df9646',
+ channel: 'Product');
+ case Flavor.xhj_pre:
+ return const UmengKey(
+ androidKey: '671244cf80464b33f6df9648',
+ iosKey: '671244ae80464b33f6df9646',
+ channel: 'Product');
+ case Flavor.xhj:
+ return const UmengKey(
+ androidKey: '671244cf80464b33f6df9648',
+ iosKey: '671244ae80464b33f6df9646',
+ channel: 'Product');
+ default:
+ return const UmengKey(
+ androidKey: '671244cf80464b33f6df9648',
+ iosKey: '671244ae80464b33f6df9646',
+ channel: 'Product');
+ }
+ }
+
// 是否是生产环境
static bool get isProductionEnv {
switch (appFlavor) {
diff --git a/lib/login/forgetPassword/starLock_forgetPassword_logic.dart b/lib/login/forgetPassword/starLock_forgetPassword_logic.dart
index 3566ba34..7036c80c 100755
--- a/lib/login/forgetPassword/starLock_forgetPassword_logic.dart
+++ b/lib/login/forgetPassword/starLock_forgetPassword_logic.dart
@@ -2,11 +2,11 @@ import 'dart:async';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
+import 'package:star_lock/apm/apm_helper.dart';
import 'package:star_lock/app_settings/app_settings.dart';
import 'package:star_lock/login/forgetPassword/starLock_forgetPassword_state.dart';
import 'package:star_lock/login/login/entity/LoginEntity.dart';
import 'package:star_lock/login/register/entity/SendValidationCodeEntity.dart';
-import 'package:umeng_common_sdk/umeng_common_sdk.dart';
import '../../network/api_repository.dart';
import '../../tools/baseGetXController.dart';
@@ -55,7 +55,7 @@ class StarLockForgetPasswordLogic extends BaseGetXController {
'B748F838-94EE-4BDB-A0E6-7B2D16849792',
state.verificationCode.value);
if (entity.errorCode!.codeIsSuccessful) {
- UmengCommonSdk.onEvent('resetPassword_result', {
+ ApmHelper.instance.trackEvent('resetPassword_result', {
'account':state.phoneStr.value,
'date':DateTool().getNowDateWithType(1),
'resetPassword_res':'成功',
@@ -64,7 +64,7 @@ class StarLockForgetPasswordLogic extends BaseGetXController {
showToast('重置成功'.tr);
Get.back();
}else{
- UmengCommonSdk.onEvent('resetPassword_result', {
+ ApmHelper.instance.trackEvent('resetPassword_result', {
'account':state.phoneStr.value,
'date':DateTool().getNowDateWithType(1),
'resetPassword_res':'${entity.errorCode}--${entity.errorMsg}',
diff --git a/lib/login/login/entity/LoginData.dart b/lib/login/login/entity/LoginData.dart
index 921be345..f6a4620c 100755
--- a/lib/login/login/entity/LoginData.dart
+++ b/lib/login/login/entity/LoginData.dart
@@ -25,6 +25,7 @@ class LoginData {
uid = json['uid'];
isVip = json['isVip'];
}
+
String? accessToken;
int? userid;
int? expiresAt;
diff --git a/lib/login/login/starLock_login_logic.dart b/lib/login/login/starLock_login_logic.dart
index c7e64334..2bfdddf6 100755
--- a/lib/login/login/starLock_login_logic.dart
+++ b/lib/login/login/starLock_login_logic.dart
@@ -1,5 +1,6 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
+import 'package:star_lock/apm/apm_helper.dart';
import 'package:star_lock/appRouters.dart';
import 'package:star_lock/app_settings/app_settings.dart';
import 'package:star_lock/blue/blue_manage.dart';
@@ -7,7 +8,6 @@ import 'package:star_lock/common/XSConstantMacro/XSConstantMacro.dart';
import 'package:star_lock/login/login/entity/LoginEntity.dart';
import 'package:star_lock/mine/mine/starLockMine_state.dart';
import 'package:star_lock/tools/baseGetXController.dart';
-import 'package:umeng_common_sdk/umeng_common_sdk.dart';
import '../../main/lockMian/lockMain/lockMain_logic.dart';
import '../../mine/mine/starLockMine_logic.dart';
@@ -50,7 +50,7 @@ class StarLockLoginLogic extends BaseGetXController {
username: state.emailOrPhone.value,
deviceInfo: state.deviceInfoMap);
if (entity.errorCode!.codeIsSuccessful) {
- UmengCommonSdk.onEvent('login_result', {
+ ApmHelper.instance.trackEvent('login_result', {
'account': state.emailOrPhone.value,
'date': DateTool().getNowDateWithType(1),
'login_res': '成功',
@@ -65,7 +65,7 @@ class StarLockLoginLogic extends BaseGetXController {
Get.offNamedUntil(Routers.starLockMain, (Route route) => false);
BlueManage().scanDevices.clear(); //清除设备缓存
} else {
- UmengCommonSdk.onEvent('login_result', {
+ ApmHelper.instance.trackEvent('login_result', {
'account': state.emailOrPhone.value,
'date': DateTool().getNowDateWithType(1),
'login_res': '${entity.errorCode}--${entity.errorMsg}',
diff --git a/lib/login/register/starLock_register_logic.dart b/lib/login/register/starLock_register_logic.dart
index 69a653d7..b60be331 100755
--- a/lib/login/register/starLock_register_logic.dart
+++ b/lib/login/register/starLock_register_logic.dart
@@ -1,8 +1,8 @@
-
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
+import 'package:star_lock/apm/apm_helper.dart';
import 'package:star_lock/appRouters.dart';
import 'package:star_lock/app_settings/app_settings.dart';
import 'package:star_lock/blue/blue_manage.dart';
@@ -12,7 +12,6 @@ import 'package:star_lock/login/register/entity/SendValidationCodeEntity.dart';
import 'package:star_lock/tools/eventBusEventManage.dart';
import 'package:star_lock/tools/push/xs_jPhush.dart';
import 'package:star_lock/tools/storage.dart';
-import 'package:umeng_common_sdk/umeng_common_sdk.dart';
import '../../network/api_repository.dart';
import '../../tools/baseGetXController.dart';
@@ -26,6 +25,7 @@ class StarLockRegisterLogic extends BaseGetXController {
final StarLockRegisterState state = StarLockRegisterState();
late Timer _timer;
+
void _startTimer() {
_timer = Timer.periodic(1.seconds, (Timer timer) {
if (state.currentSecond > 1) {
@@ -49,7 +49,7 @@ class StarLockRegisterLogic extends BaseGetXController {
return;
}
- if(!RegularExpression().validateString(state.pwd.value)){
+ if (!RegularExpression().validateString(state.pwd.value)) {
showToast('密码需至少包含数字/字母/字符中的2种组合'.tr);
return;
}
@@ -61,10 +61,10 @@ class StarLockRegisterLogic extends BaseGetXController {
verificationCode: state.verificationCode.value,
deviceInfo: state.deviceInfoMap.value);
if (entity.errorCode!.codeIsSuccessful) {
- UmengCommonSdk.onEvent('register_result', {
- 'account':state.phoneOrEmailStr.value,
- 'date':DateTool().getNowDateWithType(1),
- 'register_res':'成功',
+ ApmHelper.instance.trackEvent('register_result', {
+ 'account': state.phoneOrEmailStr.value,
+ 'date': DateTool().getNowDateWithType(1),
+ 'register_res': '成功',
});
Storage.saveLoginData(entity.data);
@@ -73,11 +73,11 @@ class StarLockRegisterLogic extends BaseGetXController {
XSJPushProvider().initLocalNotification(isCancelLocalPush: false);
Get.offNamedUntil(Routers.starLockMain, (Route route) => false);
BlueManage().scanDevices.clear(); //清除设备缓存
- }else{
- UmengCommonSdk.onEvent('register_result', {
- 'account':state.phoneOrEmailStr.value,
- 'date':DateTool().getNowDateWithType(1),
- 'register_res':'${entity.errorCode}--${entity.errorMsg}',
+ } else {
+ ApmHelper.instance.trackEvent('register_result', {
+ 'account': state.phoneOrEmailStr.value,
+ 'date': DateTool().getNowDateWithType(1),
+ 'register_res': '${entity.errorCode}--${entity.errorMsg}',
});
}
}
@@ -135,12 +135,15 @@ class StarLockRegisterLogic extends BaseGetXController {
// 重置是否能提交
void _resetCanSub() {
- state.canSub.value = state.pwdIsOK && state.codeIsOK && state.phoneOrEmailStr.value.isNotEmpty;
+ state.canSub.value = state.pwdIsOK &&
+ state.codeIsOK &&
+ state.phoneOrEmailStr.value.isNotEmpty;
}
// 重置是否能发送验证码
void _resetCanSendCode() {
- state.canSendCode.value = state.pwdIsOK && state.phoneOrEmailStr.value.isNotEmpty;
+ state.canSendCode.value =
+ state.pwdIsOK && state.phoneOrEmailStr.value.isNotEmpty;
}
@override
diff --git a/lib/main.dart b/lib/main.dart
index c5f0db2a..a25d730e 100755
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -17,8 +17,8 @@ import 'package:star_lock/tools/platform_info_services.dart';
import 'package:star_lock/tools/push/xs_jPhush.dart';
import 'package:star_lock/tools/storage.dart';
import 'package:star_lock/translations/trans_lib.dart';
-import 'package:umeng_common_sdk/umeng_common_sdk.dart';
+import 'apm/apm_helper.dart';
import 'app.dart';
import 'app_settings/app_settings.dart';
import 'tools/store_service.dart';
@@ -27,7 +27,7 @@ import 'tools/store_service.dart';
FutureOr main() async {
FlutterBugly.postCatchedException(() async {
WidgetsFlutterBinding.ensureInitialized();
-
+ await ApmHelper.instance.initApp();
await _setCommonServices();
// 设置国际化信息
@@ -74,10 +74,7 @@ Future _setCommonServices() async {
//关于隐私协议的初始化
Future privacySDKInitialization() async {
- UmengCommonSdk.initCommon(
- '671244cf80464b33f6df9648', '671244ae80464b33f6df9646', 'Product');
- UmengCommonSdk.setPageCollectionModeManual();
-
+ ApmHelper.instance.initSdk();
await Get.putAsync(() => PlatformInfoService().init());
await BuglyTool.init();
// 初始化JPush服务
diff --git a/lib/main/lockDetail/authorizedAdmin/authorizedAdmin/authorizedAdmin_logic.dart b/lib/main/lockDetail/authorizedAdmin/authorizedAdmin/authorizedAdmin_logic.dart
index 209e9024..18537ef1 100755
--- a/lib/main/lockDetail/authorizedAdmin/authorizedAdmin/authorizedAdmin_logic.dart
+++ b/lib/main/lockDetail/authorizedAdmin/authorizedAdmin/authorizedAdmin_logic.dart
@@ -1,8 +1,8 @@
import 'dart:async';
import 'package:flutter/material.dart';
-import 'package:flutter_blue_plus/flutter_blue_plus.dart';
import 'package:get/get.dart';
+import 'package:star_lock/apm/apm_helper.dart';
import 'package:star_lock/appRouters.dart';
import 'package:star_lock/app_settings/app_settings.dart';
import 'package:star_lock/login/login/entity/LoginEntity.dart';
@@ -12,13 +12,8 @@ import 'package:star_lock/mine/valueAddedServices/valueAddedServicesHighFunction
import 'package:star_lock/tools/NativeInteractionTool.dart';
import 'package:star_lock/tools/dateTool.dart';
import 'package:star_lock/tools/showCupertinoAlertView.dart';
-import 'package:umeng_common_sdk/umeng_common_sdk.dart';
import '../../../../blue/blue_manage.dart';
-import '../../../../blue/io_reply.dart';
-import '../../../../blue/io_tool/io_tool.dart';
-import '../../../../blue/io_tool/manager_event_bus.dart';
-import '../../../../blue/sender_manage.dart';
import '../../../../network/api_repository.dart';
import '../../../../tools/baseGetXController.dart';
import '../../../../tools/commonDataManage.dart';
@@ -222,7 +217,7 @@ class AuthorizedAdminLogic extends BaseGetXController {
: '');
final String getMobile = (await Storage.getMobile())!;
if (entity.errorCode!.codeIsSuccessful) {
- UmengCommonSdk.onEvent('add_authorizedAdmin', {
+ ApmHelper.instance.trackEvent('add_authorizedAdmin', {
'lock_name': BlueManage().connectDeviceName,
'account':
getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
@@ -245,7 +240,7 @@ class AuthorizedAdminLogic extends BaseGetXController {
sendElectronicKeyRequest();
});
} else {
- UmengCommonSdk.onEvent('add_authorizedAdmin', {
+ ApmHelper.instance.trackEvent('add_authorizedAdmin', {
'lock_name': BlueManage().connectDeviceName,
'account':
getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
diff --git a/lib/main/lockDetail/card/addICCard/addICCard_logic.dart b/lib/main/lockDetail/card/addICCard/addICCard_logic.dart
index 8e0df9c7..17398032 100755
--- a/lib/main/lockDetail/card/addICCard/addICCard_logic.dart
+++ b/lib/main/lockDetail/card/addICCard/addICCard_logic.dart
@@ -1,14 +1,12 @@
-
import 'dart:async';
import 'package:flutter_blue_plus/flutter_blue_plus.dart';
import 'package:get/get.dart';
-import 'package:star_lock/app_settings/app_settings.dart';
import 'package:star_lock/login/login/entity/LoginEntity.dart';
import 'package:star_lock/main/lockDetail/card/addICCard/addICCard_entity.dart';
import 'package:star_lock/tools/baseGetXController.dart';
-import 'package:umeng_common_sdk/umeng_common_sdk.dart';
+import '../../../../apm/apm_helper.dart';
import '../../../../blue/blue_manage.dart';
import '../../../../blue/io_protocol/io_addICCardWithTimeCycleCoercion.dart';
import '../../../../blue/io_reply.dart';
@@ -22,20 +20,23 @@ import '../../../../tools/eventBusEventManage.dart';
import '../../../../tools/storage.dart';
import 'addICCard_state.dart';
-class AddICCardLogic extends BaseGetXController{
+class AddICCardLogic extends BaseGetXController {
AddICCardState state = AddICCardState();
// 监听设备返回的数据
late StreamSubscription _replySubscription;
+
void _initReplySubscription() {
- _replySubscription = EventBusManager().eventBus!.on().listen((Reply reply) async {
+ _replySubscription =
+ EventBusManager().eventBus!.on().listen((Reply reply) async {
// 添加IC卡开始
- if((reply is SenderAddICCardWithTimeCycleCoercionReply) && (state.ifCurrentScreen.value == true)) {
+ if ((reply is SenderAddICCardWithTimeCycleCoercionReply) &&
+ (state.ifCurrentScreen.value == true)) {
_replyAddICCardBegin(reply);
}
// 添加卡确认
- if(reply is SenderAddICCardConfirmationReply) {
+ if (reply is SenderAddICCardConfirmationReply) {
_replyAddICCardConfirmation(reply);
}
});
@@ -46,13 +47,13 @@ class AddICCardLogic extends BaseGetXController{
BuglyTool.uploadException(
message: '添加卡开始,解析数据',
detail: '添加卡开始,解析数据 _replyAddICCardBegin:${reply.data}',
- upload: false
- );
+ upload: false);
- switch(status){
+ switch (status) {
case 0x00:
//成功
- final List cardNumberList = reply.data.sublist(reply.data.length - 2);
+ final List cardNumberList =
+ reply.data.sublist(reply.data.length - 2);
final String cardNumber = listChangInt(cardNumberList).toString();
// AppLog.log("添加卡号:$cardNumberList cardNumber:$cardNumber");
state.cardNumber.value = cardNumber.toString();
@@ -63,10 +64,13 @@ class AddICCardLogic extends BaseGetXController{
break;
case 0x06:
//无权限
- final List? privateKey = await Storage.getStringList(saveBluePrivateKey);
- final List getPrivateKeyList = changeStringListToIntList(privateKey!);
+ final List? privateKey =
+ await Storage.getStringList(saveBluePrivateKey);
+ final List getPrivateKeyList =
+ changeStringListToIntList(privateKey!);
- final List? signKey = await Storage.getStringList(saveBlueSignKey);
+ final List? signKey =
+ await Storage.getStringList(saveBlueSignKey);
final List signKeyDataList = changeStringListToIntList(signKey!);
// var publicKey = await Storage.getStringList(saveBluePublicKey);
@@ -78,25 +82,29 @@ class AddICCardLogic extends BaseGetXController{
// AppLog.log('添加卡token:$token');
IoSenderManage.senderAddCardWithTimeCycleCoercionCommand(
- keyID:'1',
- userID:await Storage.getUid(),
- cardNo:0,
- useCountLimit:0xffff,
- operate:0, // 0:注册 1:修改 2:删除 3:删除全部
- isAdmin:state.isAdministrator.value == '2' ? 1 : 0,
- isForce:state.isCoerced.value == '1' ? 1 : 0, // 是否是胁迫
- isRound:state.selectType.value == '2' ? 1: 0, // 是否是循环
- weekRound:DateTool().accordingTheCycleIntoTheCorrespondingNumber(state.weekDay.value), // 周循环
- startDate: int.parse(state.startDate.value)~/1000,
- endDate: int.parse(state.endDate.value)~/1000,
- startTime:DateTool().dateToHNString(state.effectiveDateTime.value),
- endTime:DateTool().dateToHNString(state.failureDateTime.value),
- needAuthor:1,
- signKey:signKeyDataList,
- privateKey:getPrivateKeyList,
- token: token,
- isBeforeAddUser: false
- );
+ keyID: '1',
+ userID: await Storage.getUid(),
+ cardNo: 0,
+ useCountLimit: 0xffff,
+ operate: 0,
+ // 0:注册 1:修改 2:删除 3:删除全部
+ isAdmin: state.isAdministrator.value == '2' ? 1 : 0,
+ isForce: state.isCoerced.value == '1' ? 1 : 0,
+ // 是否是胁迫
+ isRound: state.selectType.value == '2' ? 1 : 0,
+ // 是否是循环
+ weekRound: DateTool().accordingTheCycleIntoTheCorrespondingNumber(
+ state.weekDay.value),
+ // 周循环
+ startDate: int.parse(state.startDate.value) ~/ 1000,
+ endDate: int.parse(state.endDate.value) ~/ 1000,
+ startTime: DateTool().dateToHNString(state.effectiveDateTime.value),
+ endTime: DateTool().dateToHNString(state.failureDateTime.value),
+ needAuthor: 1,
+ signKey: signKeyDataList,
+ privateKey: getPrivateKeyList,
+ token: token,
+ isBeforeAddUser: false);
break;
default:
//失败
@@ -113,58 +121,59 @@ class AddICCardLogic extends BaseGetXController{
message: '添加卡结果,解析数据',
detail: '添加卡结果,解析数据 _replyAddICCardConfirmation:${reply.data}',
eventStr: '添加卡事件结果',
- upload: true
- );
+ upload: true);
final String getMobile = (await Storage.getMobile())!;
- switch(status){
+ switch (status) {
case 0x00:
//成功
- UmengCommonSdk.onEvent('add_card', {
- 'lock_name':BlueManage().connectDeviceName,
- 'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
- 'date':DateTool().getNowDateWithType(1),
- 'add_card_result':'成功',
+ ApmHelper.instance.trackEvent('add_card', {
+ 'lock_name': BlueManage().connectDeviceName,
+ 'account':
+ getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
+ 'date': DateTool().getNowDateWithType(1),
+ 'add_card_result': '成功',
});
- switch(reply.data[5]){
+ switch (reply.data[5]) {
case 0xff:
- // 注册指纹失败
+ // 注册指纹失败
showToast('退出添加'.tr);
Get.close(1);
break;
case 0xFE:
- // 管理员已满
+ // 管理员已满
showToast('管理员已满'.tr);
Get.close(1);
break;
case 0xFD:
- // 用户已满
+ // 用户已满
showToast('用户已满'.tr);
Get.close(1);
break;
case 0xFC:
- // 指纹已满
+ // 指纹已满
showToast('锁上面添加卡已满'.tr);
Get.close(1);
break;
case 0xFB:
- // 指纹已存在
+ // 指纹已存在
showToast('卡已存在'.tr);
break;
default:
- // 添加指纹中
- // 当前注册数
+ // 添加指纹中
+ // 当前注册数
addICCardData();
break;
}
break;
default:
//失败
- UmengCommonSdk.onEvent('add_card', {
- 'lock_name':BlueManage().connectDeviceName,
- 'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
- 'date':DateTool().getNowDateWithType(1),
- 'add_card_result':reply.data[2],
+ ApmHelper.instance.trackEvent('add_card', {
+ 'lock_name': BlueManage().connectDeviceName,
+ 'account':
+ getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
+ 'date': DateTool().getNowDateWithType(1),
+ 'add_card_result': reply.data[2],
});
break;
}
@@ -175,91 +184,105 @@ class AddICCardLogic extends BaseGetXController{
final List? signKey = await Storage.getStringList(saveBlueSignKey);
final List signKeyDataList = changeStringListToIntList(signKey!);
- final List? privateKey = await Storage.getStringList(saveBluePrivateKey);
+ final List? privateKey =
+ await Storage.getStringList(saveBluePrivateKey);
final List getPrivateKeyList = changeStringListToIntList(privateKey!);
final List? token = await Storage.getStringList(saveBlueToken);
final List getTokenList = changeStringListToIntList(token!);
final String command = SenderAddICCardWithTimeCycleCoercionCommand(
- keyID:'1',
- userID:await Storage.getUid(),
- cardNo:0,
- useCountLimit:0xffff,
- operate:0, // 0:注册 1:修改 2:删除 3:删除全部
- isAdmin:state.isAdministrator.value == '2' ? 1 : 0,
- isForce:state.isCoerced.value == '1' ? 1 : 0, // 是否是胁迫
- isRound:state.selectType.value == '2' ? 1: 0, // 是否是循环
- weekRound:DateTool().accordingTheCycleIntoTheCorrespondingNumber(state.weekDay.value), // 周循环
- startDate: int.parse(state.startDate.value)~/1000,
- endDate: int.parse(state.endDate.value)~/1000,
- startTime:DateTool().dateToHNString(state.effectiveDateTime.value),
- endTime:DateTool().dateToHNString(state.failureDateTime.value),
- needAuthor:1,
- signKey:signKeyDataList,
- privateKey:getPrivateKeyList,
- token: getTokenList,
+ keyID: '1',
+ userID: await Storage.getUid(),
+ cardNo: 0,
+ useCountLimit: 0xffff,
+ operate: 0,
+ // 0:注册 1:修改 2:删除 3:删除全部
+ isAdmin: state.isAdministrator.value == '2' ? 1 : 0,
+ isForce: state.isCoerced.value == '1' ? 1 : 0,
+ // 是否是胁迫
+ isRound: state.selectType.value == '2' ? 1 : 0,
+ // 是否是循环
+ weekRound: DateTool()
+ .accordingTheCycleIntoTheCorrespondingNumber(state.weekDay.value),
+ // 周循环
+ startDate: int.parse(state.startDate.value) ~/ 1000,
+ endDate: int.parse(state.endDate.value) ~/ 1000,
+ startTime: DateTool().dateToHNString(state.effectiveDateTime.value),
+ endTime: DateTool().dateToHNString(state.failureDateTime.value),
+ needAuthor: 1,
+ signKey: signKeyDataList,
+ privateKey: getPrivateKeyList,
+ token: getTokenList,
).toString();
showBlueConnetctToastTimer(action: () async {
final String getMobile = (await Storage.getMobile())!;
- UmengCommonSdk.onEvent('add_card', {
- 'lock_name':BlueManage().connectDeviceName,
- 'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
- 'date':DateTool().getNowDateWithType(1),
- 'add_card_result':'添加卡超时',
+ ApmHelper.instance.trackEvent('add_card', {
+ 'lock_name': BlueManage().connectDeviceName,
+ 'account':
+ getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
+ 'date': DateTool().getNowDateWithType(1),
+ 'add_card_result': '添加卡超时',
});
BuglyTool.uploadException(
message: '添加卡超时处理-添加卡失败',
- detail: '添加卡超时处理,断开连接,添加卡失败--SenderAddICCardWithTimeCycleCoercionCommand:$command',
+ detail:
+ '添加卡超时处理,断开连接,添加卡失败--SenderAddICCardWithTimeCycleCoercionCommand:$command',
eventStr: '添加卡事件超时',
- upload: true
- );
+ upload: true);
Get.close(1);
});
- BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState deviceConnectionState) async {
- if (deviceConnectionState == BluetoothConnectionState.connected){
+ BlueManage().blueSendData(BlueManage().connectDeviceName,
+ (BluetoothConnectionState deviceConnectionState) async {
+ if (deviceConnectionState == BluetoothConnectionState.connected) {
cancelBlueConnetctToastTimer();
IoSenderManage.senderAddCardWithTimeCycleCoercionCommand(
- keyID:'1',
- userID:await Storage.getUid(),
- cardNo:0,
- useCountLimit:0xffff,
- operate:0, // 0:注册 1:修改 2:删除 3:删除全部
- isAdmin:state.isAdministrator.value == '2' ? 1 : 0,
- isForce:state.isCoerced.value == '1' ? 1 : 0, // 是否是胁迫
- isRound:state.selectType.value == '2' ? 1: 0, // 是否是循环
- weekRound:DateTool().accordingTheCycleIntoTheCorrespondingNumber(state.weekDay.value), // 周循环
- startDate: int.parse(state.startDate.value)~/1000,
- endDate: int.parse(state.endDate.value)~/1000,
- startTime:DateTool().dateToHNString(state.effectiveDateTime.value),
- endTime:DateTool().dateToHNString(state.failureDateTime.value),
- needAuthor:1,
- signKey:signKeyDataList,
- privateKey:getPrivateKeyList,
- token: getTokenList,
- isBeforeAddUser: false
- );
- } else if (deviceConnectionState == BluetoothConnectionState.disconnected){
+ keyID: '1',
+ userID: await Storage.getUid(),
+ cardNo: 0,
+ useCountLimit: 0xffff,
+ operate: 0,
+ // 0:注册 1:修改 2:删除 3:删除全部
+ isAdmin: state.isAdministrator.value == '2' ? 1 : 0,
+ isForce: state.isCoerced.value == '1' ? 1 : 0,
+ // 是否是胁迫
+ isRound: state.selectType.value == '2' ? 1 : 0,
+ // 是否是循环
+ weekRound: DateTool().accordingTheCycleIntoTheCorrespondingNumber(
+ state.weekDay.value),
+ // 周循环
+ startDate: int.parse(state.startDate.value) ~/ 1000,
+ endDate: int.parse(state.endDate.value) ~/ 1000,
+ startTime: DateTool().dateToHNString(state.effectiveDateTime.value),
+ endTime: DateTool().dateToHNString(state.failureDateTime.value),
+ needAuthor: 1,
+ signKey: signKeyDataList,
+ privateKey: getPrivateKeyList,
+ token: getTokenList,
+ isBeforeAddUser: false);
+ } else if (deviceConnectionState ==
+ BluetoothConnectionState.disconnected) {
final String getMobile = (await Storage.getMobile())!;
- UmengCommonSdk.onEvent('add_card', {
- 'lock_name':BlueManage().connectDeviceName,
- 'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
- 'date':DateTool().getNowDateWithType(1),
- 'add_card_result':'添加卡断开连接',
+ ApmHelper.instance.trackEvent('add_card', {
+ 'lock_name': BlueManage().connectDeviceName,
+ 'account':
+ getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
+ 'date': DateTool().getNowDateWithType(1),
+ 'add_card_result': '添加卡断开连接',
});
BuglyTool.uploadException(
message: '添加卡超时处理-添加卡失败',
- detail: '添加卡超时处理,断开连接,添加卡失败--SenderAddICCardWithTimeCycleCoercionCommand:$command',
+ detail:
+ '添加卡超时处理,断开连接,添加卡失败--SenderAddICCardWithTimeCycleCoercionCommand:$command',
eventStr: '添加卡事件断开连接',
- upload: true
- );
+ upload: true);
- if(state.ifCurrentScreen.value == true){
+ if (state.ifCurrentScreen.value == true) {
showBlueConnetctToast();
}
cancelBlueConnetctToastTimer();
@@ -270,27 +293,32 @@ class AddICCardLogic extends BaseGetXController{
// 取消添加指纹
Future senderCancelAddCardCommand() async {
- BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState deviceConnectionState) async {
- if (deviceConnectionState == BluetoothConnectionState.connected){
- final List? privateKey = await Storage.getStringList(saveBluePrivateKey);
- final List getPrivateKeyList = changeStringListToIntList(privateKey!);
+ BlueManage().blueSendData(BlueManage().connectDeviceName,
+ (BluetoothConnectionState deviceConnectionState) async {
+ if (deviceConnectionState == BluetoothConnectionState.connected) {
+ final List? privateKey =
+ await Storage.getStringList(saveBluePrivateKey);
+ final List getPrivateKeyList =
+ changeStringListToIntList(privateKey!);
- final List? signKey = await Storage.getStringList(saveBlueSignKey);
+ final List? signKey =
+ await Storage.getStringList(saveBlueSignKey);
final List signKeyDataList = changeStringListToIntList(signKey!);
final List? token = await Storage.getStringList(saveBlueToken);
final List getTokenList = changeStringListToIntList(token!);
IoSenderManage.senderCancelAddCardCommand(
- keyID:'1',
- userID:await Storage.getUid(),
- needAuthor:1,
- signKey:signKeyDataList,
- privateKey:getPrivateKeyList,
+ keyID: '1',
+ userID: await Storage.getUid(),
+ needAuthor: 1,
+ signKey: signKeyDataList,
+ privateKey: getPrivateKeyList,
token: getTokenList,
);
- }else if (deviceConnectionState == BluetoothConnectionState.disconnected){
- if(state.ifCurrentScreen.value == true){
+ } else if (deviceConnectionState ==
+ BluetoothConnectionState.disconnected) {
+ if (state.ifCurrentScreen.value == true) {
showBlueConnetctToast();
}
cancelBlueConnetctToastTimer();
@@ -319,18 +347,20 @@ class AddICCardLogic extends BaseGetXController{
}
}
- Future updateIdCardUserNoLoadData(String cardId) async{
- final LoginEntity entity = await ApiRepository.to.updateIdCardUserNoLoadData(
+ Future updateIdCardUserNoLoadData(String cardId) async {
+ final LoginEntity entity =
+ await ApiRepository.to.updateIdCardUserNoLoadData(
lockId: state.lockId.value.toString(),
cardId: cardId,
cardUserNo: state.cardNumber.value,
);
- if(entity.errorCode!.codeIsSuccessful){
- showToast('添加成功'.tr, something:(){
- if(state.fromType.value == 2){
+ if (entity.errorCode!.codeIsSuccessful) {
+ showToast('添加成功'.tr, something: () {
+ if (state.fromType.value == 2) {
// 回调指纹号
- eventBus.fire(ChickInAddStaffCardAndFingerprintBlockNumberEvent(state.cardNumber.value));
- }else if(state.fromType.value == 1){
+ eventBus.fire(ChickInAddStaffCardAndFingerprintBlockNumberEvent(
+ state.cardNumber.value));
+ } else if (state.fromType.value == 1) {
eventBus.fire(OtherTypeRefreshListEvent());
}
Get.close(2);
@@ -356,5 +386,4 @@ class AddICCardLogic extends BaseGetXController{
void onClose() {
_replySubscription.cancel();
}
-
-}
\ No newline at end of file
+}
diff --git a/lib/main/lockDetail/doorLockLog/doorLockLog_logic.dart b/lib/main/lockDetail/doorLockLog/doorLockLog_logic.dart
index 23d9a38e..4eb5137a 100755
--- a/lib/main/lockDetail/doorLockLog/doorLockLog_logic.dart
+++ b/lib/main/lockDetail/doorLockLog/doorLockLog_logic.dart
@@ -2,8 +2,7 @@ import 'dart:async';
import 'package:flutter_blue_plus/flutter_blue_plus.dart';
import 'package:get/get.dart';
-import 'package:flutter_easyloading/flutter_easyloading.dart';
-import 'package:star_lock/app_settings/app_settings.dart';
+import 'package:star_lock/apm/apm_helper.dart';
import 'package:star_lock/main/lockDetail/doorLockLog/doorLockLog_entity.dart';
import 'package:star_lock/main/lockDetail/doorLockLog/doorLockLog_state.dart';
@@ -11,7 +10,6 @@ import 'package:star_lock/main/lockDetail/lockOperatingRecord/lockOperatingRecor
import 'package:star_lock/tools/commonDataManage.dart';
import 'package:star_lock/tools/dateTool.dart';
import 'package:star_lock/tools/eventBusEventManage.dart';
-import 'package:umeng_common_sdk/umeng_common_sdk.dart';
import '../../../blue/blue_manage.dart';
import '../../../blue/io_protocol/io_referEventRecordTime.dart';
@@ -151,7 +149,7 @@ class DoorLockLogLogic extends BaseGetXController {
cancelBlueConnetctToastTimer();
final String getMobile = (await Storage.getMobile())!;
- UmengCommonSdk.onEvent('check_doorLockLog', {
+ ApmHelper.instance.trackEvent('check_doorLockLog', {
'lockName': state.keyInfos.value.lockName!,
'account':
getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
@@ -205,7 +203,7 @@ class DoorLockLogLogic extends BaseGetXController {
cancelBlueConnetctToastTimer();
final String getMobile = (await Storage.getMobile())!;
- UmengCommonSdk.onEvent('check_doorLockLog', {
+ ApmHelper.instance.trackEvent('check_doorLockLog', {
'lockName': state.keyInfos.value.lockName!,
'account':
getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
@@ -303,7 +301,7 @@ class DoorLockLogLogic extends BaseGetXController {
showEasyLoading();
getLockRecordLastUploadDataTime();
} else {
- UmengCommonSdk.onEvent('check_doorLockLog', {
+ ApmHelper.instance.trackEvent('check_doorLockLog', {
'lockName': state.keyInfos.value.lockName!,
'account':
getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
@@ -314,7 +312,7 @@ class DoorLockLogLogic extends BaseGetXController {
}
dismissEasyLoading();
} else {
- UmengCommonSdk.onEvent('check_doorLockLog', {
+ ApmHelper.instance.trackEvent('check_doorLockLog', {
'lockName': state.keyInfos.value.lockName!,
'account':
getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
diff --git a/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_logic.dart b/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_logic.dart
index e7eb9336..d885aafa 100755
--- a/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_logic.dart
+++ b/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_logic.dart
@@ -1,5 +1,6 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
+import 'package:star_lock/apm/apm_helper.dart';
import 'package:star_lock/appRouters.dart';
import 'package:star_lock/common/XSConstantMacro/XSConstantMacro.dart';
import 'package:star_lock/main/lockDetail/authorizedAdmin/authorizedAdmin/authorizedAdmin_entity.dart';
@@ -17,7 +18,6 @@ import 'package:star_lock/tools/regularExpression.dart';
import 'package:star_lock/tools/showCupertinoAlertView.dart';
import 'package:star_lock/tools/showTipView.dart';
import 'package:star_lock/tools/storage.dart';
-import 'package:umeng_common_sdk/umeng_common_sdk.dart';
import '../../../../../../blue/blue_manage.dart';
@@ -185,7 +185,7 @@ class SendElectronicKeyViewLogic extends BaseGetXController {
: '');
final String getMobile = (await Storage.getMobile())!;
if (entity.errorCode!.codeIsSuccessful) {
- UmengCommonSdk.onEvent('add_electronic_key', {
+ ApmHelper.instance.trackEvent('add_electronic_key', {
'lock_name':BlueManage().connectDeviceName,
'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
'date':DateTool().getNowDateWithType(1),
@@ -201,7 +201,7 @@ class SendElectronicKeyViewLogic extends BaseGetXController {
update();
eventBus.fire(ElectronicKeyListRefreshUI());
} else {
- UmengCommonSdk.onEvent('add_electronic_key', {
+ ApmHelper.instance.trackEvent('add_electronic_key', {
'lock_name':BlueManage().connectDeviceName,
'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
'date':DateTool().getNowDateWithType(1),
diff --git a/lib/main/lockDetail/fingerprint/addFingerprint/addFingerprint_logic.dart b/lib/main/lockDetail/fingerprint/addFingerprint/addFingerprint_logic.dart
index b657a491..bab8f1f0 100755
--- a/lib/main/lockDetail/fingerprint/addFingerprint/addFingerprint_logic.dart
+++ b/lib/main/lockDetail/fingerprint/addFingerprint/addFingerprint_logic.dart
@@ -3,11 +3,10 @@ import 'dart:async';
import 'package:flutter_blue_plus/flutter_blue_plus.dart';
import 'package:get/get.dart';
-import 'package:star_lock/app_settings/app_settings.dart';
+import 'package:star_lock/apm/apm_helper.dart';
import 'package:star_lock/login/login/entity/LoginEntity.dart';
import 'package:star_lock/main/lockDetail/fingerprint/addFingerprint/addFingerprint_entity.dart';
import 'package:star_lock/tools/dateTool.dart';
-import 'package:umeng_common_sdk/umeng_common_sdk.dart';
import '../../../../../blue/blue_manage.dart';
import '../../../../../blue/io_reply.dart';
@@ -171,7 +170,7 @@ class AddFingerprintLogic extends BaseGetXController {
case 0x00:
//成功
// var fingerprintNum = listChangInt(reply.data.sublist(9, 11)).toString();
- UmengCommonSdk.onEvent('add_fingerprint', {
+ ApmHelper.instance.trackEvent('add_fingerprint', {
'lock_name':BlueManage().connectDeviceName,
'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
'date':DateTool().getNowDateWithType(1),
@@ -203,7 +202,7 @@ class AddFingerprintLogic extends BaseGetXController {
break;
default:
//失败
- UmengCommonSdk.onEvent('add_fingerprint', {
+ ApmHelper.instance.trackEvent('add_fingerprint', {
'lock_name':BlueManage().connectDeviceName,
'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
'date':DateTool().getNowDateWithType(1),
@@ -254,7 +253,7 @@ class AddFingerprintLogic extends BaseGetXController {
showBlueConnetctToastTimer(action: () async {
final String getMobile = (await Storage.getMobile())!;
- UmengCommonSdk.onEvent('add_fingerprint', {
+ ApmHelper.instance.trackEvent('add_fingerprint', {
'lock_name':BlueManage().connectDeviceName,
'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
'date':DateTool().getNowDateWithType(1),
@@ -302,7 +301,7 @@ class AddFingerprintLogic extends BaseGetXController {
);
}else if (deviceConnectionState == BluetoothConnectionState.disconnected){
final String getMobile = (await Storage.getMobile())!;
- UmengCommonSdk.onEvent('add_fingerprint', {
+ ApmHelper.instance.trackEvent('add_fingerprint', {
'lock_name':BlueManage().connectDeviceName,
'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
'date':DateTool().getNowDateWithType(1),
diff --git a/lib/main/lockDetail/lockDetail/lockDetail_logic.dart b/lib/main/lockDetail/lockDetail/lockDetail_logic.dart
index 074847ea..5cef5acf 100755
--- a/lib/main/lockDetail/lockDetail/lockDetail_logic.dart
+++ b/lib/main/lockDetail/lockDetail/lockDetail_logic.dart
@@ -6,6 +6,7 @@ import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:get/get.dart';
import 'package:intl/intl.dart';
import 'package:permission_handler/permission_handler.dart';
+import 'package:star_lock/apm/apm_helper.dart';
import 'package:star_lock/common/XSConstantMacro/XSConstantMacro.dart';
import 'package:star_lock/login/login/entity/LoginEntity.dart';
import 'package:star_lock/main/lockDetail/electronicKey/electronicKeyList/entity/ElectronicKeyListEntity.dart';
@@ -14,7 +15,6 @@ import 'package:star_lock/main/lockMian/entity/lockListInfo_entity.dart';
import 'package:star_lock/tools/bugly/bugly_tool.dart';
import 'package:star_lock/tools/throttler.dart';
import 'package:star_lock/widget/permission/permission_dialog.dart';
-import 'package:umeng_common_sdk/umeng_common_sdk.dart';
import '../../../app_settings/app_settings.dart';
import '../../../blue/blue_manage.dart';
@@ -71,7 +71,7 @@ class LockDetailLogic extends BaseGetXController {
if (status != 6) {
final String getMobile = (await Storage.getMobile())!;
- UmengCommonSdk.onEvent('open_lock', {
+ ApmHelper.instance.trackEvent('open_lock', {
'lock_name': state.keyInfos.value.lockName!,
'account':
getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
@@ -378,7 +378,7 @@ class LockDetailLogic extends BaseGetXController {
outTimer: 20,
action: () async {
final String getMobile = (await Storage.getMobile())!;
- UmengCommonSdk.onEvent('open_lock', {
+ ApmHelper.instance.trackEvent('open_lock', {
'lock_name': state.keyInfos.value.lockName!,
'account':
getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
@@ -422,7 +422,7 @@ class LockDetailLogic extends BaseGetXController {
detail: '蓝牙连接失败,断开连接, 开锁失败--OpenLockCommand:$command',
upload: true);
final String getMobile = (await Storage.getMobile())!;
- UmengCommonSdk.onEvent('open_lock', {
+ ApmHelper.instance.trackEvent('open_lock', {
'lock_name': state.keyInfos.value.lockName!,
'account':
getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
diff --git a/lib/main/lockDetail/lockSet/lockSet/lockSet_logic.dart b/lib/main/lockDetail/lockSet/lockSet/lockSet_logic.dart
index 1f33e666..7d6b4a65 100755
--- a/lib/main/lockDetail/lockSet/lockSet/lockSet_logic.dart
+++ b/lib/main/lockDetail/lockSet/lockSet/lockSet_logic.dart
@@ -3,9 +3,9 @@ import 'dart:async';
import 'package:flutter/scheduler.dart';
import 'package:flutter_blue_plus/flutter_blue_plus.dart';
import 'package:get/get.dart';
+import 'package:star_lock/apm/apm_helper.dart';
import 'package:star_lock/login/login/entity/LoginEntity.dart';
import 'package:star_lock/main/lockMian/entity/lockListInfo_entity.dart';
-import 'package:umeng_common_sdk/umeng_common_sdk.dart';
import '../../../../blue/blue_manage.dart';
import '../../../../blue/io_protocol/io_factoryDataReset.dart';
@@ -294,7 +294,7 @@ class LockSetLogic extends BaseGetXController {
isShowBlueConnetctToast: false,
action: () async {
final String getMobile = (await Storage.getMobile())!;
- UmengCommonSdk.onEvent('delet_lock', {
+ ApmHelper.instance.trackEvent('delet_lock', {
'lock_name': BlueManage().connectDeviceName,
'account':
getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
@@ -332,7 +332,7 @@ class LockSetLogic extends BaseGetXController {
token: getTokenList);
} else if (connectionState == BluetoothConnectionState.disconnected) {
final String getMobile = (await Storage.getMobile())!;
- UmengCommonSdk.onEvent('delet_lock', {
+ ApmHelper.instance.trackEvent('delet_lock', {
'lock_name': BlueManage().connectDeviceName,
'account':
getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
@@ -538,6 +538,7 @@ class LockSetLogic extends BaseGetXController {
// 下级界面修改成功后传递数据
StreamSubscription? _passCurrentLockInformationEvent;
+
void initLoadDataAction(BlockSetStateCallback blockSetStateCallback) {
// 蓝牙协议通知传输跟蓝牙之外的数据传输类不一样 eventBus
_passCurrentLockInformationEvent = eventBus
@@ -597,7 +598,7 @@ class LockSetLogic extends BaseGetXController {
);
final String getMobile = (await Storage.getMobile())!;
if (entity.errorCode!.codeIsSuccessful) {
- UmengCommonSdk.onEvent('delet_lock', {
+ ApmHelper.instance.trackEvent('delet_lock', {
'lock_name': BlueManage().connectDeviceName,
'account':
getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
@@ -616,7 +617,7 @@ class LockSetLogic extends BaseGetXController {
eventBus.fire(RefreshLockListInfoDataEvent());
});
} else {
- UmengCommonSdk.onEvent('delet_lock', {
+ ApmHelper.instance.trackEvent('delet_lock', {
'lock_name': BlueManage().connectDeviceName,
'account':
getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
@@ -636,7 +637,7 @@ class LockSetLogic extends BaseGetXController {
state.deleteAdministratorIsHaveAllData.value == true ? 1 : 0);
final String getMobile = (await Storage.getMobile())!;
if (entity.errorCode!.codeIsSuccessful) {
- UmengCommonSdk.onEvent('delet_lock', {
+ ApmHelper.instance.trackEvent('delet_lock', {
'lock_name': BlueManage().connectDeviceName,
'account':
getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
@@ -655,7 +656,7 @@ class LockSetLogic extends BaseGetXController {
eventBus.fire(RefreshLockListInfoDataEvent());
});
} else {
- UmengCommonSdk.onEvent('delet_lock', {
+ ApmHelper.instance.trackEvent('delet_lock', {
'lock_name': BlueManage().connectDeviceName,
'account':
getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
diff --git a/lib/main/lockDetail/passwordKey/passwordKey_perpetual/passwordKey_perpetual_logic.dart b/lib/main/lockDetail/passwordKey/passwordKey_perpetual/passwordKey_perpetual_logic.dart
index 3c9e006e..b0cf5756 100755
--- a/lib/main/lockDetail/passwordKey/passwordKey_perpetual/passwordKey_perpetual_logic.dart
+++ b/lib/main/lockDetail/passwordKey/passwordKey_perpetual/passwordKey_perpetual_logic.dart
@@ -2,11 +2,11 @@ import 'dart:async';
import 'package:flutter_blue_plus/flutter_blue_plus.dart';
import 'package:get/get.dart';
+import 'package:star_lock/apm/apm_helper.dart';
import 'package:star_lock/main/lockDetail/passwordKey/passwordKey_perpetual/passwordKeyEntity.dart';
import 'package:star_lock/main/lockDetail/passwordKey/passwordKey_perpetual/passwordKey_perpetual_state.dart';
import 'package:star_lock/network/api_repository.dart';
import 'package:star_lock/tools/eventBusEventManage.dart';
-import 'package:umeng_common_sdk/umeng_common_sdk.dart';
import '../../../../blue/blue_manage.dart';
import '../../../../blue/io_modelVendor.dart';
@@ -182,7 +182,7 @@ class PasswordKeyPerpetualLogic extends BaseGetXController {
pwdRight: state.isAdministrator.value == true ? 1 : 0);
final String getMobile = (await Storage.getMobile())!;
if (entity.errorCode!.codeIsSuccessful) {
- UmengCommonSdk.onEvent('add_password', {
+ ApmHelper.instance.trackEvent('add_password', {
'lock_name':BlueManage().connectDeviceName,
'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
'date':DateTool().getNowDateWithType(1),
@@ -199,7 +199,7 @@ class PasswordKeyPerpetualLogic extends BaseGetXController {
updatePWDNumberRequest(entity.data!.keyboardPwdId.toString());
}
} else {
- UmengCommonSdk.onEvent('add_password', {
+ ApmHelper.instance.trackEvent('add_password', {
'lock_name':BlueManage().connectDeviceName,
'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
'date':DateTool().getNowDateWithType(1),
@@ -419,7 +419,7 @@ class PasswordKeyPerpetualLogic extends BaseGetXController {
showEasyLoading();
showBlueConnetctToastTimer(action: () async {
final String getMobile = (await Storage.getMobile())!;
- UmengCommonSdk.onEvent('add_password', {
+ ApmHelper.instance.trackEvent('add_password', {
'lock_name':BlueManage().connectDeviceName,
'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
'date':DateTool().getNowDateWithType(1),
@@ -465,7 +465,7 @@ class PasswordKeyPerpetualLogic extends BaseGetXController {
token: getTokenList);
} else if (deviceConnectionState == BluetoothConnectionState.disconnected) {
final String getMobile = (await Storage.getMobile())!;
- UmengCommonSdk.onEvent('add_password', {
+ ApmHelper.instance.trackEvent('add_password', {
'lock_name':BlueManage().connectDeviceName,
'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
'date':DateTool().getNowDateWithType(1),
diff --git a/lib/mine/addLock/saveLock/saveLock_logic.dart b/lib/mine/addLock/saveLock/saveLock_logic.dart
index 2074d793..7e8ae377 100755
--- a/lib/mine/addLock/saveLock/saveLock_logic.dart
+++ b/lib/mine/addLock/saveLock/saveLock_logic.dart
@@ -3,10 +3,10 @@ import 'dart:async';
import 'package:flutter_blue_plus/flutter_blue_plus.dart';
import 'package:get/get.dart';
+import 'package:star_lock/apm/apm_helper.dart';
import 'package:star_lock/main/lockDetail/lockDetail/lockDetail_logic.dart';
import 'package:star_lock/mine/addLock/saveLock/entity/SaveLockEntity.dart';
-import 'package:umeng_common_sdk/umeng_common_sdk.dart';
import '../../../app_settings/app_settings.dart';
import '../../../blue/blue_manage.dart';
@@ -407,7 +407,7 @@ class SaveLockLogic extends BaseGetXController {
state.lockId = entity.data!.lockId!;
final String getMobile = (await Storage.getMobile())!;
- UmengCommonSdk.onEvent('save_lock_result', {
+ ApmHelper.instance.trackEvent('save_lock_result', {
'lock_name':BlueManage().connectDeviceName,
'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
'date':DateTool().getNowDateWithType(1),
@@ -423,7 +423,7 @@ class SaveLockLogic extends BaseGetXController {
state.sureBtnState.value = 0;
final String getMobile = (await Storage.getMobile())!;
- UmengCommonSdk.onEvent('save_lock_result', {
+ ApmHelper.instance.trackEvent('save_lock_result', {
'lock_name':BlueManage().connectDeviceName,
'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
'date':DateTool().getNowDateWithType(1),
diff --git a/lib/mine/mineSet/mineSet/mineSet_logic.dart b/lib/mine/mineSet/mineSet/mineSet_logic.dart
index d888914a..6c7c6679 100755
--- a/lib/mine/mineSet/mineSet/mineSet_logic.dart
+++ b/lib/mine/mineSet/mineSet/mineSet_logic.dart
@@ -2,6 +2,7 @@ import 'dart:async';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
+import 'package:star_lock/apm/apm_helper.dart';
import 'package:star_lock/appRouters.dart';
import 'package:star_lock/login/login/entity/LoginEntity.dart';
import 'package:star_lock/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_entity.dart';
@@ -13,7 +14,6 @@ import 'package:star_lock/tools/push/xs_jPhush.dart';
import 'package:star_lock/tools/showCupertinoAlertView.dart';
import 'package:star_lock/tools/storage.dart';
import 'package:star_lock/versionUndate/versionUndate_entity.dart';
-import 'package:umeng_common_sdk/umeng_common_sdk.dart';
import '../../../../network/api_repository.dart';
import '../../../../tools/baseGetXController.dart';
@@ -131,7 +131,8 @@ class MineSetLogic extends BaseGetXController {
await ApiRepository.to.userLogout(deviceld: getPushDeviceID);
final String getMobile = (await Storage.getMobile())!;
if (entity.errorCode!.codeIsSuccessful) {
- UmengCommonSdk.onEvent('logout', {
+ ApmHelper.instance.logout();
+ ApmHelper.instance.trackEvent('logout', {
'lock_name': BlueManage().connectDeviceName,
'account':
getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
@@ -149,7 +150,8 @@ class MineSetLogic extends BaseGetXController {
XSJPushProvider().initLocalNotification(isCancelLocalPush: true);
Get.offNamedUntil(Routers.starLockLoginPage, (Route route) => false);
} else {
- UmengCommonSdk.onEvent('logout', {
+ ApmHelper.instance.logout();
+ ApmHelper.instance.trackEvent('logout', {
'lock_name': BlueManage().connectDeviceName,
'account':
getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
diff --git a/lib/tools/storage.dart b/lib/tools/storage.dart
index 842d18e5..b76f65c4 100755
--- a/lib/tools/storage.dart
+++ b/lib/tools/storage.dart
@@ -4,6 +4,7 @@
import 'dart:convert';
import 'package:shared_preferences/shared_preferences.dart';
+import 'package:star_lock/apm/apm_helper.dart';
import '../login/login/entity/LoginData.dart';
import '../main/lockMian/entity/lockListInfo_entity.dart';
@@ -192,12 +193,14 @@ class Storage {
final String? data = await Storage.getString(saveUserLoginData);
if (data != null && data.isNotEmpty) {
loginData = LoginData.fromJson(jsonDecode(data));
+ ApmHelper.instance.login(loginData.userid!.toString());
}
// AppLog.log("loginData:$loginData");
return loginData;
}
static Future saveLoginData(LoginData? data) async {
+ ApmHelper.instance.login(data!.userid!.toString());
await Storage.setString(saveUserLoginData, jsonEncode(data));
}
diff --git a/pubspec.yaml b/pubspec.yaml
index 527ac7dd..fd96384f 100755
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -236,7 +236,7 @@ dependencies:
timelines: ^0.1.0
#侧滑删除
flutter_slidable: ^3.0.1
-# audio_service: ^0.18.12
+ # audio_service: ^0.18.12
app_settings: ^5.1.1
flutter_local_notifications: ^17.0.0
fluwx: 4.5.5
@@ -245,11 +245,16 @@ dependencies:
colorfilter_generator: ^0.0.8
file_picker: ^5.3.1
# 错误日志监控
-# flutter_bugly_plugin: ^0.0.9
+ # flutter_bugly_plugin: ^0.0.9
flutter_bugly: ^1.0.2
open_filex: ^4.4.0
+ #
umeng_common_sdk: 1.2.8
+ #
+ #
+ firebase_analytics: 11.3.0
+ #
dependency_overrides:
#强制设置google_maps_flutter_ios 为 2.5.2