base_request.dart 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. import 'dart:io';
  2. import 'package:electronic_assistant/utils/app_info_util.dart';
  3. import 'package:electronic_assistant/utils/ios_device_info.dart';
  4. import 'package:electronic_assistant/utils/mmkv_util.dart';
  5. import 'package:flutter/cupertino.dart';
  6. import 'package:json_annotation/json_annotation.dart';
  7. import 'package:uuid/uuid.dart';
  8. part 'base_request.g.dart';
  9. @JsonSerializable()
  10. class BaseRequest {
  11. /// 平台类型: 1-Android 2-iOS 3-移动H5 4-PC_WEB 5-微信小程序 6-微信小游戏
  12. /// 7-微信公众号 8-抖音小程序 9-抖音小游戏 10-鸿蒙APP
  13. @JsonKey(name: "appPlatform")
  14. late int appPlatform = 0;
  15. /// 操作系统:android、ios、mac、windows、linux、harmony
  16. @JsonKey(name: "os")
  17. late String os = "unknown";
  18. @JsonKey(name: "osVersion")
  19. late String osVersion;
  20. /// 包信息
  21. @JsonKey(name: "packageName")
  22. String? packageName;
  23. @JsonKey(name: "appVersionName")
  24. String? appVersionName;
  25. @JsonKey(name: "appVersionCode")
  26. int? appVersionCode;
  27. /// 渠道信息, iOS没有渠道信息, Android通过渠道包工具获取
  28. @JsonKey(name: "channelName")
  29. String? channelName;
  30. /// 设备信息
  31. /// Android特有
  32. @JsonKey(name: "oaid")
  33. String? oaid;
  34. @JsonKey(name: "aaid")
  35. String? aaid;
  36. @JsonKey(name: "androidId")
  37. String? androidId;
  38. @JsonKey(name: "imei")
  39. String? imei;
  40. @JsonKey(name: "simImei0")
  41. String? simImei0;
  42. @JsonKey(name: "simImei1")
  43. String? simImei1;
  44. /// iOS特有
  45. @JsonKey(name: "idfa")
  46. String? idfa;
  47. @JsonKey(name: "idfv")
  48. String? idfv;
  49. /// 公共设备信息
  50. @JsonKey(name: "machineId")
  51. String? machineId;
  52. @JsonKey(name: "brand")
  53. String? brand;
  54. @JsonKey(name: "model")
  55. String? model;
  56. @JsonKey(name: "mac")
  57. String? mac;
  58. @JsonKey(name: "wifiName")
  59. String? wifiName;
  60. /// 地理位置信息
  61. @JsonKey(name: "region")
  62. String? region;
  63. @JsonKey(name: "locLng")
  64. double? locLng;
  65. @JsonKey(name: "locLat")
  66. double? locLat;
  67. BaseRequest() {
  68. initPlatformOS();
  69. initPackageInfo();
  70. initChannelInfo();
  71. initDeviceInfo();
  72. }
  73. Map<String, dynamic> toJson() => _$BaseRequestToJson(this);
  74. void initPlatformOS() {
  75. if (Platform.isAndroid) {
  76. appPlatform = 1;
  77. os = "android";
  78. } else if (Platform.isIOS) {
  79. appPlatform = 2;
  80. os = "ios";
  81. } else if (Platform.isMacOS) {
  82. os = "mac";
  83. } else if (Platform.isWindows) {
  84. os = "windows";
  85. } else if (Platform.isLinux) {
  86. os = "linux";
  87. } else if (Platform.isFuchsia) {
  88. os = "fuchsia";
  89. }
  90. osVersion = Platform.operatingSystemVersion;
  91. debugPrint("os: $os, osVersion: $osVersion");
  92. }
  93. void initPackageInfo() {
  94. packageName = appInfoUtil.packageName;
  95. appVersionName = appInfoUtil.appVersionName;
  96. appVersionCode = appInfoUtil.appVersionCode;
  97. }
  98. void initChannelInfo() {
  99. channelName = "";
  100. }
  101. void initDeviceInfo() {
  102. //TODO 暂时使用UUID作为设备唯一标识
  103. androidId = KVUtil.getString('androidId', '');
  104. if (Platform.isAndroid) {
  105. if (androidId == null || androidId?.isEmpty == true) {
  106. String uuid = const Uuid().v4();
  107. KVUtil.putString('androidId', uuid);
  108. androidId = uuid;
  109. }
  110. } else if (Platform.isIOS) {
  111. idfa = IosDeviceInfo.getIdfa();
  112. idfv = IosDeviceInfo.getIdfv();
  113. }
  114. }
  115. }