get_device_info.dart 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. // ignore_for_file: use_build_context_synchronously, equal_keys_in_map
  2. import 'dart:async';
  3. import 'dart:io';
  4. import 'package:device_info_plus/device_info_plus.dart';
  5. import 'package:firebase_core/firebase_core.dart';
  6. import 'package:firebase_messaging/firebase_messaging.dart';
  7. import 'package:flutter/foundation.dart';
  8. import 'package:flutter/material.dart';
  9. import 'package:flutter/services.dart';
  10. import 'package:get/get.dart';
  11. import 'package:dart_ipify/dart_ipify.dart';
  12. class DeviceInfo extends GetxController {
  13. static final DeviceInfoPlugin deviceInfoPlugin = DeviceInfoPlugin();
  14. DateTime _dateTime = DateTime.now();
  15. DateTime get dateTime => _dateTime;
  16. final List<Map<String, Object?>> _deviceInfo = [];
  17. List<Map<String, Object?>> get deviceInfo => _deviceInfo;
  18. DeviceInfo();
  19. Future<Map<String, String>> getDeviceInfo(
  20. // BuildContext context,
  21. String pageUrl,
  22. String? previousPageUrl,
  23. ) async {
  24. _dateTime = DateTime.now();
  25. final mediaQueryData =
  26. MediaQueryData.fromWindow(WidgetsBinding.instance.window);
  27. final size = mediaQueryData.size;
  28. var deviceInfo = await initPlatformState();
  29. // final ipv4 = await Ipify.ipv4();
  30. // final ipv6 = await Ipify.ipv64();
  31. String? token;
  32. if (Firebase.apps.isNotEmpty) {
  33. token = await FirebaseMessaging.instance.getToken();
  34. }
  35. var mapData = {
  36. 'token': token.toString(),
  37. 'screenResolution': "${size.width} X ${size.height}",
  38. 'platform': deviceInfo["platform"].toString(),
  39. 'modelName': deviceInfo["model"].toString(),
  40. 'version': deviceInfo["version"].toString(),
  41. 'manufacturer': deviceInfo["manufacturer"].toString(),
  42. 'isPhysicalDevice': deviceInfo["isPhysicalDevice"].toString(),
  43. // "ipv4": ipv4.toString(),
  44. // "ipv6": ipv6.toString(),
  45. "deviceId":deviceInfo["deviceId"].toString(),
  46. 'visitedAt': _dateTime.toString(),
  47. 'pageUrl': pageUrl.toString(),
  48. 'previousPageUrl': previousPageUrl.toString(),
  49. // 'duration': null,
  50. // 'existedAt': null,
  51. };
  52. _deviceInfo.add(mapData);
  53. print(mapData);
  54. return mapData;
  55. }
  56. static initPlatformState() async {
  57. var deviceData = <String, dynamic>{};
  58. try {
  59. if (kIsWeb) {
  60. deviceData = _readWebBrowserInfo(await deviceInfoPlugin.webBrowserInfo);
  61. } else {
  62. if (Platform.isAndroid) {
  63. deviceData =
  64. _readAndroidBuildData(await deviceInfoPlugin.androidInfo);
  65. } else if (Platform.isIOS) {
  66. deviceData = _readIosDeviceInfo(await deviceInfoPlugin.iosInfo);
  67. }
  68. }
  69. } on PlatformException {
  70. deviceData = <String, dynamic>{
  71. 'Error:': 'Failed to get platform version.'
  72. };
  73. }
  74. return deviceData;
  75. }
  76. static Map<String, dynamic> _readAndroidBuildData(AndroidDeviceInfo build) {
  77. return <String, dynamic>{
  78. "platform": "Android",
  79. 'version.securityPatch': build.version.securityPatch,
  80. 'version.sdkInt': build.version.sdkInt,
  81. // 'version.release': build.version.release,
  82. 'version': build.version.release,
  83. 'version.previewSdkInt': build.version.previewSdkInt,
  84. 'version.incremental': build.version.incremental,
  85. 'version.codename': build.version.codename,
  86. 'version.baseOS': build.version.baseOS,
  87. 'board': build.board,
  88. 'bootloader': build.bootloader,
  89. 'brand': build.brand,
  90. 'device': build.device,
  91. 'display': build.display,
  92. 'fingerprint': build.fingerprint,
  93. 'hardware': build.hardware,
  94. 'host': build.host,
  95. 'deviceId': build.id,
  96. 'manufacturer': build.manufacturer,
  97. 'model': build.model,
  98. 'product': build.product,
  99. 'supported32BitAbis': build.supported32BitAbis,
  100. 'supported64BitAbis': build.supported64BitAbis,
  101. 'supportedAbis': build.supportedAbis,
  102. 'tags': build.tags,
  103. 'type': build.type,
  104. 'isPhysicalDevice': build.isPhysicalDevice,
  105. 'androidId': build.id,
  106. 'systemFeatures': build.systemFeatures,
  107. };
  108. }
  109. static Map<String, dynamic> _readIosDeviceInfo(IosDeviceInfo data) {
  110. return <String, dynamic>{
  111. "platform": "IOS",
  112. 'name': data.name,
  113. 'systemName': data.systemName,
  114. // 'systemVersion': data.systemVersion,
  115. 'version': data.systemVersion,
  116. 'manufacturer': "Apple",
  117. 'model': data.model,
  118. 'localizedModel': data.localizedModel,
  119. 'deviceId': data.identifierForVendor,
  120. 'isPhysicalDevice': data.isPhysicalDevice,
  121. 'utsname.sysname:': data.utsname.sysname,
  122. 'utsname.nodename:': data.utsname.nodename,
  123. 'utsname.release:': data.utsname.release,
  124. 'utsname.version:': data.utsname.version,
  125. 'utsname.machine:': data.utsname.machine,
  126. };
  127. }
  128. static Map<String, dynamic> _readWebBrowserInfo(WebBrowserInfo data) {
  129. return <String, dynamic>{
  130. "platform": "Web",
  131. 'isPhysicalDevice': true,
  132. 'model': describeEnum(data.browserName),
  133. 'appCodeName': data.appCodeName,
  134. 'appName': data.appName,
  135. 'manufacturer': data.appName,
  136. // 'appVersion': data.appVersion,
  137. 'version': data.appVersion,
  138. 'deviceMemory': data.deviceMemory,
  139. 'language': data.language,
  140. 'languages': data.languages,
  141. 'platform': data.platform,
  142. 'product': data.product,
  143. 'productSub': data.productSub,
  144. 'userAgent': data.userAgent,
  145. 'vendor': data.vendor,
  146. 'vendorSub': data.vendorSub,
  147. 'hardwareConcurrency': data.hardwareConcurrency,
  148. 'maxTouchPoints': data.maxTouchPoints,
  149. };
  150. }
  151. }