iOS 에서 장치 의 유일한 표시 자 를 가 져 오 는 방법 에 대한 자세 한 설명

개발 과정 에서 장치 표 시 를 기록 하고 마 운 트 해제 후 설치 하 더 라 도 다시 식별 할 수 있 는 애플 리 케 이 션 을 만 날 수 있 습 니 다.장치 의 UUID(Universally Unique Identifier)를 읽 고 KeyChain 을 통 해 기록 합 니 다.
우선 iOS 에서 장치 의 유일한 표시 자 를 가 져 오 는 방법 은 버 전의 업데이트 에 따라 달라 집 니 다.iOS 2.0 버 전 이후 UIDevice 는 장치 의 유일한 식별 자 를 가 져 오 는 방법 인 유 니 크 Identifier 를 제공 합 니 다.이 방법 을 통 해 장치 의 시리 얼 번 호 를 가 져 올 수 있 습 니 다.이것 도 지금까지 유일 하 게 확인 할 수 있 는 유일한 표시 자 입 니 다.좋 은 경 치 는 길지 않다.이 유일한 식별 자 는 휴대 전화 와 일일이 대응 하기 때문에 애플 은 사용자 의 프라이버시 를 누설 할 수 있다 고 생각 하기 때문에 iOS 5.0 이후 이 방법 은 폐기 되 었 다.iOS 6.0 시스템 은 유 니 크 Identifier 를 교체 하 는 두 개의 인 터 페 이 스 를 추 가 했 습 니 다.각각 identifier ForVendor,advertising Identifier 입 니 다.그러나 이 두 인 터 페 이 스 는 다시 설치 할 때 수 치 를 바 꿉 니 다.유일한 표시 자가 아니 기 때문에 개발 자 는 와 이 파이 의 mac 주 소 를 사용 하여 대체 합 니 다.iOS 7 에 서 는 애플 이 mac 주 소 를 다시 차단 하기 때문에 개발 자 는 다시 방향 을 바 꾸 어 가 져 온 UDID 를 KeyChain 으로 저장 합 니 다.그러면 나중에 앱 이 삭제 하고 다시 설치 하 더 라 도 KeyChain 에서 읽 을 수 있 습 니 다.
먼저 장치 의 UUID 를 저장 합 니 다.클래스 방법+(id)UUID 를 사용 할 수 있 는 클래스 방법 입 니 다.이 방법 을 사용 하면 UUID 를 얻 을 수 있 습 니 다.다음 코드 를 통 해 UUID 문자열 을 얻 을 수 있 습 니 다:

 NSString *uuid = [[NSUUID UUID] UUIDString];
iOS 6 에 추 가 된 Vindor 표시 자(IDFV-identifier ForVendor)를 저장 할 수도 있 으 며,이 IDFV 를 가 져 오 는 새로운 방법 은 기 존 UIDevice 클래스 에 추 가 됩 니 다.advertising Identifier 와 마찬가지 로 이 방법 은 NSUUID 대상 을 되 돌려 줍 니 다.

NSString *idfv = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
사용자 가 같은 vendor 에 대응 하 는 모든 프로그램 을 마 운 트 해제 한 다음 같은 vendor 가 제공 하 는 프로그램 을 다시 설치 하면 identifier ForVendor 가 리 셋 되 기 때문에 KeyChain 으로 저장 해 야 합 니 다.
KeyChain(열쇠 꾸러미)은 애플 장 치 를 사용 하여 자주 사용 하 는 것 입 니 다.보통 디 버 깅 을 하려 면 인증서 같은 것 을 설치 해 야 합 니 다.이 인증 서 는 KeyChain 에 저장 되 어 있 습 니 다.그리고 저희 가 평소에 웹 페이지 기록 을 조회 하 는 계 정 비밀번호 도 모두 KeyChain 에 기록 되 어 있 습 니 다.iOS 의 KeyChain 은 OS X 에 비해 간단 하 며 전체 시스템 에 하나의 KeyChain 만 있 고 모든 프로그램 이 KeyChain 에 데 이 터 를 기록 할 수 있 으 며 자신의 프로그램 이 KeyChain 에 기록 한 데이터 만 읽 을 수 있다.iOS 에서 Security.framework 프레임 워 크 는 키 체인 을 조작 하 는 네 가지 주요 방법 을 제공 합 니 다.
  • SecItemCopyMatching(CFDictionaryRef query, CFTypeRef *result);//OSStatus 조회
  • SecItemAdd(CFDictionaryRef attributes, CFTypeRef *result); //OSStatus 추가
  • SecItemUpdate(CFDictionaryRef query, CFDictionaryRef attributesToUpdate);//KeyChain 의 ItemOS Status 업데이트
  • SecItemDelete(CFDictionary Ref query)//KeyChain 의 ItemOSStatus 삭제이 네 가지 방법 은 매개 변수 가 비교적 복잡 하 므 로 잘못 전 달 된 후에 KeyChain 을 조작 하 는 데 실패 할 수 있 습 니 다.문서 에 소 개 된 것 이 비교적 상세 하 므 로 여러분 은 찾 아 보 실 수 있 습 니 다공식 문서애플 이 제공 하 는 키 체인 은 사용 하기 가 좀 번 거 로 우 므 로 제3자 라 이브 러 리 SAMKeyChains.SAMKeyChains 를 추천 합 니 다.애플 보안 프레임 워 크 API 를 간단하게 패키지 하여 키 문자열 에 저 장 된 비밀번호,계 정 에 접근 할 수 있 습 니 다.읽 기,삭제,설정 을 포함 합 니 다.SAMKeyChains 는 사용 이 간단 하고 인 스 턴 스 코드 를 통 해 파악 할 수 있 습 니 다.
    
    //    UUID       :
    CFUUIDRef uuid = CFUUIDCreate(NULL);
    assert(uuid != NULL);
    CFStringRef uuidStr = CFUUIDCreateString(NULL, uuid);
     [SAMKeychain setPassword: [NSString stringWithFormat:@"%@", uuidStr]
     forService:@"com.yourapp.yourcompany"account:@"user"];
    
    //      UUID:
    NSString *retrieveuuid = [SAMKeychain passwordForService:@"com.yourapp.yourcompany"account:@"user"];
    
    **주의:setPassword 와 password ForSevice 방법 중의*services 와 accounts 매개 변 수 는 일치 해 야 합 니 다.
    더 자세 한 용법 설명 은 볼 수 있 습 니 다.
    기본 적 인 실현 방향 은 바로 이렇다.다음은 구체 적 인 실현 코드 이 니 참고 하 시기 바 랍 니 다.
    
    + (NSString *)getDeviceId
    {
      NSString * currentDeviceUUIDStr = [SAMKeychain passwordForService:@" "account:@"uuid"];
      if (currentDeviceUUIDStr == nil || [currentDeviceUUIDStr isEqualToString:@""])
      {
        NSUUID * currentDeviceUUID = [UIDevice currentDevice].identifierForVendor;
        currentDeviceUUIDStr = currentDeviceUUID.UUIDString;
        currentDeviceUUIDStr = [currentDeviceUUIDStr stringByReplacingOccurrencesOfString:@"-" withString:@""];
        currentDeviceUUIDStr = [currentDeviceUUIDStr lowercaseString];
        [SAMKeychain setPassword: currentDeviceUUIDStr forService:@" "account:@"uuid"];
      }
      return currentDeviceUUIDStr;
    }
    
    
    이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 기 를 바 랍 니 다.그리고 여러분 들 이 저 희 를 많이 지지 해 주시 기 바 랍 니 다.

    좋은 웹페이지 즐겨찾기