ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • identifierForVendor를 이용한 기기 식별하기
    iOS 2023. 5. 30. 08:48

    안녕하세요. 그린입니다🍏

    이번 포스팅에서는 identifierForVendor 값을 이용하여 기기를 식별하는것에 대해 알아보려 합니다🙋🏻

     

    만약 해당 앱에서 특별히 회원가입이나 소셜 로그인 등의 기능이 없지만 기기마다 식별을 해주어 서버와 통신을 하고 싶을때가 있을겁니다.

    그럴때는 몇가지 방법들이 있지만 오늘 소개할 identifierForVendor의 값을 이용하여 해당 앱에서의 기기별 식별할 값으로 이용할 수 있을겁니다.

     

    그럼 우선 identifierForVendor가 뭔지부터 알아야겠죠?

     

    identifierForVendor?

    identifierForVendor는 UIKit의 UIDevice에서 제공하는 인스턴스 프로퍼티입니다.

    앱 공급업체에 대해 기기를 고유하게 식별하는 영문과 숫자로 이루어진 문자열입니다🎉

     

    선언은 아래와 같이 UUID 타입이에요!

    var identifierForVendor: UUID? { get }

     

    특징으로는 해당 값은 동일한 기기에서 실행되는 공급업체의 앱에 대해서는 동일한 값을 가집니다.

    일반적으로 Vendor는 앱 스토어에서 제공하는 데이터에 따라 결정됩니다.

    앱 스토어에서 아직 앱이 설치되지 않은 경우에는 공급업체 식별자는 앱의 번들 ID를 기반으로 간주됩니다.

    여기서 번들 ID는 역방향 DNS 형식으로 가정된다고 합니다.

     

    공식문서에서는 iOS 6과 iOS 7에서 이 공급업체 ID를 생성하는데 차이가 있다고 해요.

    (사실 7 이상이니 이제는 7 이상만 숙지하면 되지 않을까 하지만!?)

    6은 번들 ID의 첫 두 구성요소가 공급업체 ID를 생성하는데 사용됩니다.

    반면 7에서는 마지막 구성 요소 외에 번들의 모든 구성 요소가 공급업체 ID를 생성하는데 사용됩니다.

    6과 7에서 만약 번들 ID에 단일 구성 요소만 있는 경우에는 전체 번들 ID가 공급업체 ID를 생성하는데 사용되죠!

     

    자 그럼 한번 정리해볼까요?

     

    identifierForVendor 값은 해당 공급업체 즉, 앱을 만들어 배포한 그 공급처의 BundleID를 기준으로 공급업체 ID가 만들어집니다.

    공급업체 ID가 같은 앱이 여러개 있다하더라도 하나의 기기에서는 하나의 identifierForVendor 값을 가집니다.

    다른 기기라면 당연히 다른 identifierForVendor 값읕 가지죠.

     

    조금 더 구체적으로 예를들어보자면 그린이라는 앱과 레드라는 앱의 bundle ID가 com.color.green과 com.color.red로 지정되있다고 가정해볼께요.

    그럼 생성되는 공급업체 ID는 com.color를 가지고 공통적으로 생성됩니다.

    자 그럼 같은 공급업체 ID를 가졌기에 한 기기에서 그린과 레드 앱을 설치 했을때 같은 identifierForVendor 값을 가지게 되는것입니다.

     

    여기서 중요한건 identifierForVendor 값은 항상 해당 기기에서 모뎀 정보와 같은 변동되지 않은 값이 아닙니다.

    만약 그린과 레드 앱을 모두 삭제하고 다시 설치한다면 새로운 다른 identifierForVendor 값을 부여받게 됩니다.

    그린 앱만 삭제하고 해당 동일한 공급업체 ID를 가진 레드 앱이 존재한다면 identifierForVendor 값은 유지되어 남아있습니다.

    즉, 해당 공급업체의 모든 앱을 삭제하고 재설치 시에만 identifierForVendor 값이 변경됩니다🔥

     

    즉 앱에서 만약 이 identifierForVendor 값을 어디에나 저장하는 경우 식별자가 변경되는 상황을 적절하게 처리해둬야 합니다.

     

    그럼 기기의 고유 모뎀 정보같은걸로 특정 기기임을 사용하게끔 하면 삭제 후 재설치 시에도 문제 없고 더 확실하게 회원가입이나 소셜 로그인 없이도 기기들을 식별하는 가장 좋은 방법 아닌가요?

     

    물론 이에 대해서는 가장 확실한 방법이긴 하지만 좋은 방법은 아니라고 합니다.

    왜냐하면 보안상 이슈가 발생할 수 있기 때문이죠.

    해당 기기의 고유 정보가 다 노출되는것이잖아요?

    그렇기에 애플에서는 기기의 모뎀 정보에 직접 접근하는 것은 프라이버시 정책과 비공개 API 사용으로 인해 지원하지 않고 있습니다.🥲

     

    자 그럼 길었는데 identifierForVendor가 뭔지 알아봤으니 어떻게 코드로 쓰이고 어떤 값을 담는지 확인해볼까요?

     

    identifierForVendor 사용해보기

    아주아주 간단하게 값을 가져올 수 있습니다.

    UIDevice.current.identifierForVendor?.uuidString
    // "A7023DF4-C8EC-49E5-BD1D-F4E15199EC39"

    해당 코드를 통해 identifierForVendor를 String으로 변환하여 값을 가져올 수 있죠.

    주석과 같이 영문자와 숫자로 이뤄진 identifierForVendor 값을 추출할 수 있습니다.

     

    마무리

    자 이렇게 identifierForVendor, 줄여서 IDFV라고도 하는것에 대해 알아봤습니다.

    편리하게 사용되고 유용하긴 한데 그래도 대부분 개인 앱들에서는 해당 앱이 하나일테고 삭제 후 재설치나 다른 기기에서도 해당 유저를 동일 유저로 구분할 수 있어야 한다면 소셜로그인 혹은 회원가입을 통해 확실하게 기기뿐 아니라 유저를 식별해주는게 더 좋은 방법일것 같긴합니다🏄🏻‍♂️

     

    [참고 자료]

    https://developer.apple.com/documentation/uikit/uidevice/1620059-identifierforvendor

     

    identifierForVendor | Apple Developer Documentation

    An alphanumeric string that uniquely identifies a device to the app’s vendor.

    developer.apple.com

Designed by Tistory.