forked from BasedHardware/omi
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathplatform_manager.dart
More file actions
77 lines (64 loc) · 2.76 KB
/
Copy pathplatform_manager.dart
File metadata and controls
77 lines (64 loc) · 2.76 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
import 'dart:async';
import 'dart:convert';
import 'dart:io';
import 'package:crypto/crypto.dart';
import 'package:device_info_plus/device_info_plus.dart';
import 'package:package_info_plus/package_info_plus.dart';
import 'package:omi/backend/preferences.dart';
import 'package:omi/utils/analytics/intercom.dart';
import 'package:omi/utils/analytics/analytics_manager.dart';
import 'package:omi/utils/debugging/crashlytics_manager.dart';
import 'package:omi/utils/platform/platform_service.dart';
/// Centralized platform manager for all platform-specific services
/// This provides a single point of access for all platform services
class PlatformManager {
static final PlatformManager _instance = PlatformManager._internal();
late PackageInfo _packageInfo;
late String _deviceIdHash;
factory PlatformManager() => _instance;
PlatformManager._internal();
static PlatformManager get instance => _instance;
// Service instances
AnalyticsManager get analytics => AnalyticsManager();
IntercomManager get intercom => IntercomManager.instance;
CrashlyticsManager get crashReporter => CrashlyticsManager.instance;
static Future<void> initializeServices() async {
_instance._packageInfo = await PackageInfo.fromPlatform();
_instance._deviceIdHash = await _instance._getDeviceIdHash();
unawaited(AnalyticsManager.init());
await IntercomManager.instance.initIntercom();
}
Future<String> _getDeviceIdHash() async {
// Check if already stored
String storedHash = SharedPreferencesUtil().deviceIdHash;
if (storedHash.isNotEmpty) {
return storedHash;
}
// Generate hash from device info
final deviceInfo = DeviceInfoPlugin();
String deviceIdentifier = '';
try {
if (Platform.isIOS) {
final iosInfo = await deviceInfo.iosInfo;
deviceIdentifier = iosInfo.identifierForVendor ?? '';
} else if (Platform.isAndroid) {
final androidInfo = await deviceInfo.androidInfo;
deviceIdentifier = androidInfo.id;
}
} catch (e) {
// Fallback to timestamp if device info fails
deviceIdentifier = DateTime.now().millisecondsSinceEpoch.toString();
}
// Hash it (first 8 chars of SHA256)
final hash = sha256.convert(utf8.encode(deviceIdentifier)).toString().substring(0, 8);
SharedPreferencesUtil().deviceIdHash = hash;
return hash;
}
String get platform => Platform.operatingSystem;
String get appVersion => '${_packageInfo.version}+${_packageInfo.buildNumber}';
String get appBuild => _packageInfo.buildNumber;
String get deviceIdHash => _deviceIdHash;
bool get isAnalyticsSupported => PlatformService.isAnalyticsSupported;
bool get isDebuggingSupported => PlatformService.isCrashlyticsSupported;
bool get isFCMSupported => Platform.isAndroid || Platform.isIOS;
}