2010-12-28 4 views
3

대체 할 수있는 iOS Cocoa 앱을 개발 중입니다. 사용자가 특정 데이터를 입력하지 않으면 기본적으로 장치의 UDID가 대신 사용됩니다. 나는 보내지는 값이 UDID (사용자의 디폴트)인지 또는 그들이 설정 한 커스텀 스트링인지를 알아보기 위해 서버 코드 (Ruby로 작성)에 체크를 추가해야한다.문자열이 iOS 장치의 UDID인지 어떻게 인식합니까?

내 문제의 올바른 해결 방법은 정규 표현식 인 것 같습니다. 정규 표현식을 작성하는 것이 쉽지만이 정규 표현식이 UDID를 인식하는 데 100 % 보장된다는 것을 확신해야합니다.

[[UIDevice currentDevice] uniqueIdentifier] 

그리고 시뮬레이터

, 나는 다시이 값을 얻을 :이에서

6938CA7D-ECE2-53A4-B293-961A8D07AFB1 

을 난 그냥 문자열을 검색 할 수 있음을 추론 할 수

내가 사용하는 코드에서 UDID를 검색 패턴 8-4-4-4-12와 일치하는 16 진수 문자. 하지만 모든 UDID에 대해 이것이 작동하는지 확실히 알고 싶습니다.

Apple의 설명서에서이 문제를 발견 할 수 없어서 누가이 질문에 대한 확실한 답을 줄 수 있는지 궁금합니다 ... 감사합니다!

+0

사소한 의견 : 둘 이상의 사용자가 동일한 문자열을 제공하면 어떻게됩니까? – Joost

+0

iPhone, 코코아 또는 IOS와는 아무 관련이 없습니다. Ruby 관련 질문은 무엇입니까? – VdesmedT

+1

실제 문제는 소프트웨어 동작 설계입니다. UDID는 사람이 아닌 ** 장치 **를 식별합니다. UDID를 사용하면 신뢰할 수있는 사람을 식별 할 수 없습니다. 사용자가 UDID를 변경할 수 없으므로 UDID를 사용하면 많은 문제가 발생할 수 있습니다. – Eonil

답변

1

왜 UDID임을 나타내는 다른 데이터 비트를 보내지 않습니까? 아니면 다른 매개 변수 이름 (UDID=6938...)을 사용하십시오.

# somewhere outside the controller action, maybe the top of the file 
UDID_PATTERN = /\A[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}\Z/ 

# inside the controller action you're sending info to 
udid = params[:UDID] 
if udid && (udid =~ UDID_PATTERN) 
    # do something with the UDID in place of the other 
    # bit of info they could have provided 
end 
+0

답변으로 표시; 명시 적으로 플래그를 지정하는 것을 제외하고는 진정으로 신뢰할만한 방법이 없다는 것이 사실이며, 다른 포스터가 지적했듯이 장치는 시뮬레이터와는 다른 UDID를 생성하는 것으로 보입니다. 이는이 UDID가 예측할 수 없다는 것을 증명하는 또 다른 특징입니다. 하지만 제공된 정규식은 Ruby 코드에 게시 한 패턴과 일치하는 문자열을 인식하는 데 유효한 정규식입니다. – IQpierce

+0

주어진 패턴이 너무 많은 유효한 UDID에 대해 실패합니다. 이제는 하이픈없는 UDID도 있습니다. –

+0

내가 왜 downvoted인지 알 수 있습니까? –

2

당신은 말할 수 없다 : 당신이 정말로하고 싶은 경우

그런 다음 서버에, 당신과 같이 그것을 테스트 할 수 있습니다. 애플 documentation 말한다 : (때로는 고유 한 장치 식별자 UDID로 약칭)

장치의 고유 한 식별자는 장치 일련 번호와 같은 다양한 하드웨어 구성 식별자로부터 해시 값이다.

iPhone 시뮬레이터는 실제 iOS 장비와 비교하여 uniqueIdentifier에 대해 다른 값을 반환합니다. 내가 사용한 모든 실제 iPhone 기기에는 40 자의 16 진수 UDID가 있습니다. 그러나 어떤 가정도하지 않는 것이 가장 좋습니다.

UDID 패턴이 있더라도 사용자가 해당 패턴과 일치하는 것을 입력하면 어떻게 될까요?

2

분명히 유일한 방법은 사용자가 예상 데이터를 입력했는지 여부를 표시하는 추가 필드를 추가하는 것입니다.

UDID 양식 및 알고리즘은 게시되지 않았으며 다시 검색 할 수 있도록 설계되지 않았습니다. 그래서 결정은 가능할 수도 있지만 100 %가 될 수는 없습니다.

관련 문제