update login with device info
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
import 'package:device_info_plus/device_info_plus.dart';
|
||||
import 'package:firebase_messaging/firebase_messaging.dart';
|
||||
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
|
||||
import 'package:injectable/injectable.dart';
|
||||
import 'package:package_info_plus/package_info_plus.dart';
|
||||
|
||||
@module
|
||||
abstract class FirebaseDi {
|
||||
@@ -10,4 +12,10 @@ abstract class FirebaseDi {
|
||||
@lazySingleton
|
||||
FlutterLocalNotificationsPlugin get localNotifications =>
|
||||
FlutterLocalNotificationsPlugin();
|
||||
|
||||
@lazySingleton
|
||||
DeviceInfoPlugin get deviceInfo => DeviceInfoPlugin();
|
||||
|
||||
@preResolve
|
||||
Future<PackageInfo> get packageInfo => PackageInfo.fromPlatform();
|
||||
}
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:device_info_plus/device_info_plus.dart';
|
||||
import 'package:injectable/injectable.dart';
|
||||
import 'package:package_info_plus/package_info_plus.dart';
|
||||
|
||||
@lazySingleton
|
||||
class DeviceInfoService {
|
||||
DeviceInfoService(this._deviceInfo, this._packageInfo);
|
||||
|
||||
final DeviceInfoPlugin _deviceInfo;
|
||||
final PackageInfo _packageInfo;
|
||||
|
||||
String get appVersion => '${_packageInfo.version}+${_packageInfo.buildNumber}';
|
||||
|
||||
Future<Map<String, String>> getDevicePayload() async {
|
||||
final info = await _getDeviceInfo();
|
||||
return {
|
||||
'device_id': info['device_id'] ?? '',
|
||||
'device_name': info['device_name'] ?? '',
|
||||
'device_type': info['device_type'] ?? 'mobile',
|
||||
'platform': _getPlatform(),
|
||||
'app_version': appVersion,
|
||||
'os_version': info['os_version'] ?? '',
|
||||
};
|
||||
}
|
||||
|
||||
String _getPlatform() {
|
||||
if (Platform.isAndroid) return 'android';
|
||||
if (Platform.isIOS) return 'ios';
|
||||
return 'web';
|
||||
}
|
||||
|
||||
Future<Map<String, String>> _getDeviceInfo() async {
|
||||
if (Platform.isAndroid) {
|
||||
final android = await _deviceInfo.androidInfo;
|
||||
return {
|
||||
'device_id': android.id,
|
||||
'device_name': '${android.manufacturer} ${android.model}',
|
||||
'device_type': _resolveDeviceType(android.model),
|
||||
'os_version': 'Android ${android.version.release} (SDK ${android.version.sdkInt})',
|
||||
};
|
||||
} else if (Platform.isIOS) {
|
||||
final ios = await _deviceInfo.iosInfo;
|
||||
return {
|
||||
'device_id': ios.identifierForVendor ?? '',
|
||||
'device_name': ios.name,
|
||||
'device_type': _resolveDeviceType(ios.model),
|
||||
'os_version': '${ios.systemName} ${ios.systemVersion}',
|
||||
};
|
||||
}
|
||||
return {'device_type': 'desktop'};
|
||||
}
|
||||
|
||||
/// Deteksi device_type berdasarkan nama model
|
||||
/// Nilai valid: mobile | tablet | desktop
|
||||
String _resolveDeviceType(String model) {
|
||||
final lower = model.toLowerCase();
|
||||
if (lower.contains('tablet') || lower.contains('tab') || lower.contains('ipad')) {
|
||||
return 'tablet';
|
||||
}
|
||||
return 'mobile';
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user