2015-03-25 19 views
7

Tôi cần có UDID của iPhone để sử dụng trong ứng dụng iOS của mình.Nhận UDID trong iOS 8 +

Một số thông tin về ứng dụng của tôi:

  • Ứng dụng của tôi không phải dành cho công chúng và sẽ không bao giờ làm cho nó đến cửa hàng, vì vậy tôi có thể sử dụng bất kỳ thư viện của bên thứ 3. Nó sẽ chỉ được sử dụng bởi một số nhân viên tại nơi làm việc.

  • Thiết bị của tôi sẽ luôn được cắm vào máy Mac trong khi ứng dụng của tôi đang chạy.

Cách tôi nhìn thấy, chỉ có 2 cách có thể thực hiện được.

  1. Sử dụng thư viện của bên thứ ba để tải UDID bên trong ứng dụng iOS của tôi.
  2. Vì iPhone sẽ luôn được cắm vào máy Mac trong khi ứng dụng của tôi đang chạy, cách nhận UDID qua Mac và chuyển nó theo cách nào đó đến ứng dụng của tôi trong iPhone.

Bất kỳ ý tưởng nào cũng sẽ được đánh giá cao. Cảm ơn.

Chỉnh sửa: Câu hỏi là, bạn có biết bất kỳ thư viện của bên thứ ba nào hay cách tốt hơn để ứng dụng của tôi tự động nhận UDID của iPhone khi đang chạy không?

Chỉnh sửa 2: Tôi biết điều này có thể được thực hiện chỉ sử dụng điện thoại của tôi vì ứng dụng web này: http://get.udid.io/

làm việc như thế này?

+0

... và y câu hỏi của chúng tôi là ... là ...? – holex

+0

câu hỏi @holex là, bạn có biết bất kỳ thư viện của bên thứ ba nào có thể thực hiện việc này không? Tất cả mọi thứ tôi đã thử Github đã thất bại cho đến nay. – donga

+0

Điều này có liên quan gì với 'osx'? – Popeye

Trả lời

-2

Sử dụng này: [[[UIDevice currentDevice] identifierForVendor] UUIDString];

+9

UUID! = UDID. Không giống nhau. – gnasher729

+1

UUID sẽ không giữ nguyên sau khi cài đặt lại. Tôi đặc biệt muốn UDID vì sau này, tôi muốn dịch vụ web của tôi có thể xác định thiết bị thông qua UDID. – donga

2

Nếu bạn đang cố gắng để đọc UDID để tự động hóa một cái gì đó trên máy Mac, sau đó bạn có thể sử dụng một cái gì đó giống như system_profiler SPUSBDataType để có được UDID cho điện thoại của tôi mục:

  Product ID: 0x12a8 
      Vendor ID: 0x05ac (Apple Inc.) 
      Version: 7.01 
      Serial Number: 7bed*********************************33 
      Speed: Up to 480 Mb/sec 
      Manufacturer: Apple Inc. 
      Location ID: 0x1d110000/6 
      Current Available (mA): 500 
      Current Required (mA): 500 
      Extra Operating Current (mA): 1600 

Dòng Serial NumberUDID (Tôi đã gắn dấu sao nó ra là tôi hoang tưởng ngớ ngẩn).

Lưu ý rằng nếu không có UDID, bạn sẽ không bao giờ có ứng dụng trên điện thoại ngay từ đầu.

Bạn có thể chạy một quy trình daemon nhỏ trên mac, đọc thông tin này và tạo dịch vụ bonjour cung cấp thông tin cho người yêu cầu - đó là SMOP.

+0

Cảm ơn, đây là những gì tôi đã nghĩ đến thực sự. Tình hình của tôi trở nên phức tạp hơn một chút: nếu có nhiều hơn 1 thiết bị được kết nối thì sao? 2 iPhone chẳng hạn? Làm cách nào tôi có thể phân biệt được ứng dụng đang chạy trên iPhone nào? – donga

+0

Đó là một chút khó xử hơn, nhưng nếu bạn biết về việc sử dụng http://get.udid.io/, thì bạn có thể [thiết lập máy chủ của riêng bạn] (http://stackoverflow.com/questions/19032162/is-there -a-way-since-ios-7s-release-to-get-the-udid-without-using-itunes-on-a), và một khi bạn có máy chủ của riêng mình, bạn sẽ có thể trả lại UDID này cho điện thoại nếu nó yêu cầu nó (tôi đã không được thử nghiệm thực hiện điều này). – Petesh

1

Từ giao diện trực tuyến nhanh, có vẻ như bạn có thể sử dụng khung riêng tư được gọi là libMobileGestalt.dylib.

Sau khi liên kết thư viện và nhập tiêu đề, bạn sẽ có thể làm điều gì đó như thế này (reference):

CFStringRef value = MGCopyAnswer(kMGUniqueDeviceID); 
NSLog(@"Value: %@", value); 
CFRelease(value); 

Trên Mac của tôi, tôi có thể thấy rằng dylib đặc biệt ở đây:

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib/libMobileGestalt.dylib 
+0

libMobileGestalt MobileGestalt.c: 534: không truy cập vào UniqueDeviceID (xem ) – Petesh

+0

@Petesh, bạn cũng cần cấp cho ứng dụng của bạn một quyền để sử dụng thành công tính năng này. Xem [câu trả lời này cho điều đó] (http://stackoverflow.com/a/27686125/119114). – Nate

0

Sử dụng mã này trong ios 9

NSUUID *tempUUID = [[UIDevice currentDevice] identifierForVendor]; 
NSString *stringForUDID = [tempUUID UUIDString]; 
NSCharacterSet *notAllowedChars = [[NSCharacterSet characterSetWithCharactersInString:@"1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"] invertedSet]; 
NSString *resultString = [[stringForUDID componentsSeparatedByCharactersInSet:notAllowedChars] componentsJoinedByString:@""]; 
NSLog(@"Final string %@", resultString); 
+0

Tính năng này không hoạt động đối với các ứng dụng dành cho doanh nghiệp: thay đổi số nhận dạng sau khi cài đặt lại ứng dụng. – arts777

0

Here là dự án github mà dường như chính xác cho yêu cầu của bạn

Đây là mã mà làm việc

#import <Foundation/Foundation.h> 
#import <CoreFoundation/CoreFoundation.h> 
#import <liblockdown.h> 
#include <stdio.h> 

... 
    LockdownConnectionRef connection = lockdown_connect(); 

    CFStringRef udid = (CFStringRef)lockdown_copy_value(connection, NULL, kLockdownUniqueDeviceIDKey); 
    CFShow(udid); 

    lockdown_disconnect(connection); 
Các vấn đề liên quan