https://pub.dev/packages/device_info
https://pub.dev/packages/device_info_plus
import 'dart:io'; //Platform 사용을 위한 패키지
import 'package:flutter/services.dart'; //PlatformException 사용을 위한 패키지
import 'package:device_info/device_info.dart'; // 디바이스 정보 사용 패키지
Future<String> getMobileId() async {
// DeviceInfoPlugin 클래스 생성
final DeviceInfoPlugin deviceInfoPlugin = DeviceInfoPlugin();
// id 저장할 변수
String id = '';
try {
// 플랫폼 확인
if (Platform.isAndroid) {
// 안드로이드의 경우 androidInfo를 이용
// 이때 await으로 데이터 받을때까지 대기를 해야함
final AndroidDeviceInfo androidData = await deviceInfoPlugin.androidInfo;
// 전달 받은 변수의 멤버 변수인 androidId가 고유 id이다.
id = androidData.androidId;
} else if (Platform.isIOS) {
// iOS의 경우 iosInfo를 이용
// 이때 await으로 데이터 받을때까지 대기를 해야함
final IosDeviceInfo iosData = await deviceInfoPlugin.iosInfo;
// 전달 받은 변수의 멤버 변수인 identifierForVendor가 고유 id이다.
id = iosData.identifierForVendor;
}
} on PlatformException {
// 어떠한 원인으로 실패할 경우
id = '';
}
// id 한번 출력해보고
print('id: $id');
// 값 리턴
return id;
}
위 함수를 다음과 같이 사용하면 된다.
final String mobileId = await getMobileId();
안드로이드의 경우 보안 설정이 변경되거나 하면 값이 바뀔 수 있다고 하고 iOS의 경우 해당 앱을 제거하고 다시 설치하면 변경되는 것 같다.
물론 iOS의 경우 앱 개발사와 관련 있어 동일한 개발사가 만든 앱이 설치되어 있다면 변경은 안 되는 것 같다.
이 문제는 각각의 OS 정책이니 따로 찾아보면 더 많은 정보를 얻을 수 있을 것 같다.
그리고 위 id 외에도 각 os 별 얻을 수 있는 정보들이 많이 있는데 아래 코드와 같이 함수를 만들어 각 os 별 얻을 수 있는 정보들을 Map 형태로 받아 사용도 좋을 듯싶다.
// https://pub.dev/packages/device_info/example 예제 일부
// 안드로이드에서 얻을 수 있는 정보들
Map<String, dynamic> _readAndroidBuildData(AndroidDeviceInfo build) {
return <String, dynamic>{
'version.securityPatch': build.version.securityPatch,
'version.sdkInt': build.version.sdkInt,
'version.release': build.version.release,
'version.previewSdkInt': build.version.previewSdkInt,
'version.incremental': build.version.incremental,
'version.codename': build.version.codename,
'version.baseOS': build.version.baseOS,
'board': build.board,
'bootloader': build.bootloader,
'brand': build.brand,
'device': build.device,
'display': build.display,
'fingerprint': build.fingerprint,
'hardware': build.hardware,
'host': build.host,
'id': build.id,
'manufacturer': build.manufacturer,
'model': build.model,
'product': build.product,
'supported32BitAbis': build.supported32BitAbis,
'supported64BitAbis': build.supported64BitAbis,
'supportedAbis': build.supportedAbis,
'tags': build.tags,
'type': build.type,
'isPhysicalDevice': build.isPhysicalDevice,
'androidId': build.androidId,
'systemFeatures': build.systemFeatures,
};
}
// https://pub.dev/packages/device_info/example 예제 일부
// ios 얻을 수 있는 정보들
Map<String, dynamic> _readIosDeviceInfo(IosDeviceInfo data) {
return <String, dynamic>{
'name': data.name,
'systemName': data.systemName,
'systemVersion': data.systemVersion,
'model': data.model,
'localizedModel': data.localizedModel,
'identifierForVendor': data.identifierForVendor,
'isPhysicalDevice': data.isPhysicalDevice,
'utsname.sysname:': data.utsname.sysname,
'utsname.nodename:': data.utsname.nodename,
'utsname.release:': data.utsname.release,
'utsname.version:': data.utsname.version,
'utsname.machine:': data.utsname.machine,
};