본문 바로가기

Personal Posting/Flutter

Flutter에서 Android MacAddress 에러

기존에 배포하던 태블릿 기기에서 사용하던 MAC 주소 접근 방법이 김수석님이 사용하는 폰에서는 동작하지 않는 문제가 발견되었다.

 

기존 배포용 태블릿 안드로이드 버전은 Android11 이었으며, '/sys/class/net/wlan0/address' 파일을 통해 MAC 주소를 가져오는 방법을 사용하고 있었다. 문제는 이러한 방법은 네트워크 인터페이스의 설정 파일에 직접 액세스하여 MAC 주소를 가져오기 때문에 상대적으로 간단하고 편하지만 결국은 트릭키한 방법이기 때문에 안드로이드 버전에 따라 동작하지 않을 수 있다는 것이다. 현재 안드로이드의 보안 및 프라이버시 정책은 지속적으로 강화되고 있으며, 특정 디렉토리나 파일에 대한 접근을 제한하는 추세이다. 검색해보니 기존에 동작하던 Android 11에서도 기기에 따라 위 방식이 동작하지 않는 기기들도 있다고하니, 운이 좋았던 것인지 안좋았던 것인지 모르겠다.🤣

 

기존에 사용하고 있던 device_info_plus 패키지의 정보에서 무엇인가 사용할만한 것이 있을까 살펴보았다.

AndroidDeviceInfo의 id 값을 사용하라는 내용이 있었지만 확인 결과, 이 값을 기기의 고유식별자로 사용하기에는 무리가 있었다.

우선 API 문서에서 id의 정의는 아래와 같다. (참고로 구버전에서는 androidId를 제공해주었지만 4.0.0 버전부터 삭제되었다.)

 


String id final 

Either a changelist number, or a label like "M4-rc20".

 https://developer.android.com/reference/android/os/Build#ID

 

Build  |  Android Developers

 

developer.android.com


이 ID는 android.os.Build.ID 즉, 안드로이드 시스템의 빌드 ID를 나타낸다. 이 값은 안드로이드 시스템의 릴리스 버전과 빌드 정보에 따라 설정되며, 보통은 기기의 고유 식별자로 사용하는 것은 권장되지 않는다. 왜냐하면 이 값은 안드로이드 시스템의 빌드에 대한 정보이며, 동일한 안드로이드 버전 및 빌드 버전을 사용하는 여러 기기에서 동일한 값일 수 있기 때문이다.

 

결국 기기를 식별하기 위해 다른 새로운 방안을 찾을 수 밖에 없는 상황이 되었다.

 

다만 MAC 주소를 비롯한 기기 고유 식별자는 네트워크 및 보안 정책에 민감하게 영향을 받기 때문에, 이번에 새로운 방법을 찾는다 하여도 추후 기존 방식이 동작하지 않을 가능성이 높다. 현재로서는 다음과 같은 접근 방법을 고려하고 있다.

UUID 생성 및 저장
– 앱 실행 시 UUID(범용 고유 식별자)를 생성하여 로컬에 저장하고, 이후 이를 고유 식별자로 활용하는 방법. 이는 기기 자체의 식별자가 아닌 앱 수준에서 고유성을 부여하는 방식이다.

SafetyNet 및 Play Integrity API 활용
– Google의 SafetyNet API 또는 Play Integrity API를 사용하여 기기의 무결성과 인증 상태를 확인하고, 필요한 경우 특정 식별 정보를 얻는 방식이다.

Firebase Installation ID
– 현재 내 프로젝트에서는 사용하지 않지만 Firebase를 사용하는 경우, Firebase Installation ID를 활용하여 기기별로 고유한 식별자를 생성할 수 있다.

로컬 네트워크 정보 활용
– MAC 주소가 아닌 IP 주소나 네트워크 SSID 등의 정보를 조합하여 고유성을 보장할 수 있는 방법도 종종 사용되는 방법이다.

 

결국은 위 리스트 중에서 선택되어야 할 것으로 보인다. 안드로이드 플랫폼의 보안 및 프라이버시 정책은 지속적으로 강화되고 있기 때문에 개발자로 하여금 기존 방식에 의존하지 않고 더 안전하고 표준적인 방법을 탐구하도록 만드는 것 같다. 비록 기존의 방식이 더 이상 동작하지 않더라도, 이는 새로운 대안을 모색하고 앱의 안정성과 보안을 강화할 기회로 삼는 원영적 사고가 필요할 것 같다.

'Personal Posting > Flutter' 카테고리의 다른 글

SOLID 원칙 Flutter 프로젝트에 적용하기  (1) 2025.01.03
Secure API key 사용  (1) 2025.01.03
Dart 내용 정리  (0) 2023.12.20
Android 앱 빌드 후 API 호출 문  (0) 2023.09.21
Android apk 빌드 시 앱 아이콘 변경  (0) 2023.09.21