Przeglądaj źródła

[new]引力引擎增加clientId上报

zk 8 miesięcy temu
rodzic
commit
60863a4519

+ 4 - 0
lib/data/api/atmob_api.dart

@@ -14,6 +14,7 @@ import 'package:location/data/api/request/query_track_request.dart';
 import 'package:location/data/api/request/request_friendlist_request.dart';
 import 'package:location/data/api/request/send_code_request.dart';
 import 'package:location/data/api/request/submit_and_request_pay_request.dart';
+import 'package:location/data/api/request/upload_client_id_request.dart';
 import 'package:location/data/api/response/configs_response.dart';
 import 'package:location/data/api/response/contact_list_response.dart';
 import 'package:location/data/api/response/contact_may_day_all_response.dart';
@@ -156,4 +157,7 @@ abstract class AtmobApi {
   @POST("/s/v1/order/payStatus")
   Future<BaseResponse<OrderStatusResponse>> orderStatus(
       @Body() OrderStatusRequest request);
+
+  @POST("/s/v1/client/device/info/upload")
+  Future<BaseResponse> uploadClientId(@Body() UploadClientIdRequest request);
 }

+ 38 - 0
lib/data/api/atmob_api.g.dart

@@ -1203,6 +1203,44 @@ class _AtmobApi implements AtmobApi {
     return _value;
   }
 
+  @override
+  Future<BaseResponse<dynamic>> uploadClientId(
+      UploadClientIdRequest request) async {
+    final _extra = <String, dynamic>{};
+    final queryParameters = <String, dynamic>{};
+    final _headers = <String, dynamic>{};
+    final _data = <String, dynamic>{};
+    _data.addAll(request.toJson());
+    final _options = _setStreamType<BaseResponse<dynamic>>(Options(
+      method: 'POST',
+      headers: _headers,
+      extra: _extra,
+    )
+        .compose(
+          _dio.options,
+          '/s/v1/client/device/info/upload',
+          queryParameters: queryParameters,
+          data: _data,
+        )
+        .copyWith(
+            baseUrl: _combineBaseUrls(
+          _dio.options.baseUrl,
+          baseUrl,
+        )));
+    final _result = await _dio.fetch<Map<String, dynamic>>(_options);
+    late BaseResponse<dynamic> _value;
+    try {
+      _value = BaseResponse<dynamic>.fromJson(
+        _result.data!,
+        (json) => json as dynamic,
+      );
+    } on Object catch (e, s) {
+      errorLogger?.logError(e, s, _options);
+      rethrow;
+    }
+    return _value;
+  }
+
   RequestOptions _setStreamType<T>(RequestOptions requestOptions) {
     if (T != dynamic &&
         !(requestOptions.responseType == ResponseType.bytes ||

+ 12 - 0
lib/data/api/request/upload_client_id_request.dart

@@ -0,0 +1,12 @@
+import 'package:json_annotation/json_annotation.dart';
+import 'package:location/base/app_base_request.dart';
+
+part 'upload_client_id_request.g.dart';
+
+@JsonSerializable()
+class UploadClientIdRequest extends AppBaseRequest {
+  @JsonKey(name: 'clientId')
+  String clientId;
+
+  UploadClientIdRequest(this.clientId);
+}

+ 71 - 0
lib/data/api/request/upload_client_id_request.g.dart

@@ -0,0 +1,71 @@
+// GENERATED CODE - DO NOT MODIFY BY HAND
+
+part of 'upload_client_id_request.dart';
+
+// **************************************************************************
+// JsonSerializableGenerator
+// **************************************************************************
+
+UploadClientIdRequest _$UploadClientIdRequestFromJson(
+        Map<String, dynamic> json) =>
+    UploadClientIdRequest(
+      json['clientId'] as String,
+    )
+      ..appPlatform = (json['appPlatform'] as num).toInt()
+      ..os = json['os'] as String
+      ..osVersion = json['osVersion'] as String
+      ..packageName = json['packageName'] as String?
+      ..appVersionName = json['appVersionName'] as String?
+      ..appVersionCode = (json['appVersionCode'] as num?)?.toInt()
+      ..channelName = json['channelName'] as String?
+      ..appId = (json['appId'] as num?)?.toInt()
+      ..tgPlatform = (json['tgPlatform'] as num?)?.toInt()
+      ..oaid = json['oaid'] as String?
+      ..aaid = json['aaid'] as String?
+      ..androidId = json['androidId'] as String?
+      ..imei = json['imei'] as String?
+      ..simImei0 = json['simImei0'] as String?
+      ..simImei1 = json['simImei1'] as String?
+      ..mac = json['mac'] as String?
+      ..idfa = json['idfa'] as String?
+      ..idfv = json['idfv'] as String?
+      ..machineId = json['machineId'] as String?
+      ..brand = json['brand'] as String?
+      ..model = json['model'] as String?
+      ..wifiName = json['wifiName'] as String?
+      ..region = json['region'] as String?
+      ..locLng = (json['locLng'] as num?)?.toDouble()
+      ..locLat = (json['locLat'] as num?)?.toDouble()
+      ..authToken = json['authToken'] as String?;
+
+Map<String, dynamic> _$UploadClientIdRequestToJson(
+        UploadClientIdRequest instance) =>
+    <String, dynamic>{
+      'appPlatform': instance.appPlatform,
+      'os': instance.os,
+      'osVersion': instance.osVersion,
+      'packageName': instance.packageName,
+      'appVersionName': instance.appVersionName,
+      'appVersionCode': instance.appVersionCode,
+      'channelName': instance.channelName,
+      'appId': instance.appId,
+      'tgPlatform': instance.tgPlatform,
+      'oaid': instance.oaid,
+      'aaid': instance.aaid,
+      'androidId': instance.androidId,
+      'imei': instance.imei,
+      'simImei0': instance.simImei0,
+      'simImei1': instance.simImei1,
+      'mac': instance.mac,
+      'idfa': instance.idfa,
+      'idfv': instance.idfv,
+      'machineId': instance.machineId,
+      'brand': instance.brand,
+      'model': instance.model,
+      'wifiName': instance.wifiName,
+      'region': instance.region,
+      'locLng': instance.locLng,
+      'locLat': instance.locLat,
+      'authToken': instance.authToken,
+      'clientId': instance.clientId,
+    };

+ 3 - 3
lib/data/api/response/member_status_response.dart

@@ -25,9 +25,8 @@ class MemberStatusResponse {
   @JsonKey(name: 'permanent')
   final bool permanent;
 
-  // @JsonKey(name: 'deviceId')
-  //TODO 待后台发布后需修改为deviceId
-  String get deviceId => userId;
+  @JsonKey(name: 'deviceId')
+  final String deviceId;
 
   MemberStatusResponse({
     required this.userId,
@@ -37,6 +36,7 @@ class MemberStatusResponse {
     required this.serverTimestamp,
     required this.expired,
     required this.permanent,
+    required this.deviceId,
   });
 
   // 反序列化:从 JSON 到 Dart 对象

+ 2 - 0
lib/data/api/response/member_status_response.g.dart

@@ -16,6 +16,7 @@ MemberStatusResponse _$MemberStatusResponseFromJson(
       serverTimestamp: (json['serverTimestamp'] as num).toInt(),
       expired: json['expired'] as bool,
       permanent: json['permanent'] as bool,
+      deviceId: json['deviceId'] as String,
     );
 
 Map<String, dynamic> _$MemberStatusResponseToJson(
@@ -28,4 +29,5 @@ Map<String, dynamic> _$MemberStatusResponseToJson(
       'serverTimestamp': instance.serverTimestamp,
       'expired': instance.expired,
       'permanent': instance.permanent,
+      'deviceId': instance.deviceId,
     };

+ 12 - 0
lib/data/repositories/config_repository.dart

@@ -2,8 +2,10 @@ import 'package:get/get.dart';
 import 'package:injectable/injectable.dart';
 import 'package:location/data/api/atmob_api.dart';
 import 'package:location/data/api/request/configs_request.dart';
+import 'package:location/data/api/request/upload_client_id_request.dart';
 import 'package:location/data/bean/config_bean.dart';
 import 'package:location/data/repositories/friends_repository.dart';
+import 'package:location/di/get_it.dart';
 import 'package:location/utils/async_util.dart';
 import 'package:location/utils/http_handler.dart';
 
@@ -30,6 +32,10 @@ class ConfigRepository {
     refreshConfig();
   }
 
+  static ConfigRepository getInstance() {
+    return getIt.get<ConfigRepository>();
+  }
+
   void refreshConfig() {
     AsyncUtil.retry(() => requestConfigsData(), Duration(seconds: 3),
             maxRetry: 100)
@@ -83,4 +89,10 @@ class ConfigRepository {
       isOpenFreeMember.value = cfg["freeMemberEnabled"];
     }
   }
+
+  Future<void> uploadClientId(String clientId) {
+    return atmobApi
+        .uploadClientId(UploadClientIdRequest(clientId))
+        .then(HttpHandler.handle(true));
+  }
 }

+ 38 - 24
lib/sdk/gravity/gravity_helper.dart

@@ -4,8 +4,9 @@ import 'package:flutter/widgets.dart';
 import 'package:gravity_engine/gravity_engine.dart';
 import 'package:gravity_engine/gravity_engine_method_channel.dart';
 import 'package:location/data/repositories/account_repository.dart';
+import 'package:location/data/repositories/config_repository.dart';
+import 'package:location/utils/atmob_log.dart';
 import '../../data/api/response/member_status_response.dart';
-import '../../data/bean/member_status_info.dart';
 import '../../data/consts/build_config.dart';
 import '../../data/consts/payment_type.dart';
 import '../../device/atmob_platform_info.dart';
@@ -15,24 +16,36 @@ import '../../utils/mmkv_util.dart';
 typedef GravitySuccessCallback = void Function();
 
 class GravityHelper {
-  static const String _keyCurrentSsid = "current_ssid";
+  static const String tag = 'GravityHelper';
+  static const String _keyCurrentDeviceId = "current_device_id";
   static CancelableFuture<bool>? _initFuture;
   static String? _currentClientId;
 
   static bool? _isFromPromote;
 
-  static init() async {
+  static init() {
     _initialize(false);
+    _uploadClientId();
   }
 
-  static _initialize(bool refreshSSID,
+  static _uploadClientId() {
+    AsyncUtil.retryWithExponentialBackoff<void>(() async {
+      String deviceId = await _getDeviceId(false);
+      ConfigRepository.getInstance().uploadClientId(deviceId);
+    }, 5)
+        .then((_) {
+      AtmobLog.d(tag, 'gravity uploadClientId success');
+    }).catchError((error) {
+      AtmobLog.d(tag, 'gravity uploadClientId error:$error');
+    });
+  }
+
+  static _initialize(bool refreshDeviceId,
       {GravitySuccessCallback? callback}) async {
-    if (_initFuture != null) {
-      _initFuture?.cancel();
-    }
+    _initFuture?.cancel();
     _initFuture = AsyncUtil.retryWithExponentialBackoff<bool>(() async {
-      String ssid = await _getSSID(refreshSSID);
-      CancelableFuture<bool> initFuture = _gravityInitialize(ssid);
+      String deviceId = await _getDeviceId(refreshDeviceId);
+      CancelableFuture<bool> initFuture = _gravityInitialize(deviceId);
       _initFuture = initFuture;
       return await initFuture;
     }, 5);
@@ -40,43 +53,44 @@ class GravityHelper {
       _isFromPromote = isPromote;
       callback?.call();
     }).catchError((error) {
-      _initialize(refreshSSID, callback: callback);
+      _initialize(refreshDeviceId, callback: callback);
     });
   }
 
-  static Future<String> _getSSID(bool refreshSSID) async {
-    String? currentSSID = _getCurrentSSID();
-    if (currentSSID == null || refreshSSID) {
+  //目前返回deviceId
+  static Future<String> _getDeviceId(bool refreshDeviceId) async {
+    String? currentDeviceId = _getCurrentDeviceId();
+    if (currentDeviceId == null || refreshDeviceId) {
       MemberStatusResponse response =
           await AccountRepository.getInstance().getMemberStatus();
-      KVUtil.putString(_keyCurrentSsid, response.deviceId);
+      KVUtil.putString(_keyCurrentDeviceId, response.deviceId);
       return response.deviceId;
     }
-    return currentSSID;
+    return currentDeviceId;
   }
 
-  static String? _getCurrentSSID() {
-    return KVUtil.getString(_keyCurrentSsid, null);
+  static String? _getCurrentDeviceId() {
+    return KVUtil.getString(_keyCurrentDeviceId, null);
   }
 
-  static CancelableFuture<bool> _gravityInitialize(String ssid) {
+  static CancelableFuture<bool> _gravityInitialize(String deviceId) {
     return AsyncUtil.retryWithExponentialBackoff<bool>(() {
       return GravityEngine.initialize(
               GravityConfig.gravityAppId,
               GravityConfig.gravityAccessToken,
-              ssid,
+              deviceId,
               atmobPlatformInfo.channelName ?? '',
               BuildConfig.isDebug)
           .then((data) {
-        debugPrint('gravity initialize($ssid) success');
-        GravityHelper._currentClientId = ssid;
+        debugPrint('gravity initialize($deviceId) success');
+        GravityHelper._currentClientId = deviceId;
         return data;
       });
     }, 5);
   }
 
   static void onLogin() {
-    _clearCurrentSSID();
+    _clearCurrentDeviceId();
     _initialize(true, callback: () {
       if (_currentClientId != null) {
         GravityEngine.login(_currentClientId!);
@@ -90,8 +104,8 @@ class GravityHelper {
     _initialize(false, callback: null);
   }
 
-  static void _clearCurrentSSID() {
-    KVUtil.putString(_keyCurrentSsid, null);
+  static void _clearCurrentDeviceId() {
+    KVUtil.putString(_keyCurrentDeviceId, null);
   }
 
   static bool? getIsFromPromote() {

+ 1 - 1
plugins/map/lib/src/core/flutter_map.dart

@@ -15,7 +15,7 @@ class FlutterMap {
 
     MapPlatform mapPlatform = MapPlatform(channel);
     if (!await mapPlatform.init()) {
-      throw Exception("地图初始化失败,未找到适配的地图,请检查是否添加地图库");
+      throw Exception("地图初始化失败,未找到适配的地图,请检查是否添加地图库");
     }
     _mapPlatform = mapPlatform;
   }