web-dev-qa-db-fra.com

Comment obtenir un identifiant unique dans Swift?

Comment puis-je obtenir un identifiant unique d'appareil dans Swift?

J'ai besoin d'un identifiant à utiliser dans la base de données et en tant que clé API pour mon service Web dans mon application sociale. Quelque chose pour garder une trace de l'utilisation quotidienne de ce périphérique et limiter ses requêtes à la base de données.

Merci!

157
User

Vous pouvez utiliser ceci (Swift 3):

UIDevice.current.identifierForVendor!.uuidString

Pour les anciennes versions:

UIDevice.currentDevice().identifierForVendor

ou si vous voulez une chaîne:

UIDevice.currentDevice().identifierForVendor!.UUIDString


Il n'est plus possible d'identifier de manière unique un périphérique après que l'utilisateur a désinstallé la ou les applications. La documentation dit:

La valeur de cette propriété reste la même tant que l'application (ou une autre application du même fournisseur) est installée sur le périphérique iOS. La valeur change lorsque l’utilisateur supprime toutes les applications de ce fournisseur du périphérique, puis réinstalle une ou plusieurs d’entre elles.


Vous pouvez également lire cet article de Mattt Thompson pour plus de détails:
http://nshipster.com/uuid-udid-unique-identifier/

Mise à jour pour Swift 4.1 , vous devrez utiliser:

UIDevice.current.identifierForVendor?.uuidString
344
Atomix

Pour Swift 3.X Dernier code de travail, facilement utiliser;

   let deviceID = UIDevice.current.identifierForVendor!.uuidString
   print(deviceID)
9
SwiftDeveloper

Vous pouvez utiliser la propriété publique identifierForVendor présente dans la classe UIDevice.

let UUIDValue = UIDevice.currentDevice().identifierForVendor!.UUIDString
        print("UUID: \(UUIDValue)")

ÉDITE Swift 3:

UIDevice.current.identifierForVendor!.uuidString

END EDIT

Screenshot for property hierarchy

9
Jayprakash Dubey

Vous pouvez utiliser devicecheck (in Swift 4) documentation 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" ...
    }
}

Utilisation typique:

En règle générale, vous utilisez les API DeviceCheck pour vous assurer qu'un nouvel utilisateur n'a pas déjà utilisé une offre sous un autre nom d'utilisateur sur le même appareil.

Action du serveur requise:

Voir WWDC 2017 - Session 702

plus d'articles de Santosh Botre - Identifiant unique pour les appareils iOS

Votre serveur associé associe ce jeton à une clé d'authentification que vous recevez de Apple et utilise le résultat pour demander l'accès aux bits par périphérique.

8
iluvatar_GR

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")!)
1
n.by.n
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)
        }
    }
}
0
Joey