api_controller.dart 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. import 'dart:convert';
  2. import 'dart:io';
  3. import 'package:device_info_plus/device_info_plus.dart';
  4. import 'package:get/get.dart';
  5. import 'package:nomo/app/data/sp/ix_sp.dart';
  6. import 'package:package_info_plus/package_info_plus.dart';
  7. import 'package:play_install_referrer/play_install_referrer.dart';
  8. import '../../config/translations/localization_service.dart';
  9. import '../../pigeons/core_api.g.dart';
  10. import '../../utils/device_manager.dart';
  11. import '../../utils/log/logger.dart';
  12. import '../constants/platforms.dart';
  13. import '../data/models/fingerprint.dart';
  14. class ApiController extends GetxService {
  15. final TAG = 'ApiController';
  16. //初始化fingerprint
  17. Fingerprint fp = Fingerprint.empty();
  18. Future<Fingerprint> initFingerprint() async {
  19. // 读取app发布渠道
  20. if (Platform.isIOS) {
  21. fp.channel = 'apple';
  22. } else if (Platform.isAndroid) {
  23. fp.channel = 'google';
  24. }
  25. try {
  26. final advertisingId = await CoreApi().getAdvertisingId();
  27. fp.googleId = advertisingId ?? '';
  28. } catch (e) {
  29. log(TAG, 'read app googleId error: $e');
  30. fp.googleId = '';
  31. }
  32. // 读取应用信息
  33. final info = await PackageInfo.fromPlatform();
  34. fp.appVersionCode = int.tryParse(info.buildNumber) ?? 0;
  35. fp.appVersionName = info.version;
  36. // 读取设备信息
  37. final deviceInfo = DeviceInfoPlugin();
  38. if (Platform.isIOS) {
  39. fp.platform = Platforms.iOS;
  40. final iosOsInfo = await deviceInfo.iosInfo;
  41. fp.deviceModel = iosOsInfo.model;
  42. fp.deviceOs = iosOsInfo.systemVersion;
  43. fp.deviceBrand = iosOsInfo.utsname.machine;
  44. } else if (Platform.isAndroid) {
  45. fp.platform = Platforms.android;
  46. final androidOsInfo = await deviceInfo.androidInfo;
  47. fp.deviceModel = androidOsInfo.model;
  48. fp.deviceOs = androidOsInfo.version.release;
  49. fp.deviceBrand = androidOsInfo.brand;
  50. fp.androidId = androidOsInfo.id;
  51. }
  52. //获取设备尺寸
  53. fp.deviceHeight = Get.height.toInt();
  54. fp.deviceWidth = Get.width.toInt();
  55. // 读取设备ID
  56. fp.deviceId = DeviceManager.getCacheDeviceId();
  57. try {
  58. ReferrerDetails referrerDetails =
  59. await PlayInstallReferrer.installReferrer;
  60. fp.refer = referrerDetails.installReferrer ?? '';
  61. } catch (e) {
  62. log(TAG, 'get install referrer error: $e');
  63. }
  64. fp.isNewInstall = IXSP.getIsNewInstall();
  65. fp.userUuid = IXSP.getUserUuid() ?? '';
  66. await updateFingerprintData();
  67. return fp;
  68. }
  69. // 更新部分数据
  70. Future<void> updateFingerprintData() async {
  71. fp.lang = IXSP.getCurrentLocal().languageCode;
  72. fp.phoneCountryIso = LocalizationService.getSystemCountry();
  73. fp.isVpn = await CoreApi().isConnected() ?? false;
  74. if (!fp.isVpn) {
  75. fp.isConnectedVpn = false;
  76. }
  77. try {
  78. final simInfo = await CoreApi().getSimInfo();
  79. // 解析sim
  80. final sim = jsonDecode(simInfo ?? '{}');
  81. fp.simReady = sim['simReady'];
  82. fp.carrierName = sim['carrierName'];
  83. fp.mcc = sim['mcc'];
  84. fp.mnc = sim['mnc'];
  85. fp.countryIso = sim['countryIso'];
  86. fp.networkCarrierName = sim['networkCarrierName'];
  87. fp.networkMcc = sim['networkMcc'];
  88. fp.networkMnc = sim['networkMnc'];
  89. fp.networkCountryIso = sim['networkCountryIso'];
  90. } catch (e) {
  91. log(TAG, 'read app sim error: $e');
  92. }
  93. }
  94. }