DirTy™의 하루일과/DirTy™의 가당찮은iOS

[IOS] device에서 unique 한값??

DirTy™ 2015. 4. 1. 10:47

디바이스에서 어느 unique 한값으로 기기 식별을 하는것이... 현재는 불가능 한것 같다.

예전에는 udid(디바이스 고유넘버)나 전화번호를 sdk자체에서 불러오는 것도 가능 했었던것 같고

그외 wi-fi mac address나 imei 등 기기자체내의 고유 식별자를 불러오는 것 가능 했었던것 같은데 현재는 그 어떤것도 사용 할 수가 없다.(리젝대상, 인하우스 배포라면 가능하겠지...)


이걸 인식하게 된 계기가 사내에서 만든 앱에서 어떤 정책 때문에 uuid를 고유넘버로 인식해서 사용중이었는데 uuid가 앱을 삭제하고 재설치 하거나 업데이트 될때마다 uuid가 변경되어 정책자체에 문제가 생겨버렸다...


여러 매체 사이트 검색결과 ios7이후로는 ios에서 기기자체의 unique한 값은 없다고 생각하면 된다고 한다. 결국 서버에서 인증을 받거나 회원가입을 받거나... 뭐 다른 방법으로 구현을 해야 한다.


그래도 결국은 uuid가 한번 설치하면 삭제되지 않는 방법은 자주가는 맥부기 에서 찾을수 있었다.

아래와같이 사용하면 디바이스를 초기화 하지 않는 이상은 한 앱에서 같은 uuid를 사용 할수 있다고 한다.. 테스트는 못해봐서 모르겠지만... 아마 되겠지 라고 생각중...


- (const char *)uniqueUuid {

    NSString *retrieveuuid = [SSKeychain passwordForService:@"com.yourcompany.appname" account:@"user"];

    if([retrieveuuid length] > 0) {

        return [retrieveuuid UTF8String];

    }

    

    CFUUIDRef uuid = CFUUIDCreate(NULL);

    CFStringRef identifer = CFUUIDCreateString(NULL, uuid);

    CFRelease(uuid);

    NSString *uuidstring = CFBridgingRelease(identifer);

    [SSKeychain setPassword:uuidstring forService:@"com.yourcompany.appname" account:@user""];

    

    return [uuidstring UTF8String];

}