Вы можете использовать это (Swift 3):
UIDevice.current.identifierForVendor!.uuidString
Для более старых версий:
UIDevice.currentDevice().identifierForVendor
или если вам нужна строка:
UIDevice.currentDevice().identifierForVendor!.UUIDString
Больше не существует способа однозначно идентифицировать устройство после того, как пользователь удалил приложение (я). В документации говорится:
Значение этого свойства остается неизменным, пока приложение (или другое приложение от того же поставщика) установлено на устройстве iOS. Значение изменяется, когда пользователь удаляет все приложения этого поставщика с устройства и впоследствии переустанавливает одно или несколько из них.
Вы также можете прочитать эту статью Мэтта Томпсона для получения более подробной информации:
http://nshipster.com/uuid-udid-unique-identifier/
Обновление для Swift 4.1 , вам нужно будет использовать:
UIDevice.current.identifierForVendor?.uuidString
Вы можете использовать общедоступное свойство identifierForVendor, присутствующее в классе UIDevice
let UUIDValue = UIDevice.currentDevice().identifierForVendor!.UUIDString print("UUID: \(UUIDValue)")
ИЗМЕНИТЬ Swift 3:
UIDevice.current.identifierForVendor!.uuidString
КОНЕЦ РЕДАКТИРОВАНИЯ
источник
Для Swift 3.X последний рабочий код, простота использования;
let deviceID = UIDevice.current.identifierForVendor!.uuidString print(deviceID)
источник
Вы можете использовать devicecheck (в Swift 4) документацию Apple
func sendEphemeralToken() { //check if DCDevice is available (iOS 11) //get the **ephemeral** token DCDevice.current.generateToken { (data, error) in guard let data = data else { return } //send **ephemeral** token to server to let token = data.base64EncodedString() //Alamofire.request("https://myServer/deviceToken" ... } }
Типичное использование:
Действия сервера требуют:
См. WWDC 2017 - Сессия 702
больше из статьи Сантоша Ботре - Уникальный идентификатор для устройств iOS
источник
Swift 2.2
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { let userDefaults = NSUserDefaults.standardUserDefaults() if userDefaults.objectForKey("ApplicationIdentifier") == nil { let UUID = NSUUID().UUIDString userDefaults.setObject(UUID, forKey: "ApplicationIdentifier") userDefaults.synchronize() } return true } //Retrieve print(NSUserDefaults.standardUserDefaults().valueForKey("ApplicationIdentifier")!)
источник
Значение identifierForVendor изменяется, когда пользователь удаляет все приложения этого поставщика с устройства, если вы хотите сохранить уникальный идентификатор даже для последующих новых установок, вы можете попробовать использовать следующую функцию
func vendorIdentifierForDevice()->String { //Get common part of Applicatoin Bundle ID, Note : getCommonPartOfApplicationBundleID is to be defined. let commonAppBundleID = getCommonPartOfApplicationBundleID() //Read from KeyChain using bunndle ID, Note : readFromKeyChain is to be defined. if let vendorID = readFromKeyChain(commonAppBundleID) { return vendorID } else { var vendorID = NSUUID().uuidString //Save to KeyChain using bunndle ID, Note : saveToKeyChain is to be defined. saveToKeyChain(commonAppBundleID, vendorID) return vendorID } }
источник
if (UIDevice.current.identifierForVendor?.uuidString) != nil { self.lblDeviceIdValue.text = UIDevice.current.identifierForVendor?.uuidString }
источник
class func uuid(completionHandler: @escaping (String) -> ()) { if let uuid = UIDevice.current.identifierForVendor?.uuidString { completionHandler(uuid) } else { // If the value is nil, wait and get the value again later. This happens, for example, after the device has been restarted but before the user has unlocked the device. // https://developer.apple.com/documentation/uikit/uidevice/1620059-identifierforvendor?language=objc DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) { uuid(completionHandler: completionHandler) } } }
источник
Я пробовал с
let UUID = UIDevice.currentDevice().identifierForVendor?.UUIDString
вместо
let UUID = NSUUID().UUIDString
и это работает.
источник