2011-10-18 31 views
10

thể trùng lặp:
UIDevice uniqueIdentifier Deprecated - What To Do Now?UUID cho ứng dụng trên iOS5

Như tôi hy vọng bạn nhận thức được, các uniqueIdentifier trong bị phản đối trong iOS5. Những gì tôi đang tìm kiếm về cơ bản các chức năng tương tự cho iOS5.

Những gì tôi hiểu từ tài liệu này là mong muốn rằng chúng tôi (nhà phát triển) tạo UUID của riêng mình (sử dụng CFUUIDCreate Tôi đoán) và lưu trữ nó trong NSUserDefaults. Điều này, tuy nhiên, làm cho tôi rùng mình một chút và không hề cảm thấy tiết kiệm. Cảm thấy hơi vô nghĩa khi có UUID trong trường hợp này.

Lý do tôi cần UUID là vì tôi gửi thông tin bó bao gồm UUID tới máy chủ của tôi trong quá trình xác thực và muốn bỏ qua một số bước nếu máy chủ có thể "đoán" người dùng tiếp theo ứng dụng được khởi chạy hoặc cài đặt lại hoặc một ứng dụng khác triển khai thư viện của tôi. CFUUIDCreate dường như không giúp tôi với điều này.

Tôi cũng xem nhanh gekitz, nhưng khi tôi hiểu nó, nó chỉ dựa trên địa chỉ MAC của thẻ "Ethernet" trong điện thoại. Điều này không phù hợp vì tôi có cảm giác mơ hồ rằng địa chỉ MAC có thể thay đổi. Các uniqueIdentifier trong là

Một chuỗi chữ và số duy nhất cho mỗi thiết bị dựa trên các chi tiết phần cứng khác nhau.

Tôi đã viết mã này để truy xuất UUID. Nhưng ngay sau khi tôi làm sạch trong XCode và cài đặt lại ứng dụng trên điện thoại, tôi nhận được một UUID mới.

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
NSString *UUID = @""; 

if (![defaults valueForKey:@"UUID"]) 
{ 
    CFUUIDRef UUIDRef = CFUUIDCreate(kCFAllocatorDefault); 
    CFStringRef UUIDSRef = CFUUIDCreateString(kCFAllocatorDefault, UUIDRef); 
    UUID = [NSString stringWithFormat:@"%@", UUIDSRef]; 

    [defaults setObject:UUID forKey:@"UUID"]; 
} 
else { 
    UUID = [defaults valueForKey:@"UUID"]; 
} 

[deviceInformation setObject:UUID forKey:@"UUID"]; 

Nói tóm lại, câu hỏi của tôi là như sau:
Có một số cách vững chắc của việc tạo ra một UUID được dựa trên các thiết bị đó là "cứng" để làm xáo trộn và mang lại cho tôi như nhận một chút một cái gì đó để phụ thuộc và tin tưởng vào? Điều này không cần phải dựa trên thiết bị, có thể dựa trên ứng dụng dưới dạng UUID ứng dụng miễn là ứng dụng này giống nhau sau khi cài đặt lại.

+0

Tại sao UUID từ 'CFUUIDCreate' được lưu trữ bằng' NSUserDefaults', không thỏa mãn trường hợp sử dụng xác thực của bạn? Mỗi lần cài đặt sẽ luôn gửi cùng một giá trị (cho đến khi nó bị xóa và cài đặt lại). Nó có thể gây phiền nhiễu trong khi phát triển, nhưng người dùng không thường xuyên xóa ứng dụng của anh ấy, phải không? – DarkDust

+0

Ngoài ra, tại sao MAC thay đổi? Nó có thể thay đổi trên PC, nơi bạn có thể chỉnh sửa nó bằng một số công cụ, nhưng miễn là bạn không làm điều đó thì MAC không bao giờ thay đổi. – DarkDust

+1

@DarkDust Nó không phải là một bản sao có thể. Tôi đã đọc bài đăng đó trước khi tôi đăng bài của riêng mình. Bạn đã trả lời nhận xét thứ hai của mình trong chính nhận xét đó. Lần sau khi ứng dụng được cài đặt, tôi cần cùng một UUID, không phải là UUID mới cho cài đặt đó. Tôi xóa các ứng dụng khá reguarlly, và tôi cũng là một người dùng. Tuy nhiên, câu hỏi SO này không phải là về thói quen của người dùng, bất kể họ là gì. Yêu cầu của tôi là UUID là duy nhất nhưng cũng giống như mọi lần cài đặt. –

Trả lời

7

Cho đến nay, MAC có vẻ là cách "ổn định" duy nhất được biết để xác định thiết bị.

Hãy xem Erica Sadun's UIDevice(Hardware) category, bạn sẽ nhận thấy rằng điều hữu ích duy nhất để nhận dạng là MAC.

Cô ấy cũng có danh mục UIDevice(IOKit_Extensions) cung cấp số IMEI và số sêri. Tuy nhiên, IOKit là API riêng tư. Erica wrote:

Khi nhà truyền giáo iPhone Matt Drance tweeted, "IOKit không được công khai trên iPhone. Thiếu tiêu đề và tài liệu hiếm khi bị giám sát".

Vì vậy, việc sử dụng IOKit có thể khiến bạn bị từ chối.

Theo tôi biết không có cách nào để người dùng thay đổi MAC mà không cần bẻ khóa thiết bị (và sau đó anh ta có thể làm bất cứ điều gì anh ta muốn). Vì vậy, đề xuất của tôi là bỏ qua các trình bẻ khóa và chỉ cần sử dụng UUID dựa trên MAC.

Cảnh báo! API địa chỉ MAC sẽ không hoạt động trong iOS 7.

+0

Như tôi đã đề cập trong cuộc trò chuyện, thư viện riêng tư là một chút không không. Apple sẽ không cho phép nó. Tôi sẽ phải sử dụng địa chỉ Mac. Thnx giúp bạn! –

Các vấn đề liên quan