diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 868db348..eeb98d56 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -151,8 +151,8 @@ create-release: ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/StarLock/${StarLock_VERSION}/StarLock-${StarLock_VERSION}-*" - 'curl -i --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file build/app/outputs/flutter-apk/starlock-xhj-release-${CI_COMMIT_TAG}.apk "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/StarLock/${StarLock_VERSION}/starlock-xhj-release-${CI_COMMIT_TAG}.apk"' - - 'curl -i --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file build/app/outputs/flutter-apk/starlock-xhj-release-${CI_COMMIT_TAG}.aab - "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/StarLock/${StarLock_VERSION}/starlock-xhj-release-${CI_COMMIT_TAG}.aab"' + - 'curl -i --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file build/app/outputs/flutter-apk/starlock-xhj_bundle-release-${CI_COMMIT_TAG}.aab + "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/StarLock/${StarLock_VERSION}/starlock-xhj_bundle-release-${CI_COMMIT_TAG}.aab"' - 'curl -i --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file build/app/outputs/flutter-apk/starlock-sky-release-${CI_COMMIT_TAG}.apk "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/StarLock/${StarLock_VERSION}/starlock-sky-release-${CI_COMMIT_TAG}.apk"' - 'curl -i --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file build/app/outputs/flutter-apk/starlock-sky-release-${CI_COMMIT_TAG}.aab diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 236a8fbe..a2a967bc 100755 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -33,7 +33,7 @@ - + diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 33ab3865..f3d382c6 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -74,8 +74,6 @@ PODS: - SDWebImage - SwiftyGif - EMASRest (11.1.1.2) - - fast_rsa (0.6.0): - - Flutter - file_picker (0.0.1): - DKImagePickerController/PhotoGallery - Flutter @@ -215,6 +213,12 @@ PODS: - JPush (= 5.3.0) - just_audio (0.0.1): - Flutter + - JVerification (3.2.4): + - JCore (>= 2.1.6) + - jverify (0.0.1): + - Flutter + - JCore (>= 4.6.2) + - JVerification (= 3.2.4) - nanopb (3.30910.0): - nanopb/decode (= 3.30910.0) - nanopb/encode (= 3.30910.0) @@ -274,7 +278,6 @@ DEPENDENCIES: - camera_avfoundation (from `.symlinks/plugins/camera_avfoundation/ios`) - connectivity_plus (from `.symlinks/plugins/connectivity_plus/darwin`) - device_info_plus (from `.symlinks/plugins/device_info_plus/ios`) - - fast_rsa (from `.symlinks/plugins/fast_rsa/ios`) - file_picker (from `.symlinks/plugins/file_picker/ios`) - firebase_analytics (from `.symlinks/plugins/firebase_analytics/ios`) - firebase_core (from `.symlinks/plugins/firebase_core/ios`) @@ -293,6 +296,7 @@ DEPENDENCIES: - JPush - jpush_flutter (from `.symlinks/plugins/jpush_flutter/ios`) - just_audio (from `.symlinks/plugins/just_audio/ios`) + - jverify (from `.symlinks/plugins/jverify/ios`) - network_info_plus (from `.symlinks/plugins/network_info_plus/ios`) - open_filex (from `.symlinks/plugins/open_filex/ios`) - package_info_plus (from `.symlinks/plugins/package_info_plus/ios`) @@ -334,6 +338,7 @@ SPEC REPOS: - ios-voice-processor - JCore - JPush + - JVerification - nanopb - PromisesObjC - SDWebImage @@ -366,8 +371,6 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/connectivity_plus/darwin" device_info_plus: :path: ".symlinks/plugins/device_info_plus/ios" - fast_rsa: - :path: ".symlinks/plugins/fast_rsa/ios" file_picker: :path: ".symlinks/plugins/file_picker/ios" firebase_analytics: @@ -402,6 +405,8 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/jpush_flutter/ios" just_audio: :path: ".symlinks/plugins/just_audio/ios" + jverify: + :path: ".symlinks/plugins/jverify/ios" network_info_plus: :path: ".symlinks/plugins/network_info_plus/ios" open_filex: @@ -451,7 +456,6 @@ SPEC CHECKSUMS: DKImagePickerController: 946cec48c7873164274ecc4624d19e3da4c1ef3c DKPhotoGallery: b3834fecb755ee09a593d7c9e389d8b5d6deed60 EMASRest: 8df6f87836767a9415ad5cc4af739bc9d215b475 - fast_rsa: a1fed69b074093d2e2e3fefae6b821a071649d4c file_picker: ce3938a0df3cc1ef404671531facef740d03f920 Firebase: 9f574c08c2396885b5e7e100ed4293d956218af9 firebase_analytics: 1a66fe8d4375eccff44671ea37897683a78b2675 @@ -468,7 +472,7 @@ SPEC CHECKSUMS: flutter_pcm_sound: de0572ca4f99091cc2abfcc31601b8a4ddd33c0e flutter_voice_processor: 2b89b93d69b02227ae3fd58589ee0bcfa3ca2a82 fluttertoast: e9a18c7be5413da53898f660530c56f35edfba9c - fluwx: c18fd6c16b03a2187cd07d6e48e32a7801962849 + fluwx: daa284756ce53442b3d0417ceeda66e981906811 google_maps_flutter_ios: f135b968a67c05679e0a53538e900b5c174b0d99 GoogleAppMeasurement: 6e49ffac7d3f2c3ded9cc663f912a13b67bbd0de GoogleMaps: 20d7b12be49a14287f797e88e0e31bc4156aaeb4 @@ -480,6 +484,8 @@ SPEC CHECKSUMS: JPush: b71f497a3c1b825c7843fd97f290b05d5cd75f2e jpush_flutter: c87be254790933c0363684169ef9d3d279a5adc5 just_audio: baa7252489dbcf47a4c7cc9ca663e9661c99aafa + JVerification: 0774807f44dd788c78d50303a14e133735807856 + jverify: 337ea43ac1e16f9484f4195abe787d1b6241163c nanopb: fad817b59e0457d11a5dfbde799381cd727c1275 network_info_plus: 6d0c3eb8367b8164fa3fb0c19875e3f59d49697f open_filex: 6e26e659846ec990262224a12ef1c528bb4edbe4 @@ -503,4 +509,4 @@ SPEC CHECKSUMS: PODFILE CHECKSUM: 728f9c851a19709391c77c54ed3556e484b54db6 -COCOAPODS: 1.16.2 +COCOAPODS: 1.14.3 diff --git a/lan/lan_ar.json b/lan/lan_ar.json index cbdfd09c..dbf36900 100644 --- a/lan/lan_ar.json +++ b/lan/lan_ar.json @@ -1121,6 +1121,5 @@ "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "بعد إعادة الضبط ، سيتم حذف بصمات القفل. هل أنت متأكد أنك تريد إعادة ضبطه ؟", "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "بعد إعادة الضبط ، سيتم حذف جهاز التحكم عن بعد للقفل. هل تريد إعادة ضبطه ؟", "版本说明": "تعليمات الإصدار", - "网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "بعد تشغيل البوابة ، اضغط مع الاستمرار على زر إعادة الضبط لمدة 5 ثوانٍ. انقر فوق التالي عندما يومض ضوء المؤشر الأزرق", - "网关添加成功": "تم إضافة البوابة بنجاح" + "一键登录": "تسجيل الدخول بنقرة واحدة" } \ No newline at end of file diff --git a/lan/lan_bg.json b/lan/lan_bg.json index d911a65c..e6ba5228 100644 --- a/lan/lan_bg.json +++ b/lan/lan_bg.json @@ -1121,6 +1121,5 @@ "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "След нулиране, пръстовите отпечатъци на заключването ще бъдат изтрити. Сигурен ли сте, че искате да го нулирате?", "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "След нулиране, дистанционното управление на ключалката ще бъде изтрито. Искате ли да го нулирате?", "版本说明": "Обяснение на версията", - "网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "След като шлюзът е включен, натиснете и задръжте бутона reset за 5 секунди. Щракнете върху следващия, когато синята индикаторна светлина мига", - "网关添加成功": "Gateway added successfully" + "一键登录": "Вход с едно кликване" } \ No newline at end of file diff --git a/lan/lan_bn.json b/lan/lan_bn.json index f8e6b0f5..abf78946 100644 --- a/lan/lan_bn.json +++ b/lan/lan_bn.json @@ -1121,6 +1121,5 @@ "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "ব্যান্ডোটারট্রাসেট, thelock'sferprinতা?", "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "ব্যান্ডোটারপ্রাসেট, নিয়ন্ত্রণের নিয়ন্ত্রণ। ডোডো ডাইভান্টটুরে?", "版本说明": "ভার্সনপরিচিতি", - "网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "ব্যাস্টোকার্টারটিইসপোভেরোর্ডন, প্রেস এবং প্রেসিটিসেট গানটেটনফোর্র 5 সইভিক ds। বিকশিক", - "网关添加成功": "রুপেডডড্রোজেন্টজেক্যালি" + "一键登录": "এক-সিক্লিক্লোগিন" } \ No newline at end of file diff --git a/lan/lan_cs.json b/lan/lan_cs.json index 2fbf2f56..ccdffef9 100644 --- a/lan/lan_cs.json +++ b/lan/lan_cs.json @@ -1121,6 +1121,5 @@ "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Po resetování budou otisky prstů zámku odstraněny. Opravdu ho chcete obnovit?", "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Po resetu bude dálkové ovládání zámku odstraněno. Chcete ho obnovit?", "版本说明": "Verze", - "网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "Po zapnutí brány stiskněte a podržte tlačítko reset po dobu 5 sekund. Klepněte na tlačítko další, když modré světlo ukazatele bliká", - "网关添加成功": "Úspěšně přidaná brána" + "一键登录": "Přihlášení s jedním kliknutím" } \ No newline at end of file diff --git a/lan/lan_da.json b/lan/lan_da.json index 273816ab..3fa32f8c 100644 --- a/lan/lan_da.json +++ b/lan/lan_da.json @@ -1121,6 +1121,5 @@ "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Efter nulstilling vil låsens fingeraftryk blive slettet. Er du sikker på at du vil nulstille den?", "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Efter nulstilling, fjernbetjeningen af låsen vil blive slettet. Vil du nulstille den?", "版本说明": "Versionsbeskrivelse", - "网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "Når gateway er tændt, tryk på og hold nulstillingsknappen i 5 sekunder. Klik på Næste, når den blå indikator lys blinker", - "网关添加成功": "Gateway tilføjet med succet" + "一键登录": "Login med et enkelt klik" } \ No newline at end of file diff --git a/lan/lan_de.json b/lan/lan_de.json index e46ef9e4..adeb27e5 100644 --- a/lan/lan_de.json +++ b/lan/lan_de.json @@ -1121,6 +1121,5 @@ "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Nach dem Zurücksetzen werden die Finger abdrücke des Schlosses gelöscht. Sind Sie sicher, dass Sie es zurücksetzen wollen?", "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Nach dem Zurücksetzen wird die Fernbedienung des Schlosses gelöscht. Willst du es zurücksetzen?", "版本说明": "Versionsbeschreibung", - "网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "Nachdem das Gateway eingesc haltet ist, drücken und halten Sie die Reset-Taste für 5 Sekunden. Klicken Sie auf Weiter, wenn die blaue Anzeige leuchte blinkt", - "网关添加成功": "Gateway erfolgreich hinzugefügt" + "一键登录": "Ein-Klick-Login" } \ No newline at end of file diff --git a/lan/lan_el.json b/lan/lan_el.json index 99d135fd..2ff371f0 100644 --- a/lan/lan_el.json +++ b/lan/lan_el.json @@ -1121,6 +1121,5 @@ "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Μετά την επαναφορά, τα αποτυπώματα της κλειδαριάς θα διαγραφούν. Είστε σίγουροι ότι θέλετε να το επαναφέρετε;", "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Μετά την επαναφορά, το τηλεχειριστήριο της κλειδαριάς θα διαγραφεί. Θέλεις να το επαναφέρεις;", "版本说明": "Περιγραφή έκδοσης", - "网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "Αφού ενεργοποιηθεί η πύλη, πιέστε και κρατήστε το κουμπί επαναφοράς για 5 δευτερόλεπτα. Κάντε κλικ Επόμενο όταν το μπλε φως δείκτη αναβοσβήνει", - "网关添加成功": "Η πύλη προστέθηκε με επιτυχία" + "一键登录": "Σύνδεση ενός κλικ" } \ No newline at end of file diff --git a/lan/lan_en.json b/lan/lan_en.json index 9fd07353..da13b366 100644 --- a/lan/lan_en.json +++ b/lan/lan_en.json @@ -61,8 +61,7 @@ "请输入员工账号": "Enter Employee's Account", "批量授权锁": "Grant multiple locks", "授权管理员拥有操作这把锁的重要权限,请确保只发给我你信任的人": "The authorized administrator will have majority permission to operate this lock.", - "功能开启后,你将可以通过网关远程开锁。此功能的开启和关闭只能在锁附近通过手机蓝牙进行。": "This feature allows you to Unlock the Smart Lock Remotely via a Gateway.This Feature can ONLY be Turned ON or OFF via Bluetooth.", - "功能开启后,你将可以通过网关远程开锁。": "After the function is enabled, you will be able to remotely unlock through the gateway。", + "功能开启后,你将可以通过网关远程开锁。此功能的开启和关闭只能在锁附近通过手机蓝牙进行。":"This feature allows you to Unlock the Smart Lock Remotely via a Gateway.This Feature can ONLY be Turned ON or OFF via Bluetooth.", "排列方式": "List Type", "早到榜": "Early List", "迟到榜": "Late List", @@ -732,18 +731,18 @@ "请选择有效日": "Please select the effective day", "公司名字长度不能小于 6 ": "The length of the company name cannot be less than 6", "已是最新版本": "No updates", - "一": "One", - "二": "Two", - "三": "Three", - "四": "Four", - "五": "Five", - "六": "Six", - "日": "Sun", - "新建短信模版": "Creat SMS template", - "新建邮件模版": "Creat email template", - "自定义短信模版": "SMS template", - "自定义邮件模版": "Email template", - "名称": "Name", + "一":"One", + "二":"Two", + "三":"Three", + "四":"Four", + "五":"Five", + "六":"Six", + "日":"Sun", + "新建短信模版":"Creat SMS template", + "新建邮件模版":"Creat email template", + "自定义短信模版":"SMS template", + "自定义邮件模版":"Email template", + "名称":"Name", "星星锁": "Star lock", "无考勤记录": "No Records", "大家干劲十足": "Everyone comes in time", @@ -780,20 +779,20 @@ "该已锁被删除": "The locked is deleted", "授权管理员只能查看和管理自己下发的钥匙、密码等权限": "The authorized admin can only manage passcodes,ekeys and etccreated by himself.", "添加授权管理员": "Create Admin", - "导出记录": "Export records", - "选择时间段": "Select time period", - "导出": "Export", - "批量导出": "Batch export", - "读取记录": "Refresh Records", - "设备": "Device", - "消息": "Messages", - "智能分析": "Intelligent analytics", - "精准识别设备事件,过滤无效信息": "Accurately identify device events and filter out invalid information", - "系统设置": "System settings", - "系统的全局配置在此项内进行设置": "The global configuration of the system is set in this item", - "导出操作记录": "Export records", - "立即查看": "View", - "导出成功": "Exported successfully", + "导出记录":"Export records", + "选择时间段":"Select time period", + "导出":"Export", + "批量导出":"Batch export", + "读取记录":"Refresh Records", + "设备":"Device", + "消息":"Messages", + "智能分析":"Intelligent analytics", + "精准识别设备事件,过滤无效信息":"Accurately identify device events and filter out invalid information", + "系统设置":"System settings", + "系统的全局配置在此项内进行设置":"The global configuration of the system is set in this item", + "导出操作记录":"Export records", + "立即查看":"View", + "导出成功":"Exported successfully", "发送钥匙": "Send ekey", "进度": "Rate", "失败": "Failed", @@ -926,7 +925,7 @@ "或发生异常事件时": "or an abnormal event occurs", "逗留达到10秒": "Stay for 10 seconds", "约1.5米": "About 1.5 meters", - "随时": "Anytime", + "随时":"Anytime", "立即录像": "Record immediately", "录像时机": "Video timing", "有人出现时录像": "Record when someone appears", @@ -1010,7 +1009,6 @@ "请在锁设置中开启远程开锁": "Please enable remote unlocking in the lock settings", "接听": "Answer", "截图已保存到相册": "Screenshot saved to album", - "录屏已保存到相册": "Screen recording file saved to album", "添加遥控": "Add remote control", "已连接到锁,请按遥控": "Connected to the lock, please press the remote control", "遥控号": "Remote control number", @@ -1094,7 +1092,7 @@ "支持的国家": "Supported countries", "支持的国家值": "USA, Canada, UK, Australia, India, Germany, France, Italy, Spain, Japan", "操作流程": "Operation process", - "操作流程值": "1 Add a lock and gateway with the Smart lock APP \n\n2 Enable the remote unlocking function of the lock in the APP (this function is turned off by default). If you do not have this option, the lock does not support Alexa \n\n3 Add skills to Alexa and authorize them with the Smart lock APP's account and password. After the authorization is successful, you can discover devices under the account \n\n4 Locate the lock in the Alexa app, turn on the voice unlock function, and set the language password \n\n5 The lock can be operated through Alexa", + "操作流程值":"1 Add a lock and gateway with the Smart lock APP \n\n2 Enable the remote unlocking function of the lock in the APP (this function is turned off by default). If you do not have this option, the lock does not support Alexa \n\n3 Add skills to Alexa and authorize them with the Smart lock APP's account and password. After the authorization is successful, you can discover devices under the account \n\n4 Locate the lock in the Alexa app, turn on the voice unlock function, and set the language password \n\n5 The lock can be operated through Alexa", "Google Home": "Google Home", "Action name": "Action name", "ScienerSmart": "ScienerSmart", @@ -1121,20 +1119,8 @@ "分简称": "M", "跟随系统": "Follow system", "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "After reset, the lock's fingerprints will be deleted. Are you sure you want to reset it?", - "通话未接通,已挂断": "Call not connected, hung up", - "通话异常中断": "Abnormal call interruption", - "通话连接失败": "Call connection failed", - "已挂断": "Hanging up", - "正在说话...": "Talking now...", - "设备不在线": "The device is not online", - "设备未配网": "The device is not connected to the network", - "已静音": "The sound has been turned off", - "该锁的远程开锁功能未启用": "The remote unlocking function of this lock is not enabled", - "下载完成,请到相册查看": "Download completed, please go to the album to view", - "猫眼设置为省电模式时无法进行监控,请在猫眼设置中切换为其他模式": "When Cat Eye is set to power-saving mode, monitoring cannot be performed. Please switch to other modes in Cat Eye settings", - "猫眼设置为省电模式时无法进行远程开锁,请在猫眼设置中切换为其他模式": "Remote unlocking is not possible when Cat Eye is set to power-saving mode. Please switch to another mode in Cat Eye settings", "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "After reset, the remote control of the lock will be deleted. Do you want to reset it?", "版本说明": "Version description", "网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "After the gateway is powered on, press and hold the reset button for 5 seconds. Click Next when the blue indicator light flashes", - "网关添加成功": "Gateway added successfully" + "一键登录": "One-click login" } diff --git a/lan/lan_es.json b/lan/lan_es.json index f9aea786..3cf4cf48 100644 --- a/lan/lan_es.json +++ b/lan/lan_es.json @@ -1121,6 +1121,5 @@ "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Después de restablecer, se eliminarán las huellas dactilares del bloqueo. ¿Está seguro de que desea restablecerlo?", "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Después del reinicio, se eliminará el control remoto de la cerradura. ¿Quieres resetearlo?", "版本说明": "Instrucciones de versión", - "网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "Después de encender la puerta de enlace, mantenga presionado el botón de reinicio durante 5 segundos. Haga clic en Siguiente cuando la luz indicadora azul parpadee", - "网关添加成功": "Gateway añadido con éxito" + "一键登录": "Inicio de sesión con un solo clic" } \ No newline at end of file diff --git a/lan/lan_et.json b/lan/lan_et.json index 3a13e07d..3b9ec20c 100644 --- a/lan/lan_et.json +++ b/lan/lan_et.json @@ -1121,6 +1121,5 @@ "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Pärast lähtestamist kustutatakse luku sõrmejäljed. Kas tõesti soovid see lähtestada?", "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Pärast lähtestamist kustutatakse luku kaugjuhtimine. Kas sa tahad seda lähtestada?", "版本说明": "Versiooniteave", - "网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "Kui värav on sisse lülitatud, vajutage nuppu ja hoidke nuppu 5 sekundit. Klõpsa Järgmine, kui sinine indikaator valgus vilgub", - "网关添加成功": "Gateway lisati edukalt" + "一键登录": "Üheklõpsu sisselogimine" } \ No newline at end of file diff --git a/lan/lan_fi.json b/lan/lan_fi.json index 39fe12b0..423b0063 100644 --- a/lan/lan_fi.json +++ b/lan/lan_fi.json @@ -1121,6 +1121,5 @@ "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Lukon sormenjäljet poistetaan. Haluatko varmasti nollataa sen?", "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Nollauksen jälkeen lukon kaukosäädin poistetaan. Haluatko palauttaa sen?", "版本说明": "Versio", - "网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "Kun portti on käytössä, paina ja pidä nollauspainiketta 5 sekunnin ajan. Napsauta Seuraava kun sininen ilmaisin valo vilkkuu", - "网关添加成功": "Gateway lisättiin onnistuneesti" + "一键登录": "Yhden napsautuksen kirjautuminen" } \ No newline at end of file diff --git a/lan/lan_fr.json b/lan/lan_fr.json index c823b2b6..6c0e37b2 100644 --- a/lan/lan_fr.json +++ b/lan/lan_fr.json @@ -1121,6 +1121,5 @@ "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Après réinitialisation, les empreintes digitales de la serrure seront supprimées. Êtes-vous sûr de vouloir le réinitialiser?", "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Après réinitialisation, la télécommande du verrou sera supprimée. Voulez-vous le réinitialiser?", "版本说明": "Explication de la version", - "网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "Après la mise sous tension de la passerelle, appuyez sur le bouton de réinitialisation et maintenez-le enfoncé pendant 5 secondes. Cliquez sur Suivant lorsque le voyant bleu clignote", - "网关添加成功": "Gateway ajouté avec succès" + "一键登录": "Connexion en un clic" } \ No newline at end of file diff --git a/lan/lan_he.json b/lan/lan_he.json index f9815f0f..3cd26f89 100644 --- a/lan/lan_he.json +++ b/lan/lan_he.json @@ -1121,6 +1121,5 @@ "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "לאחר איפוס, טביעות האצבעות של המנעול יימחקו. אתה בטוח שברצונך לאפס את זה?", "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "לאחר איפוס, השליטה מרחוק של המנעול יימחק. אתה רוצה לאפס את זה?", "版本说明": "המידע על גרסה", - "网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "לאחר שהשער מופעל, לחץ והחזק את כפתור האיפוס למשך 5 שניות. לחץ על הבא כאשר האור מחוון כחול מהבהב", - "网关添加成功": "שער הוסיף בהצלחה" + "一键登录": "התחברות בלחיצה אחת" } \ No newline at end of file diff --git a/lan/lan_hk.json b/lan/lan_hk.json index bd9baa49..ed7e097e 100644 --- a/lan/lan_hk.json +++ b/lan/lan_hk.json @@ -603,7 +603,7 @@ "开门方式": "開門方法", "请选择": "請選擇", "家人": "家人", - "保存": "保存", + "保存": "救", "APP推送": "APP推送", "管理员": "管理", "未启用": "未啟用", @@ -1121,6 +1121,5 @@ "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "重置之後,鎖嘅指紋將被刪除。 你確定要重置它啊?", "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "重置之後,鎖嘅遙控器將被刪除。 是否要重置它?", "版本说明": "版本說明", - "网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "網關上電之後,長按重置掣5秒鐘。 單擊藍色指示燈閃爍時嘅下一步", - "网关添加成功": "已成功添加網關" + "一键登录": "一键登录" } \ No newline at end of file diff --git a/lan/lan_hr.json b/lan/lan_hr.json index c695eab7..180f7b98 100644 --- a/lan/lan_hr.json +++ b/lan/lan_hr.json @@ -1121,6 +1121,5 @@ "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Nakon resetovanja, otisci brave će biti izbrisani. Jeste li sigurni da ga želite resetirati?", "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Nakon resetovanja, daljinski upravljač brave će biti izbrisan. Hoæeš da ga resetuješ?", "版本说明": "Informacije o verziji", - "网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "Nakon što se uključi prolaz, pritisnite i zadržite dugme za reset 5 sekundi. Kliknite slijedeći kada svjetlo plavog indikatora bljeska", - "网关添加成功": "Gateway je uspješno dodano" + "一键登录": "Prijavljivanje jednog klika" } \ No newline at end of file diff --git a/lan/lan_hu.json b/lan/lan_hu.json index ed032eed..71b13b85 100644 --- a/lan/lan_hu.json +++ b/lan/lan_hu.json @@ -1121,6 +1121,5 @@ "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "A reset után a zár ujjlenyomatai törlődnek. Biztos vagy benne, hogy vissza szeretné állítani?", "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "A reset után a zár távirányítója törlődik. Szeretné visszaállítani?", "版本说明": "Versió leírás", - "网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "Az átjáró bekapcsolása után 5 másodpercig nyomja meg a reset gombot. Kattintson a következő gombra, amikor a kék jelző fény villog", - "网关添加成功": "Átjáró sikeresen hozzáadott" + "一键登录": "Egykattintásos bejelentkezés" } \ No newline at end of file diff --git a/lan/lan_id.json b/lan/lan_id.json index c017ce28..7604e091 100644 --- a/lan/lan_id.json +++ b/lan/lan_id.json @@ -1121,6 +1121,5 @@ "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Setelah mengulang, sidik jari kunci akan dihapus. Yakin ingin meresetnya?", "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Setelah reset, remote control kunci akan dihapus. Ingin mengatur ulang?", "版本说明": "Catatan versi", - "网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "Setelah gateway dinyalakan, tekan dan tahan tombol Atur ulang selama 5 detik. Klik berikutnya ketika lampu indikator biru berkedip", - "网关添加成功": "Gateway berhasil ditambahkan" + "一键登录": "Masuk satu klik" } \ No newline at end of file diff --git a/lan/lan_it.json b/lan/lan_it.json index c4994c84..68d93fb7 100644 --- a/lan/lan_it.json +++ b/lan/lan_it.json @@ -1121,6 +1121,5 @@ "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Dopo il reset, le impronte digitali del lucchetto verranno cancellate. Sei sicuro di volerlo resettare?", "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Dopo il reset, il telecomando del lucchetto verrà eliminato. Vuoi resettarlo?", "版本说明": "Versione", - "网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "Dopo che il gateway è acceso, premere e tenere premuto il pulsante di reset per 5 secondi. Fai clic su Avanti quando la spia blu lampeggia", - "网关添加成功": "Gateway aggiunto correttamente" + "一键登录": "Accesso con un clic" } \ No newline at end of file diff --git a/lan/lan_ja.json b/lan/lan_ja.json index 3be113b9..9dfb40de 100644 --- a/lan/lan_ja.json +++ b/lan/lan_ja.json @@ -1121,6 +1121,5 @@ "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "リセット後、ロックの指紋は削除されます。リセットしてもよろしいですか。", "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "リセット後、ロックのリモコンが削除されます。リセットしますか?", "版本说明": "バージョン説明", - "网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "ゲートウェイの電源がオンになった後、リセットボタンを5秒間押し続けます。青いインジケータライトが点滅したら、 [Next] をクリックします", - "网关添加成功": "ゲートウェイの追加に成功" + "一键登录": "ワンクリックログイン" } \ No newline at end of file diff --git a/lan/lan_keys.json b/lan/lan_keys.json index 3a37f570..2b4c4bb1 100755 --- a/lan/lan_keys.json +++ b/lan/lan_keys.json @@ -62,7 +62,6 @@ "批量授权锁": "批量授权锁", "授权管理员拥有操作这把锁的重要权限,请确保只发给我你信任的人": "授权管理员拥有操作这把锁的重要权限,请确保只发给我你信任的人", "功能开启后,你将可以通过网关远程开锁。此功能的开启和关闭只能在锁附近通过手机蓝牙进行。": "功能开启后,你将可以通过网关远程开锁。此功能的开启和关闭只能在锁附近通过手机蓝牙进行。", - "功能开启后,你将可以通过网关远程开锁。": "功能开启后,你将可以通过网关远程开锁。", "排列方式": "排列方式", "早到榜": "早到榜", "迟到榜": "迟到榜", @@ -1013,7 +1012,6 @@ "请在锁设置中开启远程开锁": "请在锁设置中开启远程开锁", "接听": "接听", "截图已保存到相册": "截图已保存到相册", - "录屏已保存到相册": "录屏已保存到相册", "添加遥控": "添加遥控", "已连接到锁,请按遥控": "已连接到锁,请按遥控", "遥控号": "遥控号", @@ -1122,19 +1120,7 @@ "分简称": "分简称", "跟随系统": "跟随系统", "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "重置后,该锁的指纹都将被删除哦,确认要重置吗?", - "通话未接通,已挂断": "通话未接通,已挂断", - "通话异常中断": "通话异常中断", - "通话连接失败": "通话连接失败", - "已挂断": "已挂断", - "正在说话...": "正在说话...", - "设备不在线": "设备不在线", - "设备未配网": "设备未配网", - "已静音": "已静音", - "该锁的远程开锁功能未启用": "该锁的远程开锁功能未启用", - "下载完成,请到相册查看": "下载完成,请到相册查看", - "猫眼设置为省电模式时无法进行监控,请在猫眼设置中切换为其他模式": "猫眼设置为省电模式时无法进行监控,请在猫眼设置中切换为其他模式", - "猫眼设置为省电模式时无法进行远程开锁,请在猫眼设置中切换为其他模式": "猫眼设置为省电模式时无法进行远程开锁,请在猫眼设置中切换为其他模式", "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "重置后,该锁的遥控都将被删除哦,确认要重置吗?", "版本说明": "版本说明", - "网关添加成功": "网关添加成功" + "一键登录": "一键登录" } diff --git a/lan/lan_kk.json b/lan/lan_kk.json index d52ad5fa..bddeb6ce 100644 --- a/lan/lan_kk.json +++ b/lan/lan_kk.json @@ -1121,6 +1121,5 @@ "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Қайта ысырып тастау Шынымен ысырып тастауды қалайсыз ба?", "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Қайта ысырып ысырып тасымалдауын өшіріледі. Оны ысырып тастауды қалайсыз ба?", "版本说明": "Версиятын көрсету", - "网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "Шығыс жегілді соң, ысырып тасымалдау батырмасын басып 5 секунд басыңыз. Көк белгісін жарыялды, келесі басыңыз", - "网关添加成功": "Шлюз сәтті қосылды" + "一键登录": "Бір шертті кіру" } \ No newline at end of file diff --git a/lan/lan_ko.json b/lan/lan_ko.json index 97bfe25a..af8a531c 100644 --- a/lan/lan_ko.json +++ b/lan/lan_ko.json @@ -1121,6 +1121,5 @@ "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "재설정 후 잠금 장치의 지문이 삭제됩니다. 당신은 그것을 재설정 하시겠습니까?", "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "재설정 후 잠금 장치의 리모컨이 삭제됩니다. 당신은 그것을 재설정 하시겠습니까?", "版本说明": "버전 설명", - "网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "게이트웨이의 전원이 켜지면 재설정 버튼을 5 초 동안 누르고 있습니다. 파란색 표시등이 깜박일 때 다음을 클릭하십시오.", - "网关添加成功": "게이트웨이가 성공적으로 추가되었습니다." + "一键登录": "원 클릭 로그인" } \ No newline at end of file diff --git a/lan/lan_lt.json b/lan/lan_lt.json index 57cd60ac..95763916 100644 --- a/lan/lan_lt.json +++ b/lan/lan_lt.json @@ -1121,6 +1121,5 @@ "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Po reset užrakto pirštų atspaudai bus ištrinti. Ar tikrai norite jį atkurti?", "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Po reset, nuotolinis valdymo pultas užraktas bus ištrintas. Ar norite jį atkurti?", "版本说明": "Versijos aprašymas", - "网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "Įjungus vartus, 5 sekundes paspauskite ir palaikykite mygtuką \"reset\". Spustelėkite toliau, kai mėlyna indikatoriaus šviesa mirksi", - "网关添加成功": "Vartai sėkmingai pridėta" + "一键登录": "Vieno paspaudimo prisijungimas" } \ No newline at end of file diff --git a/lan/lan_ms.json b/lan/lan_ms.json index a3651e49..c7c5f5d4 100644 --- a/lan/lan_ms.json +++ b/lan/lan_ms.json @@ -1121,6 +1121,5 @@ "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Selepas menetapkan semula, cap jari kunci akan dipadamkan. Adakah anda pasti anda mahu menetapkan semula?", "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Selepas menetapkan semula, kawalan jauh kunci akan dipadamkan. Adakah anda mahu menetapkan semula?", "版本说明": "Penerangan versi", - "网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "Selepas pintu masuk dihidupkan, tekan dan tahan butang reset selama 5 saat. Klik seterusnya apabila lampu penunjuk biru berkelip", - "网关添加成功": "Get laluan ditambah berjaya" + "一键登录": "Log masuk satu klik" } \ No newline at end of file diff --git a/lan/lan_nl.json b/lan/lan_nl.json index fe7280f8..9e1cf0f8 100644 --- a/lan/lan_nl.json +++ b/lan/lan_nl.json @@ -1121,6 +1121,5 @@ "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Na het resetten worden de vingerafdrukken van het slot verwijderd. Weet je zeker dat je het wilt resetten?", "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Na het resetten wordt de afstandsbediening van het slot verwijderd. Wilt u het resetten?", "版本说明": "Versieomschrijving", - "网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "Nadat de gateway is ingeschakeld, houdt u de resetknop 5 seconden ingedrukt. Klik op Volgende wanneer het blauwe lampje knippert", - "网关添加成功": "Gateway met succes toegevoegd" + "跟随系统": "Systeem volgen", } \ No newline at end of file diff --git a/lan/lan_pl.json b/lan/lan_pl.json index 91216e70..d3d3cce4 100644 --- a/lan/lan_pl.json +++ b/lan/lan_pl.json @@ -1121,6 +1121,5 @@ "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Po zresetowaniu odciski palców zamka zostaną usunięte. Czy na pewno chcesz go zresetować?", "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Po zresetowaniu zdalne sterowanie zamkiem zostanie usunięte. Czy chcesz go zresetować?", "版本说明": "Wersja", - "网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "Po włączeniu bramy naciśnij i przytrzymaj przycisk resetowania przez 5 sekund. Kliknij przycisk Dalej, gdy miga niebieska lampka kontrolna", - "网关添加成功": "Gateway dodany pomyślnie" + "一键登录": "Login jednym kliknięciem" } \ No newline at end of file diff --git a/lan/lan_pt.json b/lan/lan_pt.json index 035ea4c6..7ab9de8b 100644 --- a/lan/lan_pt.json +++ b/lan/lan_pt.json @@ -1121,6 +1121,5 @@ "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Após a redefinição, as impressões digitais do bloqueio serão apagadas. Tens a certeza que queres redefini-lo?", "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Após a reinicialização, o controle remoto do bloqueio será excluído. Você quer redefini-lo?", "版本说明": "Descrição da versão", - "网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "Depois que o gateway estiver ligado, pressione e segure o botão de reset por 5 segundos. Clique Próximo quando a luz indicadora azul pisca", - "网关添加成功": "Gateway adicionado com sucesso" + "一键登录": "Login com um clique" } \ No newline at end of file diff --git a/lan/lan_ro.json b/lan/lan_ro.json index 71d132d9..c5769acb 100644 --- a/lan/lan_ro.json +++ b/lan/lan_ro.json @@ -1121,6 +1121,5 @@ "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "După resetare, amprentele încuietorii vor fi şterse. Sigur doriți să-l resetați?", "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "După resetare, telecomanda de blocare va fi ştersă. Vrei să-l resetezi?", "版本说明": "Descrierea versiunii", - "网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "După pornirea poarta, apăsați și țineți butonul de resetare timp de 5 secunde. Click Next atunci când lumina indicator albastru lăturare", - "网关添加成功": "Gateway adăugat cu succes" + "一键登录": "Autentificare cu un singur clicName" } \ No newline at end of file diff --git a/lan/lan_ru.json b/lan/lan_ru.json index bd922b54..807f2594 100644 --- a/lan/lan_ru.json +++ b/lan/lan_ru.json @@ -1121,6 +1121,5 @@ "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "После сброса отпечатки пальцев замка будут удалены. Вы уверены, что хотите его перезагрузить?", "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "После сброса пульт дистанционного управления замком будет удален. А вы хотите его сбросить?", "版本说明": "Объяснение версии", - "网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "После включения шлюза нажмите и удерживайте кнопку сброса в течение 5 секунд. Нажмите Далее, когда синий индикатор мигает", - "网关添加成功": "Шлюз успешно добавлен" + "一键登录": "Вход в один клик" } \ No newline at end of file diff --git a/lan/lan_sk.json b/lan/lan_sk.json index 905391a9..aa3e342d 100644 --- a/lan/lan_sk.json +++ b/lan/lan_sk.json @@ -1121,6 +1121,5 @@ "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Po resetovaní budú prstové odtlačky zámku vymazané. Ste si istí, že chcete obnoviť?", "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Po resetovaní bude diaľkové ovládanie zámku vymazané. Chcete ho obnoviť?", "版本说明": "Popis verzie", - "网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "Po zapnutí brány stlačte a podržte tlačidlo reset 5 sekúnd. Kliknite na ďalšie, keď modrý indikátor svetlo bliká", - "网关添加成功": "Brána úspešne pridaná" + "一键登录": "Prihlásenie jedným kliknutím" } \ No newline at end of file diff --git a/lan/lan_sr_cyrl.json b/lan/lan_sr_cyrl.json index a93ce7aa..18bf31eb 100644 --- a/lan/lan_sr_cyrl.json +++ b/lan/lan_sr_cyrl.json @@ -1121,6 +1121,5 @@ "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Након ресетовања, отисци прстију браве ће бити избрисани. Да ли сте сигурни да желите да га ресетујете?", "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Након ресетовања, даљински управљач браве ће бити избрисан. Да ли желите да га ресетујете?", "版本说明": "Опис верзије", - "网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "Након што је гатеваи укључен, притисните и држите дугме за ресетовање за 5 секунди. Кликните Следећи када плава лампица трепери", - "网关添加成功": "Гатеваи је успешно додао" + "一键登录": "Пријава једним кликом" } \ No newline at end of file diff --git a/lan/lan_sv.json b/lan/lan_sv.json index cc28de40..201f17df 100644 --- a/lan/lan_sv.json +++ b/lan/lan_sv.json @@ -1121,6 +1121,5 @@ "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Efter återställd, kommer låsets fingeravtryck tas bort. Är du säker på att du vill återställa den?", "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Efter återställd, fjärrkontrollen på låset tas bort. Vill du återställa den?", "版本说明": "Versionsbeskrivning", - "网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "När gateway är aktiverad, tryck på och håll återställningsknappen i 5 sekunder. Klicka Nästa när den blå indikator ljus blinkar", - "网关添加成功": "Gateway lagt till med lyckad" + "一键登录": "Ett klick inloggning" } \ No newline at end of file diff --git a/lan/lan_th.json b/lan/lan_th.json index 72dadd92..4e9a6c4c 100644 --- a/lan/lan_th.json +++ b/lan/lan_th.json @@ -1121,6 +1121,5 @@ "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "หลังจากรีเซ็ตแล้วลายนิ้วมือของล็อคจะถูกลบออกคุณแน่ใจว่าอยากจะรีเซ็ต?", "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "หลังจากรีเซ็ตแล้วรีโมทคอนโทรลของล็อคจะถูกลบออกคุณต้องการรีเซ็ตไหม", "版本说明": "คำอธิบายรุ่น", - "网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "หลังจากเปิดเกตเวย์แล้วให้กดปุ่มรีเซ็ตค้างไว้5วินาทีคลิกถัดไปเมื่อไฟแสดงสถานะสีน้ำเงินกะพริบ", - "网关添加成功": "เพิ่มเกตเวย์เรียบร้อยแล้ว" + "一键登录": "เข้าสู่ระบบด้วยคลิกเดียว" } \ No newline at end of file diff --git a/lan/lan_tr.json b/lan/lan_tr.json index 224695c1..6341609f 100644 --- a/lan/lan_tr.json +++ b/lan/lan_tr.json @@ -1121,6 +1121,5 @@ "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Sıfırlamadan sonra, kilidin parmak izleri silinecektir. Sıfırlamak istediğine emin misin?", "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Sıfırladıktan sonra, kilidin uzaktan kumandası silinecektir. Sıfırlamak ister misin?", "版本说明": "Sürüm açıklaması", - "网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "Ağ geçidi açıldıktan sonra sıfırlama düğmesine 5 saniye basılı tutun. Mavi gösterge ışığı yanıp söndüğünde İleri'ye tıklayın", - "网关添加成功": "Ağ geçidi başarıyla eklendi" + "一键登录": "Tek tıklama giriş" } \ No newline at end of file diff --git a/lan/lan_tw.json b/lan/lan_tw.json index 58974b99..26eb951c 100644 --- a/lan/lan_tw.json +++ b/lan/lan_tw.json @@ -1121,6 +1121,5 @@ "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "重置後,鎖的指紋將被刪除。 是否確實要重置它?", "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "重置後,鎖的遙控器將被刪除。 是否要重置它?", "版本说明": "版本說明", - "网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "網關通電後,按住reset按鈕5秒鐘。 當藍色指示燈閃爍時,單擊 「下一步」", - "网关添加成功": "已成功添加網關" + "一键登录": "一鍵登錄" } \ No newline at end of file diff --git a/lan/lan_uk.json b/lan/lan_uk.json index 4202223b..f48ef8a6 100644 --- a/lan/lan_uk.json +++ b/lan/lan_uk.json @@ -1121,6 +1121,5 @@ "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Після скидання відбитки пальців замка будуть видалені. Ви впевнені, що хочете скинути налаштування?", "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Після скидання пульт дистанційного керування замком буде видалено. Хочете його скинути?", "版本说明": "Опис версії", - "网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "Після ввімкнення шлюзу натисніть і утримуйте кнопку скидання протягом 5 секунд. Натисніть «Далі», коли синій індикатор почне блимати", - "网关添加成功": "Шлюз успішно додано" + "一键登录": "Вхід в один клік" } \ No newline at end of file diff --git a/lan/lan_vi.json b/lan/lan_vi.json index 593d87b7..9be34b34 100644 --- a/lan/lan_vi.json +++ b/lan/lan_vi.json @@ -1121,6 +1121,5 @@ "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Sau khi đặt lại, dấu vân tay của khóa sẽ bị xóa. Bạn có chắc chắn muốn thiết lập lại nó?", "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Sau khi đặt lại, điều khiển từ xa của khóa sẽ bị xóa. Bạn có muốn đặt lại không?", "版本说明": "Thông tin phiên bản", - "网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "Sau khi cổng được bật, Nhấn và giữ nút Reset trong 5 giây. Nhấp vào tiếp theo khi đèn báo màu xanh lam nhấp nháy", - "网关添加成功": "Gateway đã thêm thành công" + "一键登录": "Đăng nhập bằng một cú nhấp chuột" } \ No newline at end of file diff --git a/lan/lan_zh.json b/lan/lan_zh.json index 4fb4b3a2..848858f9 100755 --- a/lan/lan_zh.json +++ b/lan/lan_zh.json @@ -62,7 +62,6 @@ "批量授权锁": "批量授权锁", "授权管理员拥有操作这把锁的重要权限,请确保只发给我你信任的人": "授权管理员拥有操作这把锁的重要权限,请确保只发给我你信任的人", "功能开启后,你将可以通过网关远程开锁。此功能的开启和关闭只能在锁附近通过手机蓝牙进行。": "功能开启后,你将可以通过网关远程开锁。此功能的开启和关闭只能在锁附近通过手机蓝牙进行。", - "功能开启后,你将可以通过网关远程开锁。": "功能开启后,你将可以通过网关远程开锁。", "排列方式": "排列方式", "早到榜": "早到榜", "迟到榜": "迟到榜", @@ -1011,7 +1010,6 @@ "请在锁设置中开启远程开锁": "请在锁设置中开启远程开锁", "接听": "接听", "截图已保存到相册": "截图已保存到相册", - "录屏已保存到相册": "录屏已保存到相册", "添加遥控": "添加遥控", "已连接到锁,请按遥控": "已连接到锁,请按遥控", "遥控号": "遥控号", @@ -1122,19 +1120,7 @@ "分简称": "分", "跟随系统": "跟随系统", "重置后,该锁的指纹都将被删除哦,确认要重置吗?": "重置后,该锁的指纹都将被删除哦,确认要重置吗?", - "通话未接通,已挂断": "通话未接通,已挂断", - "通话异常中断": "通话异常中断", - "通话连接失败": "通话连接失败", - "已挂断": "已挂断", - "正在说话...": "正在说话...", - "设备不在线": "设备不在线", - "设备未配网": "设备未配网", - "已静音": "已静音", - "该锁的远程开锁功能未启用": "该锁的远程开锁功能未启用", - "下载完成,请到相册查看": "下载完成,请到相册查看", - "猫眼设置为省电模式时无法进行监控,请在猫眼设置中切换为其他模式": "猫眼设置为省电模式时无法进行监控,请在猫眼设置中切换为其他模式", - "猫眼设置为省电模式时无法进行远程开锁,请在猫眼设置中切换为其他模式": "猫眼设置为省电模式时无法进行远程开锁,请在猫眼设置中切换为其他模式", "重置后,该锁的遥控都将被删除哦,确认要重置吗?": "重置后,该锁的遥控都将被删除哦,确认要重置吗?", "版本说明": "版本说明", - "网关添加成功": "网关添加成功" + "一键登录": "一键登录" } diff --git a/lib/login/login/starLock_login_logic.dart b/lib/login/login/starLock_login_logic.dart index ba9f7629..570fa80c 100755 --- a/lib/login/login/starLock_login_logic.dart +++ b/lib/login/login/starLock_login_logic.dart @@ -1,6 +1,9 @@ +import 'dart:io'; + import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:star_lock/apm/apm_helper.dart'; +import 'package:jverify/jverify.dart'; import 'package:star_lock/appRouters.dart'; import 'package:star_lock/app_settings/app_settings.dart'; import 'package:star_lock/blue/blue_manage.dart'; @@ -17,6 +20,7 @@ import '../../mine/mine/starLockMine_logic.dart'; import '../../network/api_repository.dart'; import '../../tools/dateTool.dart'; import '../../tools/eventBusEventManage.dart'; +import '../../tools/jverify_one_click_login.dart'; import '../../tools/showTipView.dart'; import '../../tools/storage.dart'; import '../register/entity/checkIP_entity.dart'; @@ -97,6 +101,43 @@ class StarLockLoginLogic extends BaseGetXController { } } + Future oneClickLoginAction() async { + await JverifyOneClickLoginManage().loginAuth((e) async { + final int? code = e.code; + final String? content = e.message; + // final String operator = map['operator']; + AppLog.log('1111code:$code content:$content'); + if (code == 6000) { + final LoginEntity entity = await ApiRepository.to.oneClickLogin( + loginType: '3', + loginToken: content ?? '', + deviceInfo: state.deviceInfoMap); + if (entity.errorCode!.codeIsSuccessful) { + ApmHelper.instance.trackEvent('login_result', { + 'account': state.emailOrPhone.value, + 'date': DateTool().getNowDateWithType(1), + 'login_res': '成功', + }); + + Storage.saveLoginData(entity.data); + Storage.setBool(saveIsVip, entity.data!.isVip == 1); + eventBus.fire(MineInfoChangeRefreshUI()); + if (Get.isRegistered()) { + Get.find().getStarLockInfo(isUnShowLoading: true); + } + Get.offNamedUntil(Routers.starLockMain, (Route route) => false); + BlueManage().scanDevices.clear(); //清除设备缓存 + } else { + ApmHelper.instance.trackEvent('login_result', { + 'account': state.emailOrPhone.value, + 'date': DateTool().getNowDateWithType(1), + 'login_res': '${entity.errorCode}--${entity.errorMsg}', + }); + } + } + }); + } + Future checkIpAction() async { final CheckIPEntity entity = await ApiRepository.to.checkIpAction(ip: ''); if (entity.errorCode!.codeIsSuccessful) { @@ -134,6 +175,16 @@ class StarLockLoginLogic extends BaseGetXController { state.canNext.value = state.pwdIsOK && state.isEmailOrPhone; } + @override + Future onInit() async { + super.onInit(); + + JverifyOneClickLoginManage(); + oneClickLoginAction(); + state.isCheckVerifyEnable.value = + await JverifyOneClickLoginManage().checkVerifyEnable(); + } + @override void onClose() { state.onClose(); diff --git a/lib/login/login/starLock_login_page.dart b/lib/login/login/starLock_login_page.dart index ea0793c0..0c39c91a 100755 --- a/lib/login/login/starLock_login_page.dart +++ b/lib/login/login/starLock_login_page.dart @@ -1,3 +1,4 @@ +import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; @@ -14,6 +15,7 @@ import '../../appRouters.dart'; import '../../app_settings/app_colors.dart'; import '../../common/XSConstantMacro/XSConstantMacro.dart'; import '../../tools/commonItem.dart'; +import '../../tools/jverify_one_click_login.dart'; import '../../tools/submitBtn.dart'; import '../../tools/tf_loginInput.dart'; import '../../tools/titleAppBar.dart'; @@ -237,6 +239,24 @@ class _StarLockLoginPageState extends State { } } : null)), + // SizedBox(height: 20.w), + // Obx(() => Visibility( + // visible: state.isCheckVerifyEnable.value, + // child: SubmitBtn( + // btnName: '一键登录', + // fontSize: 28.sp, + // borderRadius: 20.w, + // padding: EdgeInsets.only(top: 25.w, bottom: 25.w), + // // isDisabled: state.canNext.value, + // onClick: () { + // if (state.agree.value == false) { + // logic.showToast('请先同意用户协议及隐私政策'.tr); + // return; + // } else { + // logic.oneClickLoginAction(); + // } + // }), + // )), SizedBox(height: 50.w), Row( mainAxisAlignment: MainAxisAlignment.center, @@ -261,24 +281,23 @@ class _StarLockLoginPageState extends State { child: SizedBox( width: 10.sp, )), - if (F.isLite) - Container() - else - GestureDetector( - child: SizedBox( - // width: 150.w, - height: 50.h, - // color: Colors.red, - child: Center( - child: Text('演示模式'.tr, - style: TextStyle( - fontSize: 22.sp, color: AppColors.mainColor)), + Obx(() => Visibility( + visible: state.isCheckVerifyEnable.value, + child: GestureDetector( + child: SizedBox( + // width: 150.w, + height: 50.h, + // color: Colors.red, + child: Center( + child: Text('一键登录'.tr, + style: TextStyle( + fontSize: 22.sp, + color: AppColors.mainColor)), + ), + ), + onTap: logic.oneClickLoginAction, ), - ), - onTap: () { - Get.toNamed(Routers.demoModeLockDetailPage); - }, - ) + )) ], ), ], diff --git a/lib/login/login/starLock_login_state.dart b/lib/login/login/starLock_login_state.dart index 41bc0fef..ec224880 100755 --- a/lib/login/login/starLock_login_state.dart +++ b/lib/login/login/starLock_login_state.dart @@ -45,6 +45,8 @@ class StarLockLoginState { 'deviceType': 0 }.obs; + RxBool isCheckVerifyEnable = false.obs; + void onClose() { // emailOrPhoneController.dispose(); // pwdController.dispose(); diff --git a/lib/login/login/starLock_login_xhj_page.dart b/lib/login/login/starLock_login_xhj_page.dart index 8138db92..b0810366 100755 --- a/lib/login/login/starLock_login_xhj_page.dart +++ b/lib/login/login/starLock_login_xhj_page.dart @@ -1,3 +1,4 @@ +import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; @@ -186,14 +187,12 @@ class _StarLockLoginPageState extends State { onPressed: () async { final dynamic data = await Get.toNamed(Routers.starLockRegisterPage); - if (data != null) { - state.emailOrPhoneController.text = - data['phoneOrEmailStr']; - logic.checkNext(state.emailOrPhoneController); - state.pwdController.text = data['pwd']; - logic.checkNext(state.pwdController); - setState(() {}); - } + state.emailOrPhoneController.text = + data['phoneOrEmailStr']; + logic.checkNext(state.emailOrPhoneController); + state.pwdController.text = data['pwd']; + logic.checkNext(state.pwdController); + setState(() {}); }, style: ElevatedButton.styleFrom( backgroundColor: AppColors.mainColor), @@ -229,25 +228,25 @@ class _StarLockLoginPageState extends State { child: SizedBox( width: 10.sp, )), - if (F.isLite) - Container() - else - GestureDetector( - child: SizedBox( - // width: 150.w, - height: 50.h, - // color: Colors.red, - child: Center( - child: Text('演示模式'.tr, - style: TextStyle( - fontSize: 22.sp, - color: AppColors.mainColor)), + Obx(() => Visibility( + visible: state.isCheckVerifyEnable.value, + child: GestureDetector( + child: SizedBox( + // width: 150.w, + height: 50.h, + // color: Colors.red, + child: Center( + child: Text('一键登录'.tr, + style: TextStyle( + fontSize: 22.sp, + color: AppColors.mainColor)), + ), + ), + onTap: () async { + logic.oneClickLoginAction(); + }, ), - ), - onTap: () { - Get.toNamed(Routers.demoModeLockDetailPage); - }, - ) + )) ], ), ], diff --git a/lib/main/lockDetail/doorLockLog/doorLockLog_logic.dart b/lib/main/lockDetail/doorLockLog/doorLockLog_logic.dart index f8bc3360..052ac7e8 100755 --- a/lib/main/lockDetail/doorLockLog/doorLockLog_logic.dart +++ b/lib/main/lockDetail/doorLockLog/doorLockLog_logic.dart @@ -3,6 +3,7 @@ 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/app_settings/app_settings.dart'; import 'package:star_lock/main/lockDetail/doorLockLog/doorLockLog_entity.dart'; import 'package:star_lock/main/lockDetail/doorLockLog/doorLockLog_state.dart'; @@ -68,34 +69,38 @@ class DoorLockLogLogic extends BaseGetXController { final List uploadList = []; for (int i = 0; i < getList.length; i++) { final List indexList = getList[i]; - // AppLog.log("indexList:$indexList"); - final Map indexMap = {}; - indexMap['type'] = indexList[0].toString(); + try { + // AppLog.log("indexList:$indexList"); + final Map indexMap = {}; + indexMap['type'] = indexList[0].toString(); - final int userNo = (indexList[1] * 256) + indexList[2]; - indexMap['user'] = userNo.toString(); - // AppLog.log('userNouserNouserNouserNo:$userNo'); + final int userNo = (indexList[1] * 256) + indexList[2]; + indexMap['user'] = userNo.toString(); + // AppLog.log('userNouserNouserNouserNo:$userNo'); - final List passwordData = indexList.sublist(7, 17); - final String password = utf8String(passwordData); - indexMap['password'] = password.toString(); - // AppLog.log('passwordpasswordpassword:$password'); + final List passwordData = indexList.sublist(7, 17); + final String password = utf8String(passwordData); + indexMap['password'] = password.toString(); + // AppLog.log('passwordpasswordpassword:$password'); - indexMap['success'] = '1'; + indexMap['success'] = '1'; - final int time = (0xff & indexList[3]) << 24 | - (0xff & indexList[4]) << 16 | - (0xff & indexList[5]) << 8 | - (0xFF & indexList[6]); - final int operateDate = time * 1000; - final int serverTime = state.currentDate; - if (DateTime.fromMillisecondsSinceEpoch(operateDate).isAfter( - DateTime.fromMillisecondsSinceEpoch(serverTime * 1000))) { - // AppLog.log('operateDate:$operateDate state.currentDate:${state.currentDate}'); - continue; + final int time = (0xff & indexList[3]) << 24 | + (0xff & indexList[4]) << 16 | + (0xff & indexList[5]) << 8 | + (0xFF & indexList[6]); + final int operateDate = time * 1000; + final int serverTime = state.currentDate; + if (DateTime.fromMillisecondsSinceEpoch(operateDate).isAfter( + DateTime.fromMillisecondsSinceEpoch(serverTime * 1000))) { + // AppLog.log('operateDate:$operateDate state.currentDate:${state.currentDate}'); + continue; + } + indexMap['date'] = '$operateDate'; + uploadList.add(indexMap); + } catch (e) { + AppLog.log('操作记录:$indexList,解析失败,跳过该跳记录,进行下一条记录解析。'); } - indexMap['date'] = '$operateDate'; - uploadList.add(indexMap); } if (dataLength == state.logCountPage) { state.ifHaveNext = true; diff --git a/lib/main/lockDetail/lockDetail/lockDetail_logic.dart b/lib/main/lockDetail/lockDetail/lockDetail_logic.dart index 2455c416..f0e7f508 100755 --- a/lib/main/lockDetail/lockDetail/lockDetail_logic.dart +++ b/lib/main/lockDetail/lockDetail/lockDetail_logic.dart @@ -344,38 +344,43 @@ class LockDetailLogic extends BaseGetXController { final List uploadList = []; for (int i = 0; i < getList.length; i++) { final List indexList = getList[i]; - AppLog.log('indexList:$indexList'); - final Map indexMap = {}; - indexMap['type'] = indexList[0].toString(); + try { + AppLog.log('indexList:$indexList'); + final Map indexMap = {}; + indexMap['type'] = indexList[0].toString(); - final int userNo = (indexList[1] * 256) + indexList[2]; - indexMap['user'] = userNo.toString(); - // AppLog.log('userNouserNouserNouserNo:$userNo'); + final int userNo = (indexList[1] * 256) + indexList[2]; + indexMap['user'] = userNo.toString(); + // AppLog.log('userNouserNouserNouserNo:$userNo'); - final List passwordData = indexList.sublist(7, 17); - final String password = utf8String(passwordData); - indexMap['password'] = password.toString(); - // AppLog.log('passwordpasswordpassword:$password'); + final List passwordData = indexList.sublist(7, 17); + final String password = utf8String(passwordData); + indexMap['password'] = password.toString(); + // AppLog.log('passwordpasswordpassword:$password'); - indexMap['success'] = '1'; + indexMap['success'] = '1'; - final int time = (0xff & indexList[3]) << 24 | - (0xff & indexList[4]) << 16 | - (0xff & indexList[5]) << 8 | - (0xFF & indexList[6]); - int operateDate = time * 1000; - if (DateTime.fromMillisecondsSinceEpoch(operateDate).isAfter( - DateTime.fromMillisecondsSinceEpoch(getUTCNetTime() * 1000))) { - continue; - } + final int time = (0xff & indexList[3]) << 24 | + (0xff & indexList[4]) << 16 | + (0xff & indexList[5]) << 8 | + (0xFF & indexList[6]); + int operateDate = time * 1000; + if (DateTime.fromMillisecondsSinceEpoch(operateDate).isAfter( + DateTime.fromMillisecondsSinceEpoch( + getUTCNetTime() * 1000))) { + continue; + } - indexMap['date'] = '$operateDate'; - uploadList.add(indexMap); + indexMap['date'] = '$operateDate'; + uploadList.add(indexMap); - if (i == getList.length - 1) { - //设置最后的时间戳 + if (i == getList.length - 1) { + //设置最后的时间戳 - state.operateDate = operateDate; + state.operateDate = operateDate; + } + } catch (e) { + AppLog.log('操作记录:$indexList,解析失败,跳过该跳记录,进行下一条记录解析。'); } } lockRecordUploadData(uploadList); diff --git a/lib/main_local.dart b/lib/main_local.dart index 0fe387f7..9e30d007 100755 --- a/lib/main_local.dart +++ b/lib/main_local.dart @@ -4,7 +4,7 @@ import 'flavors.dart'; import 'main.dart' as runner; Future main() async { - F.appFlavor = Flavor.pre; + F.appFlavor = Flavor.xhj; // AppLog.log('local调用了main函数'); await runner.main(); } diff --git a/lib/network/api.dart b/lib/network/api.dart index 8a04dc74..a1be47c2 100755 --- a/lib/network/api.dart +++ b/lib/network/api.dart @@ -5,6 +5,7 @@ abstract class Api { final String getSliderVerifyImgUrl = '/user/getSliderVerifyImg'; final String checkImgUrl = '/user/isSliderValid'; final String loginUrl = '/user/login'; + final String oneClickLoginUrl = '/user/quickLogin'; // 一键登录 final String resetPasswordURL = '/user/resetPassword'; //重置密码 final String getCountryRegionURL = '/system/listCountry'; //获取国家或地区 final String electronicKeyListURL = '/key/listUser'; //电子钥匙列表 diff --git a/lib/network/api_provider.dart b/lib/network/api_provider.dart index 99a05695..cf7b064e 100755 --- a/lib/network/api_provider.dart +++ b/lib/network/api_provider.dart @@ -80,6 +80,17 @@ class ApiProvider extends BaseProvider { 'deviceInfo': deviceInfo, })); + Future oneClickLogin( + String loginType, String loginToken, Map deviceInfo) => + post( + oneClickLoginUrl.toUrl, + jsonEncode({ + 'loginType': loginType, + 'platId': '2', + 'loginToken': loginToken, + 'deviceInfo': deviceInfo, + })); + Future resetPassword( String countryCode, String account, diff --git a/lib/network/api_repository.dart b/lib/network/api_repository.dart index 1bb84daa..c2732880 100755 --- a/lib/network/api_repository.dart +++ b/lib/network/api_repository.dart @@ -146,6 +146,16 @@ class ApiRepository { return LoginEntity.fromJson(res.body); } + //登录 + Future oneClickLogin( + {required String loginType, + required String loginToken, + required Map deviceInfo}) async { + final res = + await apiProvider.oneClickLogin(loginType, loginToken, deviceInfo); + return LoginEntity.fromJson(res.body); + } + //重置密码 Future resetPassword( String countryCode, diff --git a/lib/tools/jverify_one_click_login.dart b/lib/tools/jverify_one_click_login.dart new file mode 100644 index 00000000..94993d6d --- /dev/null +++ b/lib/tools/jverify_one_click_login.dart @@ -0,0 +1,272 @@ +import 'dart:io'; + +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:get/get.dart'; +import 'package:jverify/jverify.dart'; +import 'package:star_lock/app_settings/app_colors.dart'; + +import '../app_settings/app_settings.dart'; +import '../common/XSConstantMacro/XSConstantMacro.dart'; +import '../flavors.dart'; + +class JverifyOneClickLoginManage { + factory JverifyOneClickLoginManage() => shareManager()!; + + JverifyOneClickLoginManage._init() { + _initSDK(); + } + + static JverifyOneClickLoginManage? _manager; + + static JverifyOneClickLoginManage? shareManager() { + _manager ??= JverifyOneClickLoginManage._init(); + return _manager; + } + + JverifyOneClickLoginManage? get manager => shareManager(); + Jverify jverify = Jverify(); + + /// 统一 key + String f_result_key = 'result'; + + /// 错误码 + String f_code_key = 'code'; + + /// 回调的提示信息,统一返回 flutter 为 message + String f_msg_key = 'message'; + + /// 运营商信息 + String f_opr_key = 'operator'; + + Future _initSDK() async { + try { + await initPlatformState(); + + isInitSuccess(); + + getToken(); + + preLogin(); + } catch (e) { + AppLog.log('SDK 初始化错误: $e'); + } + } + + Future initPlatformState() async { + // 初始化 SDK 之前添加监听 + jverify.addSDKSetupCallBackListener((JVSDKSetupEvent event) { + print('receive sdk setup call back event :${event.toMap()}'); + }); + + jverify.setDebugMode(true); // 打开调试模式 + jverify.setCollectionAuth(true); + String appKey; + if (F.isSKY) { + appKey = '7ff37d174c1a568a89e98dad'; + AppLog.log('appKey:7ff37d174c1a568a89e98dad'); + } else { + appKey = '251fc8074820d122b6de58d2'; + AppLog.log('appKey:251fc8074820d122b6de58d2'); + } + jverify.setup( + appKey: appKey, //"你自己应用的 AppKey", + channel: 'devloper'); + + /// 授权页面点击时间监听 + jverify.addAuthPageEventListener((JVAuthPageEvent event) { + print('receive auth page event :${event.toMap()}'); + }); + } + + /// sdk 初始化是否完成 + void isInitSuccess() { + jverify.isInitSuccess().then((map) { + final bool result = map[f_result_key]; + AppLog.log('sdk 初始化结果:$map'); + if (result) { + AppLog.log('sdk 初始化成功'); + } else { + AppLog.log('sdk 初始化失败'); + } + }); + } + + /// 判断当前网络环境是否可以发起认证 + Future checkVerifyEnable() async { + final Map map = await jverify.checkVerifyEnable(); + final bool result = map[f_result_key]; + return result; + // state.jverify.checkVerifyEnable().then((map) { + // final bool result = map[f_result_key]; + // if (result) { + // AppLog.log('当前网络环境【支持认证】!'); + // } else { + // AppLog.log('当前网络环境【不支持认证】!'); + // } + // return result; + // }); + } + + void getToken() { + jverify.checkVerifyEnable().then((map) { + final bool result = map[f_result_key]; + if (result) { + jverify.getToken().then((map) { + final int code = map[f_code_key]; + final String token = map[f_msg_key]; + final String operator = map[f_opr_key]; + AppLog.log('getToken code:$code token:$token operator:$operator'); + }); + } else { + AppLog.log('[2016],msg = 当前网络环境不支持认证'); + } + }); + } + + /// 登录预取号 + void preLogin() { + jverify.checkVerifyEnable().then((map) { + final bool result = map[f_result_key]; + if (result) { + jverify.preLogin().then((map) { + AppLog.log('预取号接口回调:${map.toString()}'); + final int code = map[f_code_key]; + final String message = map[f_msg_key]; + }); + } else { + AppLog.log('[2016],msg = 当前网络环境不支持认证'); + } + }); + } + + /// SDK 请求授权一键登录 + Future loginAuth( + Function(JVListenerEvent jvListenerEvent) action) async { + Map map = await jverify.checkVerifyEnable(); + final bool result = map[f_result_key]; + print('checkVerifyEnable $map'); + //需要使用sms的时候不检查result + // if (result) { + // return await jverify.loginAuth(true); + // } + // return null; + + if (result) { + bool isiOS = Platform.isIOS; + + /// 自定义授权的 UI 界面,以下设置的图片必须添加到资源文件里, + /// android项目将图片存放至drawable文件夹下,可使用图片选择器的文件名,例如:btn_login.xml,入参为"btn_login"。 + /// ios项目存放在 Assets.xcassets。 + JVUIConfig uiConfig = JVUIConfig(); + // uiConfig.authBGGifPath = "main_gif"; + // uiConfig.authBGVideoPath="main_vi"; + // uiConfig.authBGVideoPath = 'http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4'; + uiConfig.authBackgroundImage = 'images/icon_left_grey.png'; + + // uiConfig.navHidden = !isiOS; + uiConfig.navColor = AppColors.mainColor.value; + uiConfig.navText = '一键登录'.tr; + uiConfig.navTextColor = Colors.white.value; + uiConfig.navReturnImgPath = 'return_bg'; //图片必须存在 + + uiConfig.logoWidth = 100; + uiConfig.logoHeight = 100; + //uiConfig.logoOffsetX = isiOS ? 0 : null;//(screenWidth/2 - uiConfig.logoWidth/2).toInt(); + uiConfig.logoOffsetY = 100; + uiConfig.logoVerticalLayoutItem = JVIOSLayoutItem.ItemSuper; + uiConfig.logoHidden = false; + uiConfig.logoImgPath = 'logo'; + + uiConfig.numberFieldWidth = 200; + uiConfig.numberFieldHeight = 40; + //uiConfig.numFieldOffsetX = isiOS ? 0 : null;//(screenWidth/2 - uiConfig.numberFieldWidth/2).toInt(); + uiConfig.numFieldOffsetY = isiOS ? 120 : 220; + uiConfig.numberVerticalLayoutItem = JVIOSLayoutItem.ItemLogo; + uiConfig.numberColor = AppColors.mainColor.value; + uiConfig.numberSize = 18; + + uiConfig.sloganOffsetY = isiOS ? 120 : 260; + uiConfig.sloganVerticalLayoutItem = JVIOSLayoutItem.ItemNumber; + uiConfig.sloganTextColor = Colors.black.value; + uiConfig.sloganTextSize = 15; +// uiConfig.slogan + //uiConfig.sloganHidden = 0; + + uiConfig.logBtnOffsetX = 20; + uiConfig.logBtnWidth = double.parse('${1.sw - 20 * 2}').toInt(); + uiConfig.logBtnHeight = 50; + //uiConfig.logBtnOffsetX = isiOS ? 0 : null;//(screenWidth/2 - uiConfig.logBtnWidth/2).toInt(); + uiConfig.logBtnOffsetY = isiOS ? 120 : 330; + uiConfig.logBtnVerticalLayoutItem = JVIOSLayoutItem.ItemNumber; + uiConfig.logBtnText = '一键登录'.tr; + uiConfig.logBtnTextColor = Colors.white.value; + uiConfig.logBtnTextSize = 16; + uiConfig.logBtnBackgroundPath = ''; + // uiConfig.logBtnTextBold = true; + // uiConfig.loginBtnNormalImage = 'login_btn_normal'; //图片必须存在 + // uiConfig.loginBtnPressedImage = 'login_btn_press'; //图片必须存在 + // uiConfig.loginBtnUnableImage = 'login_btn_unable'; //图片必须存在 + + uiConfig.privacyHintToast = + true; //only android 设置隐私条款不选中时点击登录按钮默认显示toast。 + + uiConfig.privacyState = false; //设置默认勾选 + uiConfig.privacyCheckboxSize = 20; + uiConfig.checkedImgPath = 'check_image'; //图片必须存在 + uiConfig.uncheckedImgPath = 'uncheck_image'; //图片必须存在 + uiConfig.privacyCheckboxInCenter = true; + uiConfig.privacyCheckboxHidden = false; + uiConfig.isAlertPrivacyVc = true; + + //uiConfig.privacyOffsetX = isiOS ? (20 + uiConfig.privacyCheckboxSize) : null; + uiConfig.privacyOffsetY = 30; // 距离底部距离 + uiConfig.privacyOffsetX = 15; // 距离底部距离 + uiConfig.privacyVerticalLayoutItem = JVIOSLayoutItem.ItemSuper; + uiConfig.clauseName = '协议1'; + uiConfig.clauseUrl = 'http://www.baidu.com'; + uiConfig.clauseBaseColor = Colors.black.value; + uiConfig.clauseNameTwo = '协议二'; + uiConfig.clauseUrlTwo = 'http://www.hao123.com'; + uiConfig.clauseColor = AppColors.mainColor.value; + uiConfig.privacyText = ['我已阅读并同意'.tr]; + uiConfig.privacyTextSize = 13; + uiConfig.privacyItem = [ + JVPrivacy('用户协议'.tr, XSConstantMacro.userAgreementURL, + beforeName: '', afterName: '', separator: ''), + JVPrivacy('隐私政策'.tr, XSConstantMacro.privacyPolicyURL, separator: '') + ]; + uiConfig.textVerAlignment = 1; + //uiConfig.privacyWithBookTitleMark = true; + //uiConfig.privacyTextCenterGravity = false; + uiConfig.authStatusBarStyle = JVIOSBarStyle.StatusBarStyleDarkContent; + uiConfig.privacyStatusBarStyle = JVIOSBarStyle.StatusBarStyleDefault; + uiConfig.modelTransitionStyle = JVIOSUIModalTransitionStyle.CrossDissolve; + + uiConfig.statusBarColorWithNav = true; + // uiConfig.virtualButtonTransparent = true; + + uiConfig.privacyStatusBarColorWithNav = true; + uiConfig.privacyVirtualButtonTransparent = true; + + uiConfig.needStartAnim = true; + uiConfig.needCloseAnim = true; + uiConfig.enterAnim = 'activity_slide_enter_bottom'; + uiConfig.exitAnim = 'activity_slide_exit_bottom'; + + uiConfig.privacyNavColor = AppColors.mainColor.value; + uiConfig.privacyNavTitleTextColor = Colors.white.value; + uiConfig.privacyNavTitleTextSize = 16; + + /// 调用接口设置 UI + jverify.setCustomAuthorizationView(true, uiConfig, + landscapeConfig: uiConfig); + jverify.loginAuthSyncApi2( + autoDismiss: true, + loginAuthcallback: (event) { + action(event); + // AppLog.log('获取到 loginAuthSyncApi 接口返回数据,code=${event.code},message = ${event.message},operator = ${event.operator}'); + }); + } + } +} diff --git a/lib/widget/permission/permission_dialog.dart b/lib/widget/permission/permission_dialog.dart index 150f3867..a68aaa7d 100755 --- a/lib/widget/permission/permission_dialog.dart +++ b/lib/widget/permission/permission_dialog.dart @@ -1,3 +1,4 @@ +import 'package:device_info_plus/device_info_plus.dart'; import 'package:flutter/cupertino.dart'; import 'package:get/get.dart'; import 'package:permission_handler/permission_handler.dart'; @@ -109,8 +110,9 @@ class PermissionDialog { if (Get.context == null) { return false; } + final AndroidDeviceInfo androidInfo = await DeviceInfoPlugin().androidInfo; final bool isAndroid33 = - AppPlatform.isAndroid && AppPlatform.getSdkIntValue() >= 33; + AppPlatform.isAndroid && androidInfo.version.sdkInt >= 33; //通用的局部函数 List requestPermission() { @@ -197,8 +199,9 @@ class PermissionDialog { if (Get.context == null) { return false; } + final AndroidDeviceInfo androidInfo = await DeviceInfoPlugin().androidInfo; final bool isAndroid33 = - AppPlatform.isAndroid && AppPlatform.getSdkIntValue() >= 33; + AppPlatform.isAndroid && androidInfo.version.sdkInt >= 33; //通用的局部函数 List requestPermission() { diff --git a/pubspec.lock b/pubspec.lock index 20ab4d4b..88cd0a4d 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1045,6 +1045,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.4.13" + jverify: + dependency: "direct main" + description: + name: jverify + sha256: "26d1667d8c71403b77a2620a8c618625f8b4bfc950dac285b8f35ebc5e60fa5a" + url: "https://pub.dev" + source: hosted + version: "3.0.0" leak_tracker: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index feb2c0ee..4dd640ab 100755 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -253,6 +253,7 @@ dependencies: flutter_bugly: ^1.0.2 open_filex: ^4.4.0 + jverify: 3.0.0 # umeng_common_sdk: 1.2.8 #