2012-12-20 24 views
5

Có cách nào để nhận số nhận dạng thiết bị iOS trong iOS SDK không? Tôi muốn truy cập vào định được trình bày bởi các Xcode trong Organizer - Thiết bị phần, một cái gì đó như: 21xb1fxef5x2052xec31x3xd3x48ex5e437xe593Truy lục số nhận dạng thiết bị iOS

+0

Tại sao bạn muốn để có được định danh đó ? –

+2

Tôi cần phải nhận dạng duy nhất thiết bị – aumanets

Trả lời

7

Từ Apple Documentation:

Một chuỗi chữ và số duy nhất cho mỗi thiết bị dựa trên phần cứng khác nhau chi tiết. (chỉ đọc) (Không được chấp nhận trong iOS 5.0. Sử dụng thuộc tính số nhận dạngForVendor của lớp này hoặc thuộc tính advertisingIdentifier của lớp ASIdentifierManager thay thế, hoặc sử dụng phương pháp UUID của lớp NSUUID để tạo UUID và ghi nó cho người dùng mặc định cơ sở dữ liệu.)

-1

Có có.

[[UIDevice currentDevice] uniqueIdentifier] 

EDIT: Tuy nhiên này không được chấp trong iOS 5. định danh này nên không còn được sử dụng trong iOS 5. đọc this SO bài để biết thêm chi tiết.

+3

Điều này sẽ không được chấp nhận trong iOS 5 và các ứng dụng sử dụng ứng dụng này sẽ không được phép vào App Store. –

12

Dường như bạn vẫn có thể truy cập UDID dưới iOS 6, nhưng nó bị phản đối kể từ iOS 5.0 và bạn không nên sử dụng nó (anyway bạn sẽ nhận được cảnh báo về điều đó)

[UIDevice currentDevice].uniqueIdentifier 

Nếu bạn cần định danh duy nhất bạn nên sử dụng thay vì:

[UIDevice currentDevice].identifierForVendor 

hoặc nếu nó được kết nối với một số loại quảng cáo sau đó:

// from AdSupport.framework 
[ASIdentifierManager sharedManager].advertisingIdentifier 

Tuy nhiên, hai thuộc tính mới này chỉ có sẵn trong iOS> = 6.0, quảng cáoIdentifier không thực sự độc đáo (tôi nhận được nhiều bản sao từ đó).

Tôi giả sử rằng bạn có thể làm một cái gì đó như thế nếu bạn wan't để hỗ trợ cũng iOS < 6:

UIDevice *device = [UIDevice currentDevice]; 
NSString *ident = nil; 
if ([device respondsToSelector:SEL(identifierForVendor)]) { 
    ident = [device.identifierForVendor UUIDString]; 
} else { 
    ident = device.uniqueIdentifier; 
} 

nhưng tôi không chắc chắn cách táo sẽ đáp lại rằng trong quá trình đánh.

Bạn cũng có thể sử dụng một số giải pháp của bên thứ 3 như openUDID hoặc secureUDID . Các UDID mở và an toàn không còn được dùng nữa - sử dụng mã định danh cho nhà cung cấp/quảng cáo.


Cập nhật

Thêm một khả năng là sử dụng địa chỉ MAC như một cơ sở cho băm độc đáo, ví dụ bạn có thể sử dụng mã ODIN1- source is here

Tính đến địa chỉ iOS7 MAC không còn có sẵn. (người ta có thể đọc nó nhưng nó sẽ luôn luôn là cùng một địa chỉ giả 02: 00: 00: 00: 00: 00).

+0

Tài sản không được chấp nhận trong iOS 5.0 – aumanets

+0

vâng, xin lỗi, lúc đầu tôi đã viết uniqueIdentifier thay vì identifierForVendor, nhưng dù sao tôi nghĩ rằng nó là khá rõ ràng rằng một cái gì đó là sai khi tôi viết rằng bạn không nên sử dụng uniqueIdentifier và dòng thứ hai mà bạn nên sử dụng nó;) – lupatus

+0

SecureUDID không còn được hỗ trợ bởi Crashlytics; họ viết: "Chúng tôi khuyên bạn nên sử dụng nhà cung cấp iOS 6 và các mã nhận diện quảng cáo của Apple để thay thế." –

0

bạn có thể tìm thấy định danh thiết bị độc đáo như

[[UIDevice currentDevice] uniqueIdentifier] 
0
+ (NSString *)uuid 
{ 
    NSString *uuidString = nil; 
    CFUUIDRef uuid = CFUUIDCreate(NULL); 
    if (uuid) { 
     uuidString = (NSString *)CFUUIDCreateString(NULL, uuid); 
     CFRelease(uuid); 
    } 
    return [uuidString autorelease]; 
} 

Nó hoạt động 100%, thậm chí trên mô phỏng quá ...

2
NSString* identifier = nil; 
if([UIDevice instancesRespondToSelector:@selector(identifierForVendor)]) { 
    // iOS 6+ 
    identifier = [[[UIDevice currentDevice] identifierForVendor] UUIDString]; 
} else { 
    // before iOS 6, so just generate an identifier and store it 
    identifier = [[NSUserDefaults standardUserDefaults] objectForKey:@"identiferForVendor"]; 
    if(!identifier) { 
    CFUUIDRef uuid = CFUUIDCreate(NULL); 
    identifier = (__bridge_transfer NSString*)CFUUIDCreateString(NULL, uuid); 
    CFRelease(uuid); 
    [[NSUserDefaults standardUserDefaults] setObject:identifier forKey:@"identifierForVendor"]; 
    } 
}