Browse Source

[feat]增加Bugly,gravity,Umeng

云天逵 7 months ago
parent
commit
ace5d698ab

+ 3 - 0
android/app/src/main/AndroidManifest.xml

@@ -34,6 +34,9 @@
         <meta-data
         <meta-data
             android:name="io.flutter.embedding.android.EnableImpeller"
             android:name="io.flutter.embedding.android.EnableImpeller"
             android:value="false" />
             android:value="false" />
+        <meta-data
+            android:name="UMENG_APPKEY"
+            android:value="680dcdadbc47b67d834e37bb" />
         <!-- Don't delete the meta-data below.
         <!-- Don't delete the meta-data below.
              This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
              This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
         <meta-data
         <meta-data

+ 1 - 1
lib/data/api/response/user_info_response.dart

@@ -13,7 +13,7 @@ class UserInfoResponse {
   String? ssid;
   String? ssid;
 
 
   @JsonKey(name: 'deviceId')
   @JsonKey(name: 'deviceId')
-  String? deviceId;
+  String deviceId;
 
 
   @JsonKey(name: 'phone')
   @JsonKey(name: 'phone')
   String? phone;
   String? phone;

+ 1 - 1
lib/data/api/response/user_info_response.g.dart

@@ -11,7 +11,7 @@ UserInfoResponse _$UserInfoResponseFromJson(Map<String, dynamic> json) =>
         json['name'] as String?,
         json['name'] as String?,
         json['userId'] as String?,
         json['userId'] as String?,
         json['ssid'] as String?,
         json['ssid'] as String?,
-        json['deviceId'] as String?,
+        json['deviceId'] as String,
         json['phone'] as String?,
         json['phone'] as String?,
         (json['loginStatus'] as num?)?.toInt(),
         (json['loginStatus'] as num?)?.toInt(),
         json['channelName'] as String?,
         json['channelName'] as String?,

+ 57 - 0
lib/data/consts/build_config.dart

@@ -1,3 +1,5 @@
+import 'dart:io';
+
 import 'package:flutter/foundation.dart';
 import 'package:flutter/foundation.dart';
 
 
 final class BuildConfig{
 final class BuildConfig{
@@ -9,4 +11,59 @@ final class BuildConfig{
 }
 }
 
 
 
 
+final class BuglyConfig {
+  BuglyConfig._();
+
+  static const String buglyAndroidAppId = "0801c48428";
+  static const String buglyIosAppId = "a9232adcaa";
+}
+
+
+final class UmengConfig {
+  UmengConfig._();
+
+  //友盟统计配置
+  static const umengAndroidAppKey = "680dcdadbc47b67d834e37bb";
+  static const umengIosAppKey = "680dcf8479267e02104bfa01";
+
+  static String get umengAppKey {
+    if (Platform.isAndroid) {
+      return umengAndroidAppKey;
+    } else if (Platform.isIOS) {
+      return umengIosAppKey;
+    } else {
+      return '';
+    }
+  }
+}
+
+final class GravityConfig {
+  GravityConfig._();
+
+  //引力引擎配置
+  static const gravityAndroidAppId = "";
+  static const gravityAndroidAccessToken = "YesJRruqje8xzgm5HuOK7AhXwEznTfBV";
+
+  static const gravityIosAppId = "";
+  static const gravityIosAccessToken = "ulA57gz2zpioGukhyiQFkTEjfKS1aPxw";
+
+  static String get gravityAppId {
+    if (Platform.isAndroid) {
+      return gravityAndroidAppId;
+    } else if (Platform.isIOS) {
+      return gravityIosAppId;
+    } else {
+      return '';
+    }
+  }
 
 
+  static String get gravityAccessToken {
+    if (Platform.isAndroid) {
+      return gravityAndroidAccessToken;
+    } else if (Platform.isIOS) {
+      return gravityIosAccessToken;
+    } else {
+      return '';
+    }
+  }
+}

+ 3 - 2
lib/device/platform_android_info.dart

@@ -2,6 +2,7 @@ import 'dart:io';
 
 
 import 'package:device_info_plus/device_info_plus.dart';
 import 'package:device_info_plus/device_info_plus.dart';
 import 'package:android_id/android_id.dart';
 import 'package:android_id/android_id.dart';
+import 'package:oaid/oaid_kit.dart';
 // import 'package:oaid/oaid_kit.dart';
 // import 'package:oaid/oaid_kit.dart';
 import 'atmob_platform_info.dart';
 import 'atmob_platform_info.dart';
 
 
@@ -15,8 +16,8 @@ class PlatformAndroidInfo {
           .setAndroidId(deviceId)
           .setAndroidId(deviceId)
           .setBrand(androidInfo.brand)
           .setBrand(androidInfo.brand)
           .setModel(androidInfo.model);
           .setModel(androidInfo.model);
-      // String? oaid = await Oaid.getOaid();
-      // atmobPlatformInfo.setOaid(oaid);
+      String? oaid = await Oaid.getOaid();
+      atmobPlatformInfo.setOaid(oaid);
     }
     }
   }
   }
 }
 }

+ 9 - 1
lib/main.dart

@@ -11,6 +11,8 @@ import 'package:keyboard/resource/colors.gen.dart';
 import 'package:keyboard/resource/string.gen.dart';
 import 'package:keyboard/resource/string.gen.dart';
 import 'package:keyboard/resource/string_source.dart';
 import 'package:keyboard/resource/string_source.dart';
 import 'package:keyboard/router/app_pages.dart';
 import 'package:keyboard/router/app_pages.dart';
+import 'package:keyboard/sdk/bugly/bugly_helper.dart';
+import 'package:keyboard/sdk/gravity/gravity_helper.dart';
 import 'package:keyboard/utils/app_info_util.dart';
 import 'package:keyboard/utils/app_info_util.dart';
 import 'package:keyboard/utils/atmob_log.dart';
 import 'package:keyboard/utils/atmob_log.dart';
 import 'package:keyboard/utils/channel_util.dart';
 import 'package:keyboard/utils/channel_util.dart';
@@ -19,7 +21,7 @@ import 'package:keyboard/utils/mmkv_util.dart';
 import 'package:keyboard/utils/privacy_compliance.dart';
 import 'package:keyboard/utils/privacy_compliance.dart';
 import 'package:keyboard/utils/toast_util.dart';
 import 'package:keyboard/utils/toast_util.dart';
 import 'package:keyboard/widget/app_lifecycle_widget.dart';
 import 'package:keyboard/widget/app_lifecycle_widget.dart';
-
+import 'package:keyboard/sdk/umeng/umeng_helper.dart';
 import 'data/consts/build_config.dart';
 import 'data/consts/build_config.dart';
 import 'data/consts/constants.dart';
 import 'data/consts/constants.dart';
 import 'device/device_info_util.dart';
 import 'device/device_info_util.dart';
@@ -75,6 +77,12 @@ class AppInitTask implements EnsurePolicyGrant {
     await appInfoUtil.init();
     await appInfoUtil.init();
     await deviceInfoUtil.init();
     await deviceInfoUtil.init();
     //初始化其他sdk
     //初始化其他sdk
+    //bugly
+    BuglyHelper.init();
+    //引力引擎
+    GravityHelper.init();
+    //友盟
+    UmengHelper.initCommon();
   }
   }
 }
 }
 
 

+ 2 - 0
lib/module/splash/splash_controller.dart

@@ -13,6 +13,7 @@ import '../../data/consts/constants.dart';
 import '../../dialog/agreement_again_dialog.dart';
 import '../../dialog/agreement_again_dialog.dart';
 import '../../dialog/agreement_dialog.dart';
 import '../../dialog/agreement_dialog.dart';
 import '../../resource/assets.gen.dart';
 import '../../resource/assets.gen.dart';
+import '../../sdk/umeng/umeng_helper.dart';
 import '../../utils/privacy_compliance.dart';
 import '../../utils/privacy_compliance.dart';
 import '../main/main_page.dart';
 import '../main/main_page.dart';
 
 
@@ -75,6 +76,7 @@ class SplashController extends BaseController {
   }
   }
 
 
   void _agreePrivacy() async {
   void _agreePrivacy() async {
+    await UmengHelper.setPolicyGrantResult(true);
     PrivacyCompliance.setPrivacyPolicy(true);
     PrivacyCompliance.setPrivacyPolicy(true);
   }
   }
 }
 }

+ 16 - 0
lib/sdk/bugly/bugly_helper.dart

@@ -0,0 +1,16 @@
+import 'package:flutter_bugly/flutter_bugly.dart';
+
+import '../../data/consts/build_config.dart';
+import '../../device/atmob_platform_info.dart';
+
+class BuglyHelper {
+  BuglyHelper._();
+
+  static void init() {
+    FlutterBugly.init(
+      androidAppId: BuglyConfig.buglyAndroidAppId,
+      iOSAppId: BuglyConfig.buglyIosAppId,
+      channel: atmobPlatformInfo.channelName,
+    );
+  }
+}

+ 120 - 0
lib/sdk/gravity/gravity_helper.dart

@@ -0,0 +1,120 @@
+import 'dart:async';
+
+import 'package:flutter/widgets.dart';
+import 'package:gravity_engine/gravity_engine.dart';
+import 'package:gravity_engine/gravity_engine_method_channel.dart';
+
+import '../../data/api/response/user_info_response.dart';
+import '../../data/consts/build_config.dart';
+import '../../data/consts/payment_type.dart';
+import '../../data/repository/account_repository.dart';
+import '../../device/atmob_platform_info.dart';
+import '../../utils/async_util.dart';
+import '../../utils/mmkv_util.dart';
+
+typedef GravitySuccessCallback = void Function();
+
+class GravityHelper {
+  static const String _keyCurrentSsid = "current_ssid";
+  static CancelableFuture<bool>? _initFuture;
+  static String? _currentClientId;
+
+  static bool? _isFromPromote;
+
+  static init() async {
+    _initialize(false);
+  }
+
+  static _initialize(bool refreshSSID,
+      {GravitySuccessCallback? callback}) async {
+    if (_initFuture != null) {
+      _initFuture?.cancel();
+    }
+    _initFuture = AsyncUtil.retryWithExponentialBackoff<bool>(() async {
+      String ssid = await _getSSID(refreshSSID);
+      CancelableFuture<bool> initFuture = _gravityInitialize(ssid);
+      _initFuture = initFuture;
+      return await initFuture;
+    }, 5);
+    _initFuture?.then((isPromote) {
+      _isFromPromote = isPromote;
+      callback?.call();
+    }).catchError((error) {
+      _initialize(refreshSSID, callback: callback);
+    });
+  }
+
+  static Future<String> _getSSID(bool refreshSSID) async {
+    String? currentSSID = _getCurrentSSID();
+    if (currentSSID == null || refreshSSID) {
+      UserInfoResponse response =
+          await AccountRepository.getInstance().getUserInfo();
+      KVUtil.putString(_keyCurrentSsid, response.deviceId);
+      return response.deviceId;
+    }
+    return currentSSID;
+  }
+
+  static String? _getCurrentSSID() {
+    return KVUtil.getString(_keyCurrentSsid, null);
+  }
+
+  static CancelableFuture<bool> _gravityInitialize(String ssid) {
+    return AsyncUtil.retryWithExponentialBackoff<bool>(() {
+      return GravityEngine.initialize(
+              GravityConfig.gravityAppId,
+              GravityConfig.gravityAccessToken,
+              ssid,
+              atmobPlatformInfo.channelName ?? '',
+              BuildConfig.isDebug)
+          .then((data) {
+        debugPrint('gravity initialize($ssid) success');
+        GravityHelper._currentClientId = ssid;
+        return data;
+      });
+    }, 5);
+  }
+
+  static void onLogin() {
+    _clearCurrentSSID();
+    _initialize(true, callback: () {
+      if (_currentClientId != null) {
+        GravityEngine.login(_currentClientId!);
+      }
+    });
+  }
+
+  static void onLogout() async {
+    _currentClientId = null;
+    await GravityEngine.logout();
+    _initialize(false, callback: null);
+  }
+
+  static void _clearCurrentSSID() {
+    KVUtil.putString(_keyCurrentSsid, null);
+  }
+
+  static bool? getIsFromPromote() {
+    return _isFromPromote;
+  }
+
+  static void report(String eventId, {Map<String, dynamic>? params}) {
+    GravityEngine.trackEvent(eventId, eventProperties: params);
+  }
+
+  static void reportPay(
+      int payAmount, String orderNo, String productName, int payWay) {
+    PayType payType;
+    if (payWay == PayMethod.alipay) {
+      payType = PayType.alipay;
+    } else if (payWay == PayMethod.wechat) {
+      payType = PayType.wechat;
+    } else if (payWay == PayMethod.apple) {
+      payType = PayType.apple;
+    } else {
+      payType = PayType.unknown;
+    }
+    GravityEngine.trackPay(
+        orderNo, productName, payAmount, Currency.cny, payType);
+  }
+}

+ 15 - 0
lib/sdk/umeng/umeng_helper.dart

@@ -0,0 +1,15 @@
+import 'package:flutter_umeng/flutter_umeng.dart';
+
+import '../../data/consts/build_config.dart';
+
+class UmengHelper {
+  UmengHelper._();
+
+  static void initCommon() {
+    FlutterUmeng.initCommon(iosAppKey: UmengConfig.umengIosAppKey);
+  }
+
+  static Future<void> setPolicyGrantResult(bool granted) {
+    return FlutterUmeng.setPolicyGrantResult(granted);
+  }
+}

+ 22 - 5
pubspec.yaml

@@ -91,6 +91,11 @@ dependencies:
   #自动缩小文本
   #自动缩小文本
   auto_size_text: ^3.0.0
   auto_size_text: ^3.0.0
 
 
+  #bugly
+  flutter_bugly: 1.1.0
+
+
+
   #QR
   #QR
   qr_flutter: ^4.1.0
   qr_flutter: ^4.1.0
 
 
@@ -120,11 +125,23 @@ dependencies:
       name: atmob_channel_reader
       name: atmob_channel_reader
       url: http://pub.v8dashen.com/
       url: http://pub.v8dashen.com/
 
 
-  #  #oaid
-  #  oaid:
-  #    git:
-  #      url: http://git.atmob.com:28999/Atmob-Flutter/Oaid.git
-  #      ref: v0.0.1
+  #oaid
+  oaid:
+    git:
+      url: http://git.atmob.com:28999/Atmob-Flutter/Oaid.git
+      ref: v0.0.1
+
+  #引力引擎
+  gravity_engine:
+    git:
+      url: http://git.atmob.com:28999/Atmob-Flutter/gravity_engine.git
+      ref: v0.0.2
+
+  flutter_umeng:
+    git:
+      url: http://git.atmob.com:28999/Atmob-Flutter/flutter_umeng.git
+      ref: v0.0.2
+
 
 
   keyboard_android:
   keyboard_android:
     path: plugins/keyboard_android
     path: plugins/keyboard_android