2013년 11월 13일 수요일

[iOS] 설치된 App에서 Vendor를 위한 고유 식별 ID identifierForVendor

1. identifierForVendor란?

 UIDevice 클래스의 속성인 identifierForVendor를 이용하여 설치된 앱에서 Vendor를 위한 공유 ID를 얻을 수 있습니다.
이 속성의 값은 NSUUID 클래스이고 UUIDString을 값으로 참조할 수 있습니다.
또한 하나의 iOS 장치에서 실행되는 같은 공급 업체에서 온 애플리케이션에 대해 동일합니다.
즉, 내 iPhone에서 같은 업체에서 만든 앱들에서 읽으면 동일한 값이 나온다는 것입니다.
A사가 만든 App1, App2에서 identifierForVendor를 읽으면 동일한 값을 얻을 수 있습니다.

같은 기기에서라도, Vendor가 다르면 App에서 읽는 값이 달라집니다.
다른 기기이면 물론 다른 값을 나타내고..

Vendor에 대한 것은 일반적으로 공급 업체가 앱 스토어에서 제공 한 데이터에 의해 결정됩니다.
그리고, 한 기기에서 A사가 만든 모든 App이 삭제가 되고, 다시 설치가 되면, 이 ID는 달라질 수 있습니다.

그리고, 앱을 앱스토어에 제출하지 안은 경우에는 번들 ID로 넣은 값의 처음 두 구성요소를 바탕으로 만듭니다. com.example.app1, com.example.app2 이면 동일한 공급업체 ID를 나타내는 것이 됩니다.

사용 소스는 아래와 같습니다.

Source Code
    UIDevice *device = [UIDevice currentDevice];
    NSUUID *uuid = device.identifierForVendor;
    NSLog(@"identifierForVendor     : %@", uuid.UUIDString);

2. 활용 방법은?

그러면, 이것을 가지고 뭘 이용할 수 있을까요?
설치할 때, 사용자 정보와 idForVendor를 같이 저장을 해 두면, 다른 기기에서 접속하였는지를 알 수가 있습니다. (단, 삭제했다가 다시 설치하면, 다른 기기로 인식할 수도 있습니다.)
유일하게 하나의 기기에서만 동작하게 앱을 만들어야 된다면, 로그인할 때, 해당 idForVendor를 같이 보내고, 같은 idForVendor에서 접속한 것이면, 바로 로그인 할 수 있도록 만들 수가 있겠습니다.
만약 다른 idForVendor를 가지고 접속하면, 이전 idForVendor를 삭제하여서, 유일하게 하나의 기기에서만 접속하도록 할 수 있겠습니다.

Facebook 앱에서 기기접속에 대한, 인증서 요구도 이것을 이용하였을 것 같습니다.
카카오톡에서 기기 인식도 이 값을 이용하지 않을까요?

참고사이트
앱 스토어의 UDID 사용제안에 따른 대안들