feat: bugly自定义日志采集逻辑

This commit is contained in:
Liuyf 2024-09-29 13:47:50 +08:00
parent 4bfb11e1d1
commit 552c787c5a
10 changed files with 118 additions and 75 deletions

View File

@ -128,4 +128,7 @@
}
-keep class com.tencent.mm.sdk.** { *; }
-keep class com.tencent.mm.opensdk.** { *; }
-keep class com.tencent.mm.opensdk.** { *; }
-dontwarn com.tencent.bugly.**
-keep public class com.tencent.bugly.**{*;}

View File

@ -128,4 +128,7 @@
}
-keep class com.tencent.mm.sdk.** { *; }
-keep class com.tencent.mm.opensdk.** { *; }
-keep class com.tencent.mm.opensdk.** { *; }
-dontwarn com.tencent.bugly.**
-keep public class com.tencent.bugly.**{*;}

View File

@ -134,6 +134,7 @@
<intent-filter>
<action android:name="com.huawei.android.push.intent.REGISTRATION" />
<action android:name="com.huawei.android.push.intent.RECEIVE" />
<category android:name="${applicationId}" />
</intent-filter>
</receiver>
@ -193,6 +194,9 @@
</intent-filter>
</activity>
<meta-data
android:name="BUGLY_ENABLE_DEBUG"
android:value="true" />
</application>

View File

@ -80,8 +80,8 @@ PODS:
- Flutter (1.0.0)
- flutter_blue_plus (0.0.1):
- Flutter
- flutter_bugly_plugin (0.0.1):
- Bugly
- flutter_bugly (0.0.1):
- Bugly (= 2.6.1)
- Flutter
- flutter_local_notifications (0.0.1):
- Flutter
@ -173,7 +173,7 @@ DEPENDENCIES:
- file_picker (from `.symlinks/plugins/file_picker/ios`)
- Flutter (from `Flutter`)
- flutter_blue_plus (from `.symlinks/plugins/flutter_blue_plus/ios`)
- flutter_bugly_plugin (from `.symlinks/plugins/flutter_bugly_plugin/ios`)
- flutter_bugly (from `.symlinks/plugins/flutter_bugly/ios`)
- flutter_local_notifications (from `.symlinks/plugins/flutter_local_notifications/ios`)
- flutter_native_contact_picker (from `.symlinks/plugins/flutter_native_contact_picker/ios`)
- flutter_pcm_sound (from `.symlinks/plugins/flutter_pcm_sound/ios`)
@ -252,8 +252,8 @@ EXTERNAL SOURCES:
:path: Flutter
flutter_blue_plus:
:path: ".symlinks/plugins/flutter_blue_plus/ios"
flutter_bugly_plugin:
:path: ".symlinks/plugins/flutter_bugly_plugin/ios"
flutter_bugly:
:path: ".symlinks/plugins/flutter_bugly/ios"
flutter_local_notifications:
:path: ".symlinks/plugins/flutter_local_notifications/ios"
flutter_native_contact_picker:
@ -326,7 +326,7 @@ SPEC CHECKSUMS:
file_picker: ce3938a0df3cc1ef404671531facef740d03f920
Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7
flutter_blue_plus: 4837da7d00cf5d441fdd6635b3a57f936778ea96
flutter_bugly_plugin: d2db6d6641938269fa538575126e8ff530ee02c7
flutter_bugly: bf35df32a9c5d50b8aacdd35bd8ddc5b55150dae
flutter_local_notifications: 4cde75091f6327eb8517fa068a0a5950212d2086
flutter_native_contact_picker: bd430ba0fbf82768bb50c2c52a69a65759a8f907
flutter_pcm_sound: de0572ca4f99091cc2abfcc31601b8a4ddd33c0e

View File

@ -2,10 +2,10 @@ import 'dart:async';
import 'dart:io';
import 'package:flutter_blue_plus/flutter_blue_plus.dart';
import 'package:flutter_bugly_plugin/flutter_bugly_plugin.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:get/get.dart';
import 'package:star_lock/app_settings/app_settings.dart';
import 'package:star_lock/tools/bugly/bugly_tool.dart';
import 'package:star_lock/tools/commonDataManage.dart';
import 'io_tool/io_model.dart';
@ -100,7 +100,7 @@ class BlueManage {
void _initAdapterStateStateSubscription() {
_adapterStateStateSubscription ??=
FlutterBluePlus.adapterState.listen((BluetoothAdapterState state) {
AppLog.log('蓝牙状态:$state');
AppLog.log('蓝牙状态:$state');
_adapterState = state;
});
}
@ -228,7 +228,8 @@ class BlueManage {
if (_adapterState == BluetoothAdapterState.on) {
try {
FlutterBluePlus.startScan(timeout: Duration(seconds: timeout));
final StreamSubscription<List<ScanResult>> subscription = FlutterBluePlus.scanResults.listen((List<ScanResult> results) {
final StreamSubscription<List<ScanResult>> subscription =
FlutterBluePlus.scanResults.listen((List<ScanResult> results) {
scanDevices.clear();
for (final ScanResult scanResult in results) {
// AppLog.log('扫描到的设备:${scanResult.device.platformName} ${scanResult.advertisementData.advName} ${scanResult.rssi}');
@ -305,7 +306,10 @@ class BlueManage {
}
}
} else {
FlutterBuglyPlugin.reportException(exceptionName: 'blueSendData isAvailable状态', reason: 'blueSendData isAvailable不可用');
BuglyTool.uploadException(
message: 'blueSendData isAvailable状态',
detail: 'blueSendData isAvailable不可用--json');
// FlutterBuglyPlugin.reportException(exceptionName: 'blueSendData isAvailable状态', reason: 'blueSendData isAvailable不可用');
AppLog.log('开始扫描 蓝牙不可用,不能进行蓝牙操作');
}
});
@ -358,13 +362,12 @@ class BlueManage {
}
Future<void> _connectDevice(
List<ScanResult> devicesList,
String deviceName,
ConnectStateCallBack connectStateCallBack,
{
bool isAddEquipment = false,//
bool isReconnect = true,//
}) async {
List<ScanResult> devicesList,
String deviceName,
ConnectStateCallBack connectStateCallBack, {
bool isAddEquipment = false, //
bool isReconnect = true, //
}) async {
//
// AppLog.log("devicesList:$devicesList");
final int knownDeviceIndex = devicesList.indexWhere((ScanResult d) =>
@ -392,15 +395,17 @@ class BlueManage {
AppLog.log('调用了停止扫描的方法');
await stopScan();
if ((scanResult.advertisementData.serviceUuids[0].toString()[31] == '0') && isAddEquipment == false) {
if ((scanResult.advertisementData.serviceUuids[0].toString()[31] == '0') &&
isAddEquipment == false) {
//
if(isReconnect == true){
if (isReconnect == true) {
AppLog.log('该锁已被重置, 重新发送扫描命令');
scanDevices.clear();
startScanSingle(deviceName, 15, (List<ScanResult> scanDevices) {
_connectDevice(scanDevices, deviceName, connectStateCallBack, isAddEquipment: isAddEquipment, isReconnect: false);
_connectDevice(scanDevices, deviceName, connectStateCallBack,
isAddEquipment: isAddEquipment, isReconnect: false);
});
}else{
} else {
connectStateCallBack(BluetoothConnectionState.disconnected);
EasyLoading.showToast('该锁已被重置'.tr, duration: 2000.milliseconds);
scanDevices.clear();
@ -459,8 +464,10 @@ class BlueManage {
//
for (final BluetoothService service in services) {
if (service.uuid == _serviceIdConnect) {
for (final BluetoothCharacteristic characteristic in service.characteristics) {
if (characteristic.characteristicUuid == _characteristicIdSubscription) {
for (final BluetoothCharacteristic characteristic
in service.characteristics) {
if (characteristic.characteristicUuid ==
_characteristicIdSubscription) {
_subScribeToCharacteristic(characteristic);
bluetoothConnectionState = BluetoothConnectionState.connected;
connectStateCallBack(bluetoothConnectionState!);

View File

@ -4,6 +4,7 @@ import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_bugly/flutter_bugly.dart';
import 'package:get/get.dart';
import 'package:path/path.dart' as path;
import 'package:star_lock/flavors.dart';
@ -23,30 +24,31 @@ import 'tools/store_service.dart';
// flavorizr.yaml
FutureOr<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
FlutterBugly.postCatchedException(() async {
WidgetsFlutterBinding.ensureInitialized();
await _setCommonServices();
await _setCommonServices();
//
await _initTranslation();
//
await _initTranslation();
final bool isLogin = await getLoginStatus();
if (isLogin) {
await privacySDKInitialization();
}
WidgetsBinding.instance.addPostFrameCallback((_) async {
final bool? openDeBug = await Storage.getBool(isOpenDeBug);
if (openDeBug == true) {
DeBug.showFloatWidget();
final bool isLogin = await getLoginStatus();
if (isLogin) {
await privacySDKInitialization();
}
});
runApp(MyApp(isLogin: isLogin));
WidgetsBinding.instance.addPostFrameCallback((_) async {
final bool? openDeBug = await Storage.getBool(isOpenDeBug);
if (openDeBug == true) {
DeBug.showFloatWidget();
}
});
runApp(MyApp(isLogin: isLogin));
});
if (AppPlatform.isAndroid) {
const SystemUiOverlayStyle systemUiOverlayStyle =
SystemUiOverlayStyle(statusBarColor: Colors.transparent);
SystemUiOverlayStyle(statusBarColor: Colors.transparent);
SystemChrome.setSystemUIOverlayStyle(systemUiOverlayStyle);
}
@ -82,7 +84,7 @@ Future<void> privacySDKInitialization() async {
await jpushProvider.initJPushService();
}
void checkChinese(){
void checkChinese() {
//
final String scriptDir = path.dirname(Platform.script.path);
@ -104,4 +106,4 @@ void findChineseCharacters(Directory directory) {
bool hasChineseCharacters(String input) {
return RegExp(r'[\u4e00-\u9fa5]').hasMatch(input);
}
}

View File

@ -2,7 +2,6 @@ import 'dart:async';
import 'package:flutter/scheduler.dart';
import 'package:flutter_blue_plus/flutter_blue_plus.dart';
import 'package:flutter_bugly_plugin/flutter_bugly_plugin.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:get/get.dart';
import 'package:intl/intl.dart';
@ -11,8 +10,8 @@ import 'package:star_lock/common/XSConstantMacro/XSConstantMacro.dart';
import 'package:star_lock/main/lockDetail/electronicKey/electronicKeyList/entity/ElectronicKeyListEntity.dart';
import 'package:star_lock/main/lockDetail/lockSet/lockTime/getServerDatetime_entity.dart';
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 '../../../app_settings/app_settings.dart';
@ -334,7 +333,8 @@ class LockDetailLogic extends BaseGetXController {
showBlueConnetctToastTimer(
outTimer: 20,
action: () {
FlutterBuglyPlugin.reportException(exceptionName: '开门超时处理', reason: '开门超时,断开连接');
// FlutterBuglyPlugin.reportException(exceptionName: '开门超时处理', reason: '开门超时,断开连接');
BuglyTool.uploadException(message: '开门超时处理', detail: '开门超时,断开连接--json');
resetOpenDoorState();
blueManageDisconnect();
});
@ -351,7 +351,8 @@ class LockDetailLogic extends BaseGetXController {
.blueSendData(state.keyInfos.value.bluetooth!.bluetoothDeviceName!,
(BluetoothConnectionState deviceConnectionState) async {
if (deviceConnectionState == BluetoothConnectionState.connected) {
FlutterBuglyPlugin.reportException(exceptionName: '蓝牙连接成功', reason: '蓝牙连接成功,发送开锁指令');
BuglyTool.uploadException(message: '蓝牙连接成功', detail: '蓝牙连接成功,发送开锁指令--json',data: {'key1':'value1','key2':'value2'});
// FlutterBuglyPlugin.reportException(exceptionName: '蓝牙连接成功', reason: '蓝牙连接成功,发送开锁指令');
IoSenderManage.senderOpenLock(
lockID: BlueManage().connectDeviceName,
userID: await Storage.getUid(),

View File

@ -1,7 +1,6 @@
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter_bugly_plugin/flutter_bugly_plugin.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
@ -11,6 +10,7 @@ import 'package:star_lock/flavors.dart';
import 'package:star_lock/main/lockDetail/lockDetail/lockDetail_state.dart';
import 'package:star_lock/main/lockMian/lockMain/lockMain_logic.dart';
import 'package:star_lock/tools/aliyunRealNameAuth/aliyunRealNameAuthHandle.dart';
import 'package:star_lock/tools/bugly/bugly_tool.dart';
import 'package:star_lock/tools/showCupertinoAlertView.dart';
import 'package:star_lock/tools/showTipView.dart';
import 'package:star_lock/widget/flavors_img.dart';
@ -90,10 +90,17 @@ class _LockDetailPageState extends State<LockDetailPage>
//
Widget xhjWidget() {
final bool isShowTip =
(state.keyInfos.value.keyType == XSConstantMacro.keyTypeTime || state.keyInfos.value.keyType == XSConstantMacro.keyTypeLoop)
&& (DateTool().compareTimeGetDaysFromNow(state.keyInfos.value.endDate!) <= 15 && DateTool().compareTimeGetDaysFromNow(state.keyInfos.value.endDate!) >= 0)
&& (state.keyInfos.value.keyStatus == XSConstantMacro.keyStatusNormalUse || state.keyInfos.value.keyStatus == XSConstantMacro.keyStatusWaitReceive);
final bool isShowTip = (state.keyInfos.value.keyType ==
XSConstantMacro.keyTypeTime ||
state.keyInfos.value.keyType == XSConstantMacro.keyTypeLoop) &&
(DateTool().compareTimeGetDaysFromNow(state.keyInfos.value.endDate!) <=
15 &&
DateTool()
.compareTimeGetDaysFromNow(state.keyInfos.value.endDate!) >=
0) &&
(state.keyInfos.value.keyStatus == XSConstantMacro.keyStatusNormalUse ||
state.keyInfos.value.keyStatus ==
XSConstantMacro.keyStatusWaitReceive);
return Scaffold(
backgroundColor: Colors.white,
body: Obx(() {
@ -1428,13 +1435,21 @@ class _LockDetailPageState extends State<LockDetailPage>
if (isOpenLockNeedOnline) {
//
state.openDoorModel = 0;
FlutterBuglyPlugin.reportException(exceptionName: '点击了不需要联网开锁');
// FlutterBuglyPlugin.reportException(exceptionName: '点击了不需要联网开锁');
BuglyTool.uploadException(
message: '点击了不需要联网开锁',
detail: '点击了不需要联网开锁--------json',
data: {'key1': 'value1', 'key2': 'value2'});
AppLog.log('点击开锁 state.openDoorModel = 0 不需要联网');
logic.openDoorAction();
} else {
//
state.openDoorModel = 2;
FlutterBuglyPlugin.reportException(exceptionName: '点击了需要联网开锁');
// FlutterBuglyPlugin.reportException(exceptionName: '点击了需要联网开锁');
BuglyTool.uploadException(
message: '点击了需要联网开锁',
detail: '点击了需要联网开锁---json',
data: {'key1': 'value1', 'key2': 'value2'});
AppLog.log('点击开锁 state.openDoorModel = 2 需要联网');
logic.getLockNetToken();
}

View File

@ -2,7 +2,7 @@ import 'dart:async';
import 'package:flutter/cupertino.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter_bugly_plugin/flutter_bugly_plugin.dart';
import 'package:flutter_bugly/flutter_bugly.dart';
import 'package:star_lock/app_settings/app_settings.dart';
import 'package:star_lock/flavors.dart';
import 'package:star_lock/login/login/entity/LoginData.dart';
@ -16,15 +16,15 @@ class BuglyTool {
static Future<void> init() async {
if (F.isProductionEnv) {
//
await FlutterBuglyPlugin.init(
appIdAndroid: '5729fb97dc',
appIdiOS: '33c4430cce',
await FlutterBugly.init(
androidAppId: '5729fb97dc',
iOSAppId: '33c4430cce',
);
} else {
//
await FlutterBuglyPlugin.init(
appIdAndroid: '5729fb97dc',
appIdiOS: '33c4430cce',
await FlutterBugly.init(
androidAppId: '5729fb97dc',
iOSAppId: '33c4430cce',
);
}
@ -33,28 +33,35 @@ class BuglyTool {
setUserId(loginData?.userid);
//
FlutterError.onError = (FlutterErrorDetails details) async {
AppLog.log('error:${details.exception.toString()}',
stackTrace: details.stack, error: true);
FlutterBuglyPlugin.reportException(
exceptionName: details.exception.toString(),
reason: details.stack.toString());
Zone.current.handleUncaughtError(
details.exception, details.stack ?? StackTrace.empty);
};
// FlutterError.onError = (FlutterErrorDetails details) async {
// AppLog.log('error:${details.exception.toString()}',
// stackTrace: details.stack, error: true);
// FlutterBugly.uploadException(
// message: details.exception.toString(),
// detail: details.stack.toString());
// Zone.current.handleUncaughtError(
// details.exception, details.stack ?? StackTrace.empty);
// };
//
PlatformDispatcher.instance.onError = (Object error, StackTrace stack) {
AppLog.log('error:$error', stackTrace: stack, error: true);
FlutterBuglyPlugin.reportException(
exceptionName: error.toString(), reason: stack.toString());
FlutterBugly.uploadException(
message: error.toString(), detail: stack.toString());
return true;
};
}
// userid
static void setUserId(int? userId) {
FlutterBuglyPlugin.setUserIdentifier(
userIdentifier: (userId ?? 0).toString());
FlutterBugly.setUserId(userId?.toString() ?? '');
}
static void uploadException({
required String message,
required String detail,
Map? data,
}) {
FlutterBugly.uploadException(message: message, detail: detail, data: data);
}
}

View File

@ -234,7 +234,8 @@ 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