Как получить уникальный идентификатор устройства в 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

и он работает.