Как получить уникальный идентификатор устройства в Swift?
Как я могу получить уникальный идентификатор устройств в Swift?
Мне нужен идентификатор для использования в базе данных и как API-ключ для моего веб-сервиса в моем социальном приложении. Что-то, чтобы ежедневно отслеживать эти устройства и ограничивать его запросы к базе данных.
Спасибо!
Ответы
Ответ 1
Вы можете использовать это (Swift 3):
UIDevice.current.identifierForVendor!.uuidString
Для более старых версий:
UIDevice.currentDevice().identifierForVendor
или если вы хотите строку:
UIDevice.currentDevice().identifierForVendor!.UUIDString
Больше не существует способа однозначно идентифицировать устройство после того, как пользователь удалил приложение (и). В документации указано:
Значение в этом свойстве остается неизменным, пока приложение (или другое приложение от того же поставщика) установлено на устройстве iOS. Значение изменяется, когда пользователь удаляет все приложения этих поставщиков с устройства и затем переустанавливает один или несколько из них.
Вы также можете прочитать эту статью Mattt Thompson для получения более подробной информации:
http://nshipster.com/uuid-udid-unique-identifier/
Ответ 2
Для Swift 3.X Последний рабочий код, простое использование;
let deviceID = UIDevice.current.identifierForVendor!.uuidString
print(deviceID)
Ответ 3
Вы можете использовать публичное свойство identifierForVendor, существующее в классе UIDevice
let UUIDValue = UIDevice.currentDevice().identifierForVendor!.UUIDString
print("UUID: \(UUIDValue)")
ИЗМЕНИТЬ
Swift 3:
UIDevice.current.identifierForVendor!.uuidString
END EDIT
![Снимок экрана для иерархии свойств]()
Ответ 4
Вы можете использовать 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" ...
}
}
Типичное использование:
Как правило, вы используете API-интерфейсы DeviceCheck, чтобы гарантировать, что новый пользователь еще не выкупил предложение под другим именем пользователя на том же устройстве.
Необходимы действия сервера:
См. WWDC 2017 - Session 702
больше от статьи Santosh Botre - уникальный идентификатор для iOS-устройств
Совместимый сервер объединяет этот токен с ключом аутентификации, который вы получаете от Apple, и использует результат для запроса доступа к битам каждого устройства.
Ответ 5
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")!)
Ответ 6
Я пробовал с
let UUID = UIDevice.currentDevice().identifierForVendor?.UUIDString
вместо
let UUID = NSUUID().UUIDString
и он работает.